我正在尝试使用 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
.
最佳答案
您处理了 MySQL 结果集的条件,但您从未处理过 PHP 代码中的条件。当您指定具有值 Pleats
的列时,您希望 MySQL 能够神奇地理解,以便在您的 foreach()
循环中搜索 %pleats%
,但是它永远不会发生,因为那是两件不同的事情。
mysql 查询的执行次数与循环中的迭代次数相同。在您的情况下 - 每个 $key
都会执行 6 次查询。
如果你想用包含 pleats
的 $key
更新包含 product_type='Pleats'
的行,你应该告诉PHP 如此。它不再是 MySQL 级别。
foreach ($_POST as $key => $value) {
$new_value = explode(",", $value);
$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)."'");
}
}
关于php - foreach $_POST 更新取决于 $key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22039513/