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->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->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 通过循环更新的主要内容,如果未能解决你的问题,请参考以下文章
通过 PHP 循环动态添加 <img> 标记,通过在每个循环上调用 JavaScript 函数