试图循环遍历两个$_POST数组,但没有成功


Trying To Loop Through Two $_POST arrays without success

下面是我的表单,我有两个不同的$_POST数组,"id "answers" quantity "。我正在尝试遍历它们,以便更新数据库列。

我的形式:

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

试试这个:(用直接访问取代第二个循环,所以你只得到想要的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++;
        }
    }

由于您希望同时遍历两个数组,因此最好在索引上使用常规的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();
    }
}