循环通过$ _POST

时间:2012-09-21 23:42:17

标签: php mysql arrays forms loops

我有一个带有表"章节"的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>

请注意,此页面用于重置(不显示)密码,因此&#34;新密码&#34;默认值。

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

我尝试通过foreach循环遍历$ _POST并将输入名称更改为&#34; id []&#34;,&#34; name []&#34;和&#34;密码[]&#34;,但它似乎并不是最优雅的方法,特别是对于id部分......你最终会遇到像id [0] = 133这样的东西,这看起来很混乱。

有关如何执行此操作的任何建议?

提前致谢!

1 个答案:

答案 0 :(得分:6)

您可以使用$_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";
}