【问题标题】:Can't figure out foreach loop无法弄清楚 foreach 循环
【发布时间】:2012-05-08 03:04:45
【问题描述】:

如何使用foreach 在我的数据库中插入多个数据。
我的form 有一个下拉菜单,用于通过js 函数添加和删除行。我想将新行中的数据(在表单中添加)插入到我的数据库中。
这是我的表格:

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

希望有人可以帮助我解决这个问题。谢谢。

【问题讨论】:

  • 那么...它有效吗?如果没有,有什么问题?是否是 MySQL 错误,在这种情况下,mysql_error() 是什么?或者它运行但没有给你预期的结果,在这种情况下你得到什么结果,你期望什么? (你的问题到底是什么?)
  • 关于您的代码主题,但不是您的问题,您的代码很容易受到 SQL 注入;有人可以轻松破解您的数据库并删除您的所有记录。你总是想逃避传入的数据。
  • @mathematical.coffee 它已运行并且没有出现任何错误,但是当我添加新行表时,只有该数据将进入数据库,它之前的数据不会显示。
  • 在一个 mysql 调用中指定 $con 而在其他调用中不指定,如果您打开了多个连接,可能会导致非常不稳定的问题。要么在任何地方使用 $con 选项,要么根本不使用它。
  • 在您的字符串 $sql1 中,您应该像这样在单引号内引用您的数组:{$_POST['item_description']}(注意大括号和字段名称周围的引号)。此外,您需要使用 mysql_real_escape_string 而不是实际将 post 值放在那里,因为您目前容易受到 mysql 注入的影响。

标签: php mysql foreach


【解决方案1】:

所以你的意思是当你点击“添加行”并输入额外的数据行然后点击“提交”时,只有最后一行被插入到数据库中?

我猜当您单击“添加行”时,以下 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] 访问每一行。

cmets 中还有其他关于使您的代码对 SQL 注入安全的建议,以及 $_POST[price](就像您在 SQL 语句中一样)是无效语法的事实;你可能想要$_POST['price']。 (代达罗斯,马克 B,洛斯弗里霍勒斯)。

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2021-01-06
    相关资源
    最近更新 更多