0

我相信我的代码没有完全工作,因为我在 if 语句中有 while 循环,并且只允许循环运行一次。该代码允许管理员查看订单并访问有关该订单的所有信息。但是,使用这样的代码,即使订单包含 2 个或更多,它也只能查看一个产品。下面是我的 php 代码块

if (isset($_GET['orderid'])){
$targetID = $_GET['orderid'];
//query to find the item
$products_ordered = "";
$sql = mysql_query("SELECT * FROM `transactions` WHERE `order_id` ='$targetID' LIMIT 1");
$orderCount = mysql_num_rows($sql);

while ($transactions = mysql_fetch_array($sql)) {
    //creating variables from the information
    $order_id = $transactions["order_id"];
    $mem_id = $transactions["mem_id"];
    $OrderDate = $transactions["OrderDate"];
    $ship_phone = $transactions["ship_phone"];
    $ship_address = $transactions["ship_address"];
    $ship_city = $transactions["ship_city"];
    $ship_county = $transactions["ship_county"];
    $ship_postcode = $transactions["ship_postcode"];
    $ship_country = $transactions["ship_country"];

    $order_details = mysql_query("SELECT * FROM `transactionDetails` WHERE `order_id` = $order_id") or die(mysql_error());
    $orderDetailsCount = mysql_num_rows($order_details);
    while ($row = mysql_fetch_array($order_details)) {
        //creating variables from the information
        $order_details_id = $row["Order_details_ID"];
        $order_product_id = $row["Product_ID"];
        $order_product_price = $row["Price"];
        $order_product_quantity = $row["Quantity"];

        $member_details = mysql_query("SELECT * FROM `members` WHERE `mem_id` = $mem_id") or die(mysql_error());
        $memberDetailsCount = mysql_num_rows($member_details);
        while ($row = mysql_fetch_array($member_details)) {
            //creating variables from the information
            $order_mem_fname = $row["mem_first_name"];
            $order_mem_lname = $row["mem_last_name"];

            $product_details = mysql_query("SELECT * FROM `products` WHERE `id` = $order_product_id") or die(mysql_error());
            while ($row1 = mysql_fetch_array($product_details)) {
            //creating variables from the information
            $product_name = $row1["product_name"];

            $products_ordered = "<tr>
            <td width=\"20%\">Product Name</td>
            <td width=\"80%\"><label> $product_name
            </label></td>
            </tr>
            <tr>
            <td width=\"20%\">Quantity</td>
            <td width=\"80%\"><label> $order_product_quantity
            </label></td>
            </tr>
            <tr>
            <td width=\"20%\">Price per Item</td>
            <td width=\"80%\"><label> $order_product_price
            </label></td>
            </tr>";
                }
        }
    }
}

if ($orderCount == 0) {
echo "Sorry, order doesn't exist";
exit();
}
}

这是我的表,其中包含数据

<table>
            <tr>
                <td width="20%">Order ID:</td>
                <td width="80%"><label><?php echo $order_id; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">Order Date</td>
                <td width="80%"><label><?php echo $OrderDate; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">First Name</td>
                <td width="80%"><label><?php echo $order_mem_fname; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">Last Name</td>
                <td width="80%"><label><?php echo $order_mem_lname; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">Contact Number</td>
                <td width="80%"><label><?php echo $ship_phone; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">Address</td>
                <td width="80%"><label><?php echo $ship_address; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">City</td>
                <td width="80%"><label><?php echo $ship_city; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">County</td>
                <td width="80%"><label><?php echo $ship_county; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">Post Code</td>
                <td width="80%"><label><?php echo $ship_postcode; ?> </label></td>
            </tr>
            <tr>
                <td width="20%">Country</td>
                <td width="80%"><label><?php echo $ship_country; ?> </label></td>
            </tr>
            <?php echo $products_ordered;?>
        </table>
4

2 回答 2

2

这是一种获取数据的复杂方法,可以通过一些 JOIN 和更少(可能是一个)查询来完成。

您的问题是您在两个级别使用 $row:使用 $order_details 和使用 $member_details。由于每个订单只有一个成员,因此第二个订单行没有更多可检索的内容。

于 2013-03-15T21:43:10.527 回答
1

您将输出保存在一个变量中,下次它通过代码时,它将覆盖原始值。

代替

$products_ordered = "<tr>

你应该这样做

$products_ordered .= "<tr> // notice the dot to concatenate the original html with the new html

如果您的第一个查询返回 2 个结果并且您期望 2 个产品,这意味着主循环中的每个 while 循环必须至少循环一次。

打印每个计数值并确保第一个显示2和其他显示1。如果它并不总是显示1,则意味着您的数据库缺少数据。

您还可以通过使用SQL JOIN来避免此问题。这样,您可以直接使用 SQL 客户端或 phpmyadmin 测试最终输出。

此外,您的代码对SQL 注入是开放的,因为您使用mysql_*的是函数并且查询参数未经过清理。相反,您应该使用MySQLiPDO。作为临时解决方案,您可以将类型转换$_GET['orderid']为整数或检查是否$_GET['orderid']为整数。

于 2013-03-15T22:00:03.000 回答