$ _POST пуст после отправки формы

Я установил эту тестовую страницу на своем сервере. Скажите, пожалуйста, почему массив $_POST не содержит ничего, даже когда я отправляю форму. Я пробовал это в трех разных браузерах, и ничего не происходит.

 <?php print_r($_POST);?> <form method="post"> <p><label>Email: </label> <input type="text" id="login_email" /> </p> <p><label>Password: </label> <input type="password" id="login_password" /> </p> <p><label>Remember Me?: </label> <input type="checkbox" id="login_remember" /> </p> <p> <input type="submit" value="Login" /> </p> </form> 

Я пишу PHP много лет, и этого никогда не было раньше. Что не так с этим кодом?

Элементы ввода не имеют атрибутов имени. Должно быть:

 <input type="text" id="login_email" name="login_email" /> 

Если элемент ввода не имеет атрибута имени, он не отправляется как часть данных POST.

Ну, у вас нет действия для тега формы? Это должно быть имя скрипта:

 <form method="post" action="scriptname.php"> 

… и вы также не устанавливаете имена для каждого ввода формы – браузер не передает идентификатор в качестве имени элемента.

 <form method="POST" action="<?php echo $PHP_SELF; ?> <p><label>Email: </label> <input type="text" name="login_email" /> </p> <p><label>Password: </label> <input type="password" name="login_password" /> </p> <p><label>Remember Me?: </label> <input type="checkbox" name="login_remember" /> </p> <p> <input type="submit" value="Login" /> </p> </form> 

Для элементов ввода нет атрибута имени.

Я предлагаю вам написать что-то вроде следующих функций, основанных на помощниках Zend_View.

 formText($name, $value = null, array $attribs = null) formPassword($name, $value = null, array $attribs = null) formLabel($id, $text, array $attribs = null) formHidden($name, $value = null, array $attribs = null) formSubmit($name = null, $text = null, array $attribs = null) formSelect($name, $selected, array $attribs = null, array $options = null) formCheckbox($name, $default, array $attribs = null, array $options = null) 

Тогда вы никогда не забудете / не пропустите что-то подобное снова.

 <form method="POST" action="<?php echo $PHP_SELF; ?> <p> <?php echo formLabel('login_email', 'Email'), ':', formText('login_email'); ?> </p> <p> <?php echo formLabel('login_password', 'Password'), ':', formPassword('login_password'); ?> </p> <p> <?php echo formCheckbox('login_remember'), ' ', formLabel('login_remember', 'Remember me'); ?> </p> <p> <?php echo formSubmit(null, 'Login'); ?> </p> </form> 

Наконечник:

  • Если id не определен в атрибутах, id совпадает с именем, за исключением меток, где id используется в атрибуте for = "$ id", а formHidden также не должен иметь идентификатор по умолчанию.
  • formCheckbox записывает formHidden с тем же именем перед собой с отрицательным значением, поэтому вы получаете возвращаемое значение, если флажок также не отмечен.
  • Параметры formCheckbox – это массив со значениями для отмеченных или непроверенных.
  • Используйте фильтр с FILTER_VALIDATE_BOOLEAN, чтобы прочитать возвращаемое значение из флажка, чтобы проверить, было ли оно отмечено или нет.

Для всех ваших элементов ввода требуется атрибут имени.

Вы забыли атрибуты имени для создания скрипта. Вы также можете включить тег «for» в своих ярлыках, чтобы соответствовать атрибутам имен вашего ввода. Это не является обязательным требованием, но может помочь с формированием CSS вашей формы:

 <p> <label for="login_email">Email: </label> <input type="text" name="login_email" id="login_email" /> </p> 

Помогает совместить все и сохранить код более оптимизированным и читаемым, если вам нужно вернуться к нему через 6 месяцев. Атрибут action, если вы не собираетесь заполнять его, я бы включил его в качестве вашего действия:

 <form method="POST" action="<?php echo $PHP_SELF; ?> 

Это позволит убедиться, что ваша страница хороша в соответствии с требованиями формы, а также выполняет ваш сценарий. Похоже, это простой перехват. Надеюсь это поможет.