我尝试使用表单和foreach循环更新多行。我已经尝试过在stackoverflow上找到的解决方案,但似乎无法让它发挥作用。我在页面project.php?id = 13
上工作我的HTML表单:
<form method="post" action="project.php?id=<?php echo $id; ?>">
<?php while($row = $shops->fetch_assoc()) : ?>
<input type="hidden" name="shop[]" value="<?php echo $row['id']; ?>">
<input type="text" name="boxposition[]" class="form-control" value="<?php echo $row['box_position']; ?>" style="width: 50px;">
<input type="submit" name="update" value="Update Order" class="btn btn-primary">
<?php endwhile; ?>
</form>
我的PHP代码(在同一页面上)执行if(isset($ _ POST [&#39; update&#39;])):
$shopid = $_POST['shop'];
$boxorder = $_POST['boxposition'];
foreach ($shopid as $index => $value) {
$query = "UPDATE shops SET box_position = '".$boxorder[$index]."' WHERE id = '".$shopid[$index]."'";
$update_row = $db->update($query);
不幸的是,它只更新第一行(最低ID)。非常奇怪的是,当我使用它回音时,我得到了正确的值。 E.g:
echo $shopid[$index].'<br>';
echo $boxorder[$index].'<br>';
一个例子:
我更新$ boxorder 2行:
第1行(对于商店1):新值= 6(旧值为7)
第2行(商店2):新值= 8(旧值为5)
使用foreach回显结果,它显示正确的值:
1(店铺ID)
6(新的boxorder值)
2(店铺ID)
8(新的boxorder值)
我错过了什么?在此先感谢帮助我!
答案 0 :(得分:1)
尝试以下
<?php while($row = $shops->fetch_assoc()) : ?>
<form method="post" action="project.php?id=<?php echo $id; ?>">
<input type="hidden" name="shop[]" value="<?php echo $row['id']; ?>">
<input type="text" name="boxposition[]" class="form-control" value="<?php echo $row['box_position']; ?>" style="width: 50px;">
<input type="submit" name="update" value="Update Order" class="btn btn-primary">
</form>
<?php endwhile; ?>
到
<form method="post" action="project.php?id=<?php echo $id; ?>">
<?php while($row = $shops->fetch_assoc()) : ?>
<input type="hidden" name="shop[]" value="<?php echo $row['id']; ?>">
<input type="text" name="boxposition[]" class="form-control" value="<?php echo $row['box_position']; ?>" style="width: 50px;">
<input type="submit" name="update" value="Update Order" class="btn btn-primary">
<?php endwhile; ?>
</form>
答案 1 :(得分:0)
$shopid = $_POST['shop'];
$boxorder = $_POST['boxposition'];
$query = "UPDATE shops SET box_position =? WHERE id =?";
$db->prepare($query);
foreach ($shopid as $index => $value) {
$db->execute(array($boxorder[$index], $shopid[$index]));
}
这应该这样做。这样您就可以使用?
准备语句并将其填入您的每个语句中。
你也可以这样做:
$query = "UPDATE shops SET box_position = :position WHERE id = :id ";
$db->prepare($query);
foreach ($shopid as $index => $value) {
$db->execute(
array(
':position' => $boxorder[$index],
':id' => $shopid[$index]
)
);
}