Я установил эту тестовую страницу на своем сервере. Скажите, пожалуйста, почему массив $_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>
Наконечник:
Для всех ваших элементов ввода требуется атрибут имени.
Вы забыли атрибуты имени для создания скрипта. Вы также можете включить тег «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; ?>
Это позволит убедиться, что ваша страница хороша в соответствии с требованиями формы, а также выполняет ваш сценарий. Похоже, это простой перехват. Надеюсь это поможет.