在for循环中获取$_POST数据

3
如果我的表单中有一些隐藏的输入项:
<input type="hidden" name="test" value="somedata">
<input type="hidden" name="entry0" value="moredata">
<input type="hidden" name="entry1" value="moredata">
<input type="hidden" name="entry2" value="moredata">
<input type="hidden" name="entry3" value="moredata">
<input type="hidden" name="entry4" value="moredata">

现在,一旦表单被提交并且我从post中获取数据,如果我尝试调用$_POST['test'],那么我会得到我的“somedata”值。但是,如果我这样做:
for($i = 0; $i < 5; $i++)
{
  $x = 'entry{$i}';
  echo $_POST[$x]; // This does not work.
}

然后我没有得到每个“entry”输入的“moredata”值。如果打印出定义为$x的字符串,则可以获得所需的字符串,但似乎无法使用$_POST来完成此操作。有人有任何想法如何解决这个问题吗?
谢谢。

1
复制时是否打错了?是 $POST 还是 $_POST - Balanivash
@ing0,看一下garvey提出的解决方案,这可能是更好的做法。 - Matthieu Napoli
我尝试了那种方法,但它没有起作用!不过,被回答的答案起作用了!!! - ingh.am
4个回答

7

在字符串字面量中,只有当字符串字面量被双引号包围时,变量才会被插值:

for ($i = 0; $i < 5; $i++) {
  $x = "entry{$i}";
  echo $_POST[$x];
}

为了增加安全性,您可能需要在对$_POST进行下标操作之前检查是否存在array_key_exists($x, $_POST),否则如果传递的字段不对应,则会出现级别为E_NOTICE的错误。


谢谢。我之前不知道双引号的用法!+1 - ingh.am

3

尝试使用数组表示法:

<input type="hidden" name="entry[0]" value="moredata">
<input type="hidden" name="entry[1]" value="moredata">
<input type="hidden" name="entry[2]" value="moredata">
<input type="hidden" name="entry[3]" value="moredata">
<input type="hidden" name="entry[4]" value="moredata">

<?php
echo implode($_POST['entry']);

for ($i = 0; $i < 5; $i++) {
    echo $_POST['entry'][$i];
}

1
这是一个更好的解决方案!我赞成。 - Matthieu Napoli

0

应该使用$_POST而不是$POST


0

首先检查:

echo $POST[$x]; // 这行代码无法工作。

应该改为

echo $_POST[$x]; // 注意下划线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接