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> 

orders_productsテーブル:

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);
}

1つのクエリでデータをリンクするために結合を実行しています。これにより、1つのクエリですべての製品情報を取得できます。私が疑うあなたの問題は、周りの引用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 に答える