以下是我的表单,其中我有两个不同的$ _POST数组,“ids”和“数量”。我正在尝试遍历它们,以便我可以更新数据库列。
我的表格:
<form action="" method="post">
<ul>
<?php foreach($rows as $row) { ?>
<li>
<input type="hidden" name="ids[]" value="<?php echo $row['id']; ?>">
</li>
<li>
<input type="text" name="quantities[]" value="1" size="3">
<?php echo $row['title']; ?>
</li>
<?php } ?>
<li>
<br><input type="submit" value="Submit New Release Edits" name="submit">
</li>
</ul>
</form>
我正在尝试运行的代码是为了正确更新数据库:
if(isset($_POST['submit'])) {
foreach($_POST['quantities'] as $quantity) {
foreach($_POST['ids'] as $id) {
$stmt = $db->prepare("UPDATE titles SET release_quant=:release_quant WHERE id=:id");
$stmt->bindValue(':release_quant', $quantity, PDO::PARAM_INT);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
}
}
}
我知道代码不正确,因为它不会同时遍历数量和id数组。我如何调整代码?
答案 0 :(得分:2)
试试这个:(通过直接访问取代第二个循环,所以你只得到想要的ID)
$i = 0;
if(isset($_POST['submit'])) {
foreach($_POST['quantities'] as $quantity) {
$id = $_POST['ids'][$i];
$stmt = $db->prepare("UPDATE titles SET release_quant=:release_quant WHERE id=:id");
$stmt->bindValue(':release_quant', $quantity, PDO::PARAM_INT);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$i++;
}
}
答案 1 :(得分:1)
由于你想同时循环遍历2个数组,最好在索引上使用常规for循环而不是foreach循环:
if(isset($_POST['submit'])) {
$count = count($_POST['quantities']);
for($i = 0; $i < $count; $i++) {
$stmt = $db->prepare("UPDATE titles SET release_quant=:release_quant WHERE id=:id");
$stmt->bindValue(':release_quant', $_POST['quantities'][$i], PDO::PARAM_INT);
$stmt->bindValue(':id', $_POST['ids'][$i], PDO::PARAM_INT);
$stmt->execute();
}
}