尝试通过两个$ _POST数组循环通过没有成功
问题描述:
以下是我的表单,其中有两个不同的$ _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();
}
}
}
我知道代码是不正确的,因为它不” t同时循环数量和id数组。我如何需要调整我的代码?
答
试试这个:(取代通过直接接入第二循环,所以你只能得到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++;
}
}
答
由于要同时通过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();
}
}
非常感谢。 – JimRomeFan 2013-04-20 21:47:41
如果它对你有帮助,你应该批准这个答案。 – djmati11 2013-04-20 22:00:25
我必须等一段时间才能批准它。 – JimRomeFan 2013-04-20 22:05:31