php 通过循环更新

Posted

技术标签:

【中文标题】php 通过循环更新【英文标题】:php Update via loop 【发布时间】:2015-06-18 13:05:16 【问题描述】:

当用户填写表格时,他们还填写了轴数。信息在提交时被发送到表格:“train_information”。行车轴是 FK,也可以在“车轴”表中发送。 插入后的表轴是这样的:

现在我希望能够更新距离(Wich 现在为 NULL)。 我通过显示轴的数量并制作它们的字段框来做到这一点:

                 <tr> 
                    <?php      
                        foreach($show_axle as $axleposition) ?>
                        <input type='hidden' name='axle_id' value='<?php echo $axleposition['axle_id']?>'>
                        <td><input type='text' name='distance' id = "<?php echo $axleposition['axle_id']?>"placeholder="<?php echo $axleposition['axle']?>"></td>

                        <?php
                         
                    ?>
                </tr>

如您所见,我以表格形式显示它。表单动作是:

<form method='POST' action='axle_update.php'>

因此,当他们按下提交时,他们会转到 axis_update.php,如下所示:

<?php
    ?><pre><?php print_r($_POST) ?> </pre> <?php 

    $update_axle = $database->update_axles();
?>

(pre 是我自己看发送的内容)

这有点工作。因为当我有例如 12 行时(见图)。它只更新最后一行。现在这是因为隐藏字段的名称在任何地方都是相同的。但我不知道如何改变它(在查询中)。

编辑:

抱歉忘记了 update_axles:

function update_axles() 
        $sql = "UPDATE axle SET distance = :distance WHERE axle_id = :axle_id";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(':axle_id', $_POST['axle_id'], PDO::PARAM_INT);
        $sth->bindParam(":distance", $_POST['distance'], PDO::PARAM_STR);
        $sth->execute();
    

【问题讨论】:

告诉我们$database-&gt;update_axles() 您的装订顺序不正确。 你能告诉我@EternalHour 有什么不对吗?因为它会更新。但只有最后一行。那是因为名字到处都是一样的。 (见隐藏字段) “但我不知道如何改变它(在查询中)” – 你在查询中是什么意思?输入字段不是您查询的一部分,因此您不能在“查询”中更改它们的名称。如果您想通过相同的名称传递多个参数,那么对于 PHP,您必须在名称中使用方括号,例如 name="axle_id[]"。您还可以预先指定结果数组的键,name="axle_id[0]"name="axle_id[1]" 等 - 这将为您提供一个数组,然后您可以循环访问。 每次添加另一个输入时,您的输入都会被覆盖。使用name='axle_id[]',然后在update_axles()上循环你的$_POST 【参考方案1】:

每次添加另一个输入时,您的输入都会被覆盖。

要解决这个问题,请使用输入数组。如下;

<tr> 
<?php      
  foreach($show_axle as $axleposition) ?>
       <input type='hidden' name='axle_id[<?php echo $axleposition['axle_id']?>]' value='<?php echo $axleposition['axle_id']?>'>
       <td><input type='text' name='distance[<?php echo $axleposition['axle_id']?>]' id = "<?php echo $axleposition['axle_id']?>"placeholder="<?php echo $axleposition['axle']?>"></td>
<?php
   
?>
</tr>

现在,当您发布表单时,您将拥有一个关联数组。

现在您所要做的就是在循环中调用$database-&gt;update_axles(),传递 ID 和值。

注意:根据输入的大小,不要将其传递给循环,因为不建议在循环中查询!

foreach($_POST['axle_id'] as $id) 
    $update_axle = $database->update_axles($id);

最后,更改您的方法以接受这些参数,并修改您的查询。

function update_axles($id) 
  $sql = "UPDATE axle SET distance = :distance WHERE axle_id = :axle_id";
  $sth = $this->pdo->prepare($sql);
  $sth->bindParam(':axle_id', $id, PDO::PARAM_INT);
  $sth->bindParam(":distance", $_POST['distance'][$id], PDO::PARAM_STR);
  $sth->execute();

【讨论】:

很好解释的答案。

以上是关于php 通过循环更新的主要内容,如果未能解决你的问题,请参考以下文章

通过提交显示所有行并更新所有行

如何通过foreach循环更新

如何使用多个 for 循环在 php 中创建 sql 语句

通过 PHP 循环动态添加 <img> 标记,通过在每个循环上调用 JavaScript 函数

通过 for 循环和 php 数组进行多次插入(通过 jQuery AJAX 接收)

通过 for 循环执行立即更新