【发布时间】:2014-02-26 11:10:29
【问题描述】:
我正在尝试使用 foreach 循环更新我的数据库。每次运行循环时,都需要更改两行,但是数据库会使用相同的数据更新这两行。我的表单 php 代码是:
<input name="poles<?php echo $curtains['room_curtains_id']; ?>" type="radio" class="calc" id="<?php echo $poles['curtains_poles_id']; ?>" value="<?php echo $poles['curtains_poles_price']; ?>,<?php echo $poles['curtains_poles_id']; ?>">
<input name="pleats<?php echo $curtains['room_curtains_id']; ?>" type="radio" class="calc" id="<?php echo $pleats['curtains_pleats_id']; ?>" value="<?php echo $pleats['curtains_pleats_price']; ?>,<?php echo $pleats['curtains_pleats_id']; ?>">
发帖时,我的回报是:
Array
(
[poles1] => 0.00,1
[pleats1] => 40.00,2
[poles2] => 120.00,2
[pleats2] => 0.00,1
[poles3] => 150.00,3
[pleats3] => 40.00,2
)
现在在更新数据库时,我使用以下代码:
foreach ($_POST as $key => $value) {
$new_value = explode(",", $value);
if (strpos($key, 'poles')!==false) {
$result = mysql_query("UPDATE basket SET product_id = '".mysql_real_escape_string($new_value[1])."', line_price= '".mysql_real_escape_string($new_value[0])."' WHERE session_id = '$session_id' AND plot_id = '".mysql_real_escape_string($plot_id)."' AND product_type='Poles' AND rooms_curtains_id='".mysql_real_escape_string($key)."'");
}
if (strpos($key, 'pleats')!==false) {
$result2 = mysql_query("UPDATE basket SET product_id = '".mysql_real_escape_string($new_value[1])."', line_price= '".mysql_real_escape_string($new_value[0])."' WHERE session_id = '$session_id' AND plot_id = '".mysql_real_escape_string($plot_id)."' AND product_type='Pleats' AND rooms_curtains_id='".mysql_real_escape_string($key)."'");
}
}
- 请注意,这两个查询的唯一区别是
product_type。
当我运行此程序时,product_type='Poles' ($result) 的数据库已正确更新,但 product_type='Pleats' ($result2) 的信息相同,应该使用密钥 pleats1,pleats2,pleats3 进行更新。
【问题讨论】:
-
您从未过滤过
$key变量。你告诉 MySQL:Update me the rows where product_type is 'Pleats' with the variable $key,但你从来没有指定 $key 应该包含什么 -
您的查询接受了太多输入,最好向我们展示每列要打印的值。
标签: php mysql arrays post foreach