【问题标题】:Issue with updating array data in foreach loop在 foreach 循环中更新数组数据的问题
【发布时间】:2018-11-10 14:08:20
【问题描述】:

我正在处理一张要更新表格数据的发票。

我的脚本只更新表格的最后一行。 这可以与这个 foreach 循环一起使用吗?

以下是我尝试使用的脚本:

HTML 输入字段

<tr>
    <input type="hidden" name="data['+i+'][Id]" value="<?php echo $Id; ?>" >
    <input type="hidden" name="data['+i+'][ItemId]" value="<?php echo $item_Id; ?>" >
    <td><input type="text" value="<?php echo $item; ?>"></td>
    <td><input type="text" name="data['+i+'][QTY]" value="<?php echo $Quantity; ?>"</td>
    <td><input type="number" value="<?php echo $price; ?>"></td>
    <td><input type="number" name="data['+i+'][total]" value="<?php echo $total; ?>"></td>
</tr>

PHP

if (isset($_POST['submit'])) {
    foreach($_POST['data'] as $key => $data) {
        $Id = intval($data['Id']);
        $itemId = intval($data['ItemId']);
        $QTY = intval($data['QTY']);
        $Total = intval($data['total']);

        if($itemId > 0) {
            $query = $db - > prepare("UPDATE table SET QTY = :QTY where id = :ID ");
            $query - > execute(array(':ID' => $ID, ':QTY' => $QTY));
        }
    }
}

【问题讨论】:

  • 您的 HTML 和 PHP sn-ps 之间有几个变量名不匹配。即,$item_Id$itemId$Quantity$QTY$total$Total。您还需要提供显示您如何分配$price$item 的sn-p。
  • 输入名称索引中的“i”变量是什么?
  • @IvanTalanov 变量的名称不会对提交的内容产生任何影响,但输入的名称会。
  • @Tobia - 这些是从数据库中获取的多行。这就是我分配“i”的原因。
  • 您能告诉我们生成的 html 是什么吗?例如:

标签: php foreach


【解决方案1】:

这似乎不是有效的语法:

data['+i+']

PHP 会将其视为具有固定值的字符串,这意味着您的$_POST[data] 数组将只有一个键,每次出现新的键都会覆盖前一个键。最后它会是这样的:

$_POST[data] == array( '+i+' => array(
    'Id' => ...,
    'ItemId' => ...,
    'QTY' => ...,
    'total' => ...
));

您可能希望在代码中使用一些 PHP 以正确编写 i 索引:

<tr>
    <input type="hidden" name="data[<?php echo $i; ?>][Id]" value="<?php echo $Id; ?>" >
    <input type="hidden" name="data[<?php echo $i; ?>][ItemId]" value="<?php echo $item_Id; ?>" >
    <td><input type="text" value="<?php echo $item; ?>"></td>
    <td><input type="text" name="data[<?php echo $i; ?>][QTY]" value="<?php echo $Quantity; ?>"</td>
    <td><input type="number" value="<?php echo $price; ?>"></td>
    <td><input type="number" name="data[<?php echo $i; ?>][total]" value="<?php echo $total; ?>"></td>
</tr>

并为每一行递增。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2016-02-26
    • 1970-01-01
    • 2011-05-08
    • 2018-06-10
    • 2021-05-19
    • 2014-11-17
    相关资源
    最近更新 更多