2012-05-08 3 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> 

Это моя вставка запроса:

<?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

Значит, вы имеете в виду, когда вы нажимаете «Добавить строку» и вводите дополнительные строки данных, а затем нажмите «Отправить», только последняя строка будет вставлена ​​в базу данных?

Я предполагаю, что при нажатии кнопки «Добавить строку», следующий HTML добавляется в таблицу (такой же, как строки в вашем вопросе)

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

В этом случае, ваш $_POST['price'], $_POST['chk'] и т.д. вероятно, будут перезаписаны для каждой строки, потому что теперь у вас есть несколько входов с hane chk.

попробуйте установить input id="chk[]" вместо input id="chk", а затем $_POST['chk'] будет массив, один для каждой строки.

Вы можете получить доступ к каждой строке через $_POST['chk'][i].

Есть также другие рекомендации в комментариях о том, как сделать код безопасным для SQL-инъекции, а также тот факт, что $_POST[price] (как и в вашем SQL-заявлении) является недопустимым синтаксисом; вы, вероятно, хотите $_POST['price']. (Daedalus, Marc B, Los Frijoles).