循环通过$ _POST

Luk*_*eva 2 php mysql forms arrays 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>
Run Code Online (Sandbox Code Playgroud)

请注意,此页面用于重置(不显示)密码,因此使用"新密码"默认值.

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

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

关于如何做到这一点的任何建议?

提前致谢!

lee*_*ers 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">
Run Code Online (Sandbox Code Playgroud)

这将创建如下的数据结构$_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
            )

    )
Run Code Online (Sandbox Code Playgroud)

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

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";
}
Run Code Online (Sandbox Code Playgroud)