我相信我的代码没有完全正常工作,因为我在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>
答案 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。相反,您应该使用MySQLi或PDO。作为临时解决方案,您可以将$_GET['orderid']
强制转换为整数,或检查$_GET['orderid']
是否为整数。