1

以下是我的表单,其中我有两个不同的 $_POST 数组,“ids”和“quantities”。我正在尝试遍历它们,以便更新数据库列。

我的表格:

<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 数组。我需要如何调整我的代码?

4

2 回答 2

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++;
        }
    }
于 2013-04-20T21:44:37.380 回答
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();
    }
}
于 2013-04-20T21:46:27.147 回答