フアン、これは本当に長くなっていて、Stack Overflowサイトがこの種のダイアログを対象としているかどうかはわかりませんが、もう一度説明しようと思います。ここに投稿するコードが単純になるように、テーブルを単純化します。
CREATE TABLE orders (
orderID int unsigned not null auto_increment,
user int unsigned not null,
PRIMARY KEY (orderID)
);
CREATE TABLE orderitems (
oiID int unsigned not null auto_increment,
order int unsigned not null,
item int unsigned not null,
PRIMARY KEY (oiID)
);
上記は、ユーザーのテーブル(ユーザーの名前と電子メールなど)とアイテムのテーブル(アイテム名とアイテムの価格)があることを前提としています。
また、(間違っていますが、簡単にするために)私のシナリオでは、私が販売しているアイテムを1つ以上購入したいと思う人は誰もいないし、3つ以上のアイテムを購入したいと思う人もいないと思います。同時に。
次に、注文時にユーザーがログインする必要があるため、HTML入力フォームは十分に単純になります(したがって、ユーザーIDはすでにわかっています-そしてそれは私のphp $ _SESSION ['userID']グローバル変数に保持されます)、注文は常に動的ですユーザーが[チェックアウト]ボタン(フォームを送信)をクリックしたときに割り当てられるため、ユーザーが入力する必要があるのはアイテムIDだけです(たとえば、ドロップダウンリストから選択します)。
非常にシンプルなエントリーフォームは次のとおりです。
<form action='orderit.php' method='post'>
<select name='item[]'>
<option value='' selected='selected'>Pick an item from the list!</option>
<option value='1'>Knife</option>
<option value='2'>Spoon</option>
<option value='3'>Lava lamp</option>
<option value='4'>HB pencil</option>
</select><br/>
<select name='item[]'>
<option value='' selected='selected'>Pick an item from the list!</option>
<option value='1'>Knife</option>
<option value='2'>Spoon</option>
<option value='3'>Lava lamp</option>
<option value='4'>HB pencil</option>
</select><br/>
<select name='item[]'>
<option value='' selected='selected'>Pick an item from the list!</option>
<option value='1'>Knife</option>
<option value='2'>Spoon</option>
<option value='3'>Lava lamp</option>
<option value='4'>HB pencil</option>
</select><br/><br/>
<input type='submit' value=' Checkout ' name='do'/>
</form>
上記から、ユーザーがすべてのデータをチェックアウトするときよりもわかります(つまり、顧客が行った選択action
はに設定されたに送信されorderit.php
ます。ユーザーが有効な情報を送信していることを確認する必要はありません。最新のテクノロジー(msqli)を使用せず、代わりに非推奨のmysqlルーチンを使用しています。
だからここにそれは続きます:
<?php
//here you will have your database opened, session initiated and so on
// $db contains the database connection handler
// $_POST['userID'] contains valid user's id
if (isset($_POST['item']) && count($_POST['item'])>0) {
//they ordered something we can create the order
$q=mysql_query("INSERT INTO orders SET user='".mysql_real_escape_string($_SESSION['userID'])."'",$db);
if (!$q)
die("An error while creating new order");
$orderID=mysql_insert_id($db); //fetch the just-now created order's ID
foreach($_POST['item'] as $item) { //go through all the ordered items
$q=mysql_query("INSERT INTO orderitems SET order='$orderID', item='".abs((int) $item)."'");
if (!$q)
die("Couldn't save item $item of order #$orderID");
}
print "Your order was saved successfuly!";
} else
die("This is an empty order");
?>
そしてそれがすべてです。
現在、このコードを頭のてっぺんから書いているので、タイプミスやその他の種類のエラーが発生する可能性があることに注意してください。コードの実用的な部分としてではなく、おおよそのガイドとしてそれをとってください。