2012-05-08 11 views
2

foreachを使用してデータベースに複数のデータを挿入するにはどうすればよいですか?
私はformからjs関数で行を追加および削除するためのドロップダウンメニューを持っています。私は新しい行(フォームに追加)から私のデータベースにデータを挿入したいと思います。
これは私のフォームです:foreachループが見つからない

<form action="insert.php" method="POST"> 
      <input type="button" value="Add Row" onClick="addRow('tableID')"/> 
     <input type="button" value="Delete Row" 
onClick="deleteRow('tableID')"/> 
<table class="table" bgcolor="#CCCCCC"> 
<thead> 
<tr> 
<td></td> 
<td><center>Item Description</center></td> 
<td><center>Price (RM)</center></td> 
<td><center>Month</center></td> 
<td><center>Amount (RM)</center></td> 
</tr> 
</thead> 
<tbody id="tableID"> 
<tr> 
<td><input type="checkbox" name="chk"></td> 
<td> 
<select name="item_description"> 
    <option value="deposit">Deposit</option> 
    <option value="rental">Rental</option> 
    <option value="stamp">Stamp Duty</option> 
    <option value="process">Process Fee</option> 
    <option value="ap">AP</option> 
</select> 
</td> 
<td><input id="price" name="price" type="text"></td> 
<td><input id="month" name="qty" type="text"></td> 
<td><input id="amount" name="amount" type="text"></td> 
</tr> 
</tbody> 
</table> 
</form> 

は、これは私のINSERTクエリです:

<?php 
//some connection code here 
if(isset($_POST['submit'])) 
{ 
$item = array(
'item_description' => '', 
'price' => '', 
'qty' => '', 
'amount' => '', 
); 
foreach ($item as $key => $value){ 
$value = $_POST[$key]; 
} 
} 
$last_insert_payment_id=mysql_insert_id(); 
$sql1="INSERT INTO payment_item (payment_id, payment_item_id, item_description, price, qty, amount) 
VALUES 
('$last_insert_payment_id','NULL','$_POST[item_description]','$_POST[price]','$_POST[qty]','$_POST[amount]')"; 
if (!mysql_query($sql1,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 
echo "1 record added"; 
?> 

は、誰かがこれを理解するために私を助けることができる願っています。ありがとうございました。

+1

...そうですか?そうでない場合、何がうまくいかないのですか?それはMySQLのエラーですか?その場合、mysql_error()は何ですか?または、それは実行されますが、期待される結果が得られない場合、どのような結果が得られ、何を期待していますか? (正確にあなたの質問は何ですか?) –

+1

あなたのコードの問題ではなく、あなたのコードはSQLインジェクションに対して非常に脆弱です。誰かが簡単にあなたのデータベースをハックし、すべてのレコードを削除することができます。あなたは常にあなたが着信データをエスケープしたい。 – Daedalus

+0

@ mathematical.coffeeそれは実行され、エラーは発生しませんが、新しい行テーブルを追加すると、そのデータのみがデータベースに入り、データが表示されません。 – Syida

答えて

2

「行を追加」をクリックして余分なデータ行を入力して「送信」をクリックすると、最後の行だけがデータベースに挿入されます。

私はあなたの$_POST['price']$_POST['chk']など、この場合、

<tr> 
<td><input type="checkbox" name="chk"></td> 
... and so on 

あなたが「行の追加」をクリックすると、以下のHTMLを(あなたの質問に行と同じ)あなたのテーブルに追加されていることを推測していますhane chkの複数の入力があるので、おそらく各行に対して上書きされています。

は、あなたの代わりにinput id="chk[]"input id="chk"を設定してみてください、その後、$_POST['chk']配列、各行に1つになります。

$_POST['chk'][i]で各行にアクセスできます。

あなたのコードをSQLインジェクションに安全にすることについてのコメントや、$_POST[price](あなたのSQLステートメントにあるような)の構文は無効です。おそらく$_POST['price']が必要です。 (Daedalus、Marc B、Los Frijoles)。