foreach $ _POST更新取决于$ key

时间:2014-02-26 11:10:29

标签: php mysql arrays post foreach

我正在尝试使用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)的信息相同,应使用密钥pleats1pleats2进行更新pleats3

1 个答案:

答案 0 :(得分:1)

您处理MySQL结果集的条件,但您从未处理过PHP代码中的条件。当您指定值为Pleats的列时,您可以理解MySQL要理解,在foreach()循环中搜索%pleats%,但它永远不会发生,因为这是两个不同的事情。 / p>

mysql查询将被执行多次,因为循环中的迭代是。在您的情况下 - 每个查询将在每个$key执行6次。

如果要更新包含product_type='Pleats'的{​​{1}} $key的行,则应该告诉PHP。它已不再是MySQL级别了。

pleats