由于if语句,Array不提取所有数据

时间:2013-03-15 21:02:50

标签: php arrays if-statement while-loop

我相信我的代码没有完全正常工作,因为我在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>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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 injection开放,因为您使用的是mysql_*个函数,查询参数不是sanitized。相反,您应该使用MySQLiPDO。作为临时解决方案,您可以将$_GET['orderid']强制转换为整数,或检查$_GET['orderid']是否为整数。