如何将mysql结果行存储为包含表格式字符串的变量?

时间:2018-07-07 03:29:13

标签: mysql loops mysqli while-loop

我的目标是显示交易中的mysql数据,以便在不同的时间在不同的页面上查看。(交易完成后,需要从该表中删除mysql数据以清空购物车),所以,我尝试了将mysql结果存储在变量中,然后编码并将其数据插入我的Orders表中的Blob格式的列中。然后,我在订单页面(用于查看先前交易的页面)中添加了具有Blob值的表单输入。它显示表格和一行结果。 while循环似乎并不将获取的结果的每次迭代都存储到表中,因此我在订单页面上的输出仅包含一个订单项,而不是应有的多个。谁能帮助我了解如何解决我的循环问题,以便它可以正确存储数据?

我的while循环并尝试将其连接回字符串以用作我的订单页面上的html表:

...
$loop= "";
while($row = $result->fetch_assoc()) { 
$loop .=   "<tr><td>$row[product_id]</td>
                <td>$row[price]</td>
                <td>$row[quantity]</td></tr>";
}
$products= "<table><tr><th>Product</th>
                <th>Price</th>
                <th>Quantity</th>";

 $end =          "</table>";

$products= $products.$loop.$end;
$products=base64_encode(serialize($products));
$sql = "INSERT INTO orders (date,username,response,products)
VALUES ('$time', '$username', '$serial','$products')";
if ($conn->query($sql) === TRUE) {

} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

我的订单页面:

echo "<table id= 'orders' style='text-align: center'>
<tr><th> date </th>
    <th> username  </th>
    <th> address  </th>
    <th> product total  </th>
    <th> shipping total  </th>
    <th> reference # </th>
    <th> products  </th>
    <th> packaging  </th></tr>";

$sql = "SELECT * FROM orders";
$result = $conn->query($sql);
if (!$result) {
trigger_error('Invalid query: ' . $conn->error);
}
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
    $response = $row['response'];

echo "<tr>  <td> $row[date]</td>
        <td> $row[username]</td>
        <td> $row[address]</td>
        <td> $row[prodtotal]</td>
        <td> shipping total </td>
        <td> reference #</td>
        <td> <form action= 
'http://localhost/WIP/secure_login/cart/Backend/orderview.php' method='POST'>
        <input type='hidden' name='products' value='$row[products]'>
        <input type= 'submit' value='Products'></form></td>
        <td> <form action= 
'http://localhost/WIP/secure_login/cart/Backend/packageview.php' 
method='POST'>
        <input type='hidden' name='pack' value='$row[response]'>
        <input type= 'submit' value='Packaging'></form></td></tr>";

 }}

1 个答案:

答案 0 :(得分:0)

由Solarflare解答: $ result-> fetch_assoc()是第二次使用该结果集吗?然后检查一下。但是通常,以这种方式存储数据并不是一个好主意。如果要存储购物车历史记录,请将其存储在购物车历史记录表中! (例如,一个包含product_id,价格,数量和订单表主键的表)。假设您决定例如将价格*数量显示为历史记录中的第四列。或者,如果您想将数据用于显示表格以外的其他内容,例如每月购物车产品数量的报告。 – 1小时前的Solarflare

这个答案告诉我,我不需要第二次获取结果,并且可以在第一个中完成所有操作。它不仅解决了我的问题,而且使我意识到,使用额外的表而不显示已保存的html代码将使我的购物车历史记录数据库在将来变得更加灵活。