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

时间:2013-04-20 21:41:27

标签: php mysql loops

以下是我的表单,其中我有两个不同的$ _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数组。我如何调整代码?

2 个答案:

答案 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();
    }
}