1

我建立了一个简单的网上商店,我需要在其中处理订购的产品。订单非常好,带有订购产品的 ID。

我希望在显示订单所有详细信息的页面上显示产品的名称和价格。可惜没效果。。

这是我的尝试:

获取订购产品的代码:

$query2 = mysql_query("SELECT * FROM orders_products WHERE order_id='".$_GET['order']."'");
while ($line2 = mysql_fetch_assoc($query2))
{
$row2[] = $line2;
$smarty->assign('row2', $row2);
}

(尝试)获取产品名称和价格:

$query4 = mysql_query("SELECT * FROM products WHERE id ='".$row2['product_id']."'");
while ($line4 = mysql_fetch_assoc($query4))
{
$row4[] = $line4;
$smarty->assign('row4', $row4);
}

显示它(请原谅我在 html 中使用了一些荷兰语单词):

                <div class="module">
                <h2><span>Bestelde Producten</span></h2>
                {section name=row2 loop=$row2}
                 {section name=row4 loop=$row4}
                <div class="module-table-body">
                    <table id="bestelling" class="bestelling">
                        <thead>
                            <tr>
                                <th style="width:3%">#</th>
                                <th style="width:10%">Naam</th>
                                <th   style="width:10%">Bedrag</th>                         
                                <th style="width:3%">Aantal</th>                                    
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>{$row2[row2].id}</td>
                                <td>{$row4[row4].name}</td>
                                <td>{$row4[row4].price}</td>
                                <td>{$row2[row2].product_amount}</td>

                            </tr>
                        </tbody>
                    </table></br>
                    <p><strong>Totaal: </strong></br>
                    <strong>BTW (21%): </strong></p>
                    </br>
                     <p><strong>Totaal Inclusief BTW: </strong></p>
                     {/section}
                    <div style="clear: both"></div>
                 </div> <!-- End .module-table-body -->         
                 </div>     
                 </div> 

订单产品表:

id order_id product_id product_amount

产品表:
id category_id name description slug price in_stock


谢谢你们的回答!卡米的代码对我有用。

我现在如何拥有它:

$queryx = mysql_query("SELECT * FROM products inner join orders_products on products.id = orders_products.product_id WHERE order_id = '".mysql_real_escape_string($_GET['order'])."'");

while ($linex = mysql_fetch_assoc($queryx))
{
$rowx[] = $linex;
$smarty->assign('rowx', $rowx);
}

你觉得这安全吗?我最终会开始使用 mysqli 或 PDO,但我觉得它太难了,因为我还是个初学者..

你知道任何关于保护 php -> mysql 的好指南吗?

到目前为止感谢!

4

2 回答 2

1

尝试

$queryx = mysql_query("SELECT * FROM products inner join orders_products on products.id = orders_products.product_id WHERE order_id = " . $_GET['order']);

while ($linex = mysql_fetch_assoc($queryx))
{
    $rowx[] = $linex;
    $smarty->assign('rowx', $rowx);
}

我正在通过一个查询将数据链接在一起。这将允许您在一个查询中获得所有产品信息。我怀疑你的问题是周围的引号order_id='".$_GET['order']."'"

于 2012-11-09T01:22:30.900 回答
1

使用连接:

select o.id, o.product_amount, p.name, p.price
from orders_products o join products p
on p.id = o.product_id
where o.id = '" . mysql_real_escape_string($_GET['order']) . "'"

如果你刚刚开始,你不应该使用 mysql_XXX 函数,它们已被弃用并且很容易获得 SQL 注入(你需要mysql_real_escape_string虔诚地使用它来避免它)。您应该使用带有准备好的语句的 mysqli 或 PDO 来避免这个问题。

于 2012-11-09T01:25:15.247 回答