【问题标题】:Looping through $_POST循环通过 $_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' 的答案一样有用,在这两种情况下,您都需要静态设置键名。

标签: php mysql arrays forms loops


【解决方案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 循环吗,因为它本身就是一个数组(由名称和密码组成)?
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多