php - foreach $_POST 更新取决于 $key

标签 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) 具有相同的信息,它应该使用键更新 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/

相关文章:

arrays - 我想要将一组色 block 叠加到图像上并想要控制它们的颜色范围?

javascript - 在数组中的偶数之间插入连字符

php - 每个用户都应该有一个单独的孤立数据库吗?

php - 使用 PHP 表单中的复选框收集多个信息

php - SQL 代码点火器 : Create savepoint and roll-back to the savepoint/Rollback multiple transaction from controller

php - 数据库没有更新

arrays - 为什么heap.Pop与反向数组一起使用?

php - 如何在wordpress中使用mysql事务?

PHP等同于Perl格式化函数

Mysql:通过不同的值(value)循环创建具有各种选择的过程