Получение данных из $ _POST в цикле for - PullRequest
3 голосов
/ 06 июля 2011

Если у меня есть некоторые скрытые данные в моей форме:

<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['test'], тогда явернуть мое значение "somedata".Но если я сделаю это:

for($i = 0; $i < 5; $i++)
{
  $x = 'entry{$i}';
  echo $_POST[$x]; // This does not work.
}

Тогда я не получу обратно свои значения "moredata" для каждого ввода "entry".Если я распечатываю строку, определенную как $x, то получаю строку, которую я ищу, но, похоже, она не хочет так работать с $_POST.Кто-нибудь есть идеи, как я могу обойти это?

Спасибо

Ответы [ 4 ]

7 голосов
/ 06 июля 2011

Внутри строковых литералов переменные интерполируются только в том случае, если строковый литерал заключен в двойные кавычки:

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

Для дополнительной безопасности вы можете проверить, является ли array_key_exists($x, $_POST) перед подпиской $_POST, в противном случае вы получите ошибку уровня E_NOTICE, если переданные поля не соответствуют.

3 голосов
/ 06 июля 2011

Попробуйте использовать обозначение массива:

<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];
}
0 голосов
/ 06 июля 2011

Сначала проверьте:

echo $ POST [$ x];// Это не работает.

должно быть

echo $ _POST [$ x];// Обратите внимание на подчеркивание.

0 голосов
/ 06 июля 2011

Это $_POST, а не $POST

...