我正在尝试使用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
。
答案 0 :(得分:1)
您处理MySQL结果集的条件,但您从未处理过PHP代码中的条件。当您指定值为Pleats
的列时,您可以理解MySQL要理解,在foreach()
循环中搜索%pleats%
,但它永远不会发生,因为这是两个不同的事情。 / p>
mysql查询将被执行多次,因为循环中的迭代是。在您的情况下 - 每个查询将在每个$key
执行6次。
如果要更新包含product_type='Pleats'
的{{1}} $key
的行,则应该告诉PHP。它已不再是MySQL级别了。
pleats