循环通过 $_POST

Posted

技术标签:

【中文标题】循环通过 $_POST【英文标题】:Looping through $_POST 【发布时间】:2012-09-14 09:41:45 【问题描述】:

我有一个带有“章节”表的 mysql 数据库。表“章节”具有三列:(1) id、(2) 名称、(3) 密码。

我正在使用 php 将“章节”中的数据动态输出到文本框中。结果如下所示:

<form name="current_chapters" method="post" action="UpdateChapters.php">    
<input type = 'text' name='id' value='$row['id']'>
<input type = 'text' name='name' value='$row['name']'>
<input type = 'password' name='password' value='New Password'>
<input type = 'submit'>
</form>

请注意,此页面用于重置(不显示)密码,因此是“新密码”默认值。

我正在寻找循环遍历所有 $_POST 数据的最佳方法,然后更新该数据最初来自的原始“章节”表。

我尝试通过 foreach 循环访问 $_POST 并将输入名称更改为“id[]”、“name[]”和“password[]”,但这似乎不是最优雅的方法,尤其是 id 部分......你最终会得到像 id[0] = 133 这样的东西,这看起来很乱。

关于如何进行此操作的任何建议?

提前致谢!

【问题讨论】:

为什么需要循环访问 $_POST?它是一个关联数组,显然你已经知道键了吗? 我认为我必须循环访问 $_POST,因为显示的条目数是动态的……这取决于数据库中有多少。有没有更好的方法来解决这个问题? 我只是没有看到迭代 $_POST 数组的意义,使用 $_POST['id'] 与给出女巫 case 'id' 的答案一样有用,在这两种情况下,您都需要静态设置键名。 【参考方案1】:

您可以使用$_POST 传递结构化数据。这简化了处理相同类型的多个字段:

<input name="book[12][name]" value="name of book 12">
<input name="book[12][password]" value="password for book12">
<input name="book[99][name]" value="name of book 99">
<input name="book[99][password]" value="password for book99">

这将在$_POST 中创建如下数据结构:

[book] => Array
    (
        [12] => Array
            (
                [name] => name of book 12
                [password] => password for book 12
            )

        [99] => Array
            (
                [name] => name of book 99
                [password] => password for book 99
            )

    )

然后您可以按如下方式进行迭代:

foreach ($_POST['book'] as $book_id => $book) 
  // Watch out for SQL injection
  $sql = "UPDATE book SET name = '$book['name']', password = '$book['password']' WHERE id = $book_id";

【讨论】:

另外,我不需要通过 $book 进行另一个 foreach 循环吗,因为它本身就是一个数组(由名称和密码组成)?

以上是关于循环通过 $_POST的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 提交日期/时间/从foreach循环中选择输入值到$ _POST不返回任何内容

如何在函数内使用循环 - php

php接收POST数据并循环输出的代码

循环每行内容

在循环中处理所有POST变量

循环更新查询 pdo where id