循环通过 $_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的主要内容,如果未能解决你的问题,请参考以下文章