HTML формирует несколько полей - PullRequest
1 голос
/ 11 декабря 2010

У меня есть HTML-форма, которая выглядит следующим образом:

<form method="post" action="?a=up">
...some mysql query...
while ($i = mysql_fetch_array($result)) {

<input name="name[]" type="text" value="<?=$i['name'];?>" />
<input name="years[]" type="text" value="<?=abs($age);?>"/>
<input name="to[]" type="checkbox" value="<?=$i['id'];?>" />

}
<input name="" type="submit" value="go" />
</form>

Проблема в том, что я не могу получить значения полей формы, таких как «имя» и «годы». Я могу только получить список идентификаторов (значение "to" флажок).

PHP-код выглядит так:

$cnt = 0;
for($p = 0; $p <= (sizeof($to)-1); $p++)
{
echo $to[$p].$name[$p].$years[$p]"<br>";
$cnt++;
}

$tm = array($cnt);

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2010

Вы ожидаете, что флажок будет успешным, даже если он не отмечен (а в спецификации сказано, что это не должно быть).

Вы, вероятно, должны сделать что-то вроде:

<input name="name[<?php echo htmlspecialchars($i['id']); ?>]" 
       value="<?php echo htmlspecialchars($i['name']); ?>" />
<input name="years[<?php echo htmlspecialchars($i['id']); ?>]"
       value="<?php echo abs($age);?>"/>
0 голосов
/ 11 декабря 2010

Почему бы вам не попробовать

$cnt = 0;

foreach ( $_POST['to'] as $k => $to ){
    echo $_POST['to'][$k] . $_POST['name'][$k] . $_POST['years'][$k] . "<br />";
    $cnt ++;
}

$tm = array ($cnt);
0 голосов
/ 11 декабря 2010

Обновление


Вот как вы можете получить флажки, которые отмечены с помощью isset:

if ($_SERVER['REQUEST_METHOD'] === 'POST'){
  $cnt = 0;
  for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++)
  {
    if (isset($_POST['to'][$p]))
    {
      echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>";
      $cnt++;
    }
  }

  $tm = array($cnt);
}

Вы не получаете поля от POSTмассив, вот как должен выглядеть ваш код:

$cnt = 0;
for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++)
{
  echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>";
  $cnt++;
}

$tm = array($cnt);

Убедитесь, что приведенный выше код выполняется при отправке формы, поместив его в это условие:

if ($_SERVER['REQUEST_METHOD'] === 'POST'){
  $cnt = 0;
  for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++)
  {
    echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>";
    $cnt++;
  }

  $tm = array($cnt);
}

И, наконец, небольшое предложениечто вам следует избегать использования коротких php-тегов <?=?>, поскольку они создают проблемы безопасности и могут быть легко встроены в изображения или xml.(Убедитесь, что они также включены из php.ini, если вы хотите их использовать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...