Особенности метода отправки формы GET
А теперь подобные рассуждения проделаем для метода отправки формы GET: Листинг form_ 5.php <html> <head> <title> Вас приветствует PHP</title> </head> <body> <? if (isset($_GET['name'])) { echo '<h1>Привет, <b>'. $_GET['name']. '</b>!</h1>'; } ?> <form action="<?=$_SERVER['PHP_SELF']?>"> Введите Ваше имя: <input type="text" name="name"> <br> <input type="submit" value="OK"> </form> </body> </html> <html> <body> <? if (isset($_GET['name'])) { echo '<h1>Привет, <b>'. $_GET['name']. '</b></h1>!'; } ?> <form action="<?=$_SERVER['PHP_SELF']?>"> Введите Ваше имя: <input type="text" name="name"> <br> <input type="submit" value="OK"> </form> </body> </html> В строке 11 можно было бы написать <form method="GET">. Но GET - метод по умолчанию. Браузер отправляет GET -запрос, который равносилен вводу в адресной строке адреса: http://адрес-сайта/имя-скрипта.php?name=Вася:
PHP с GET -формами поступает точно так же, как и с POST -формами, с тем отличием, что заполняет массив $_GET. Кардинальное же отличие - в строке 7. Поскольку простой ввод адреса в строке браузера является GET- запросом, проверка if ($_SERVER['REQUEST_METHOD'] == 'GET') бессмысленна: все, что в этом случае можно выяснить, что кто-то не отправил на скрипт POST- форму. Поэтому прибегают к конструкции isset(), которая возвращает true, если переменная определена (т.е. ей было присвоено значение), и false - если переменная не определена. Если форма была заполнена - как Вы уже поняли, PHP автоматически присваивает $_GET['name'] соответствующее значение. Способ проверки с помощью isset() - универсальный, его можно было бы использовать и для POST- формы. Более того, он предпочтительнее, так как позволяет выяснить, какие именно поля формы заполнены. Во многих старых книгах и статьях утверждается, что:
1. Данные как из GET, так и из POST -форм попадают непосредственно в переменные (в нашем случае - $name), причем POST- данные приоритетнее, т.е. "затирают" GET- данные; 2. Данные GET и POST- форм хранятся соответственно в массивах $HTTP_GET_VARS и $HTTP_POST_VARS. Эта информация устарела. Запомните этот момент, чтобы не попасть впросак со старыми скриптами или книгами. Немного более сложный пример. Листинг form _6. php <html> <body> <? if (isset($_POST['name'], $_POST['year'])) { if ($_POST['name'] == '') { echo ' Укажите имя!<br>'; } else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) { echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>'; } else { echo ' Здравствуйте, '. $_POST['name']. '!<br>'; $age = 2004 - $_POST['year']; echo ' Вам '. $age. ' лет <br>'; } echo '<hr>'; } ?> <form method="post" action="<?=$_SERVER['PHP_SELF']?>"> Введите Ваше имя: <input type="text" name="name"> <br> Введите Ваш год рождения: <input type="text" name="year"> <input type="submit" value="OK"> </form> </body> </html> Никаких новых приемов здесь не используется. Разберитесь, выполните код, попробуйте модифицировать...
Изменим последний пример, чтобы пользователю не нужно было повторно заполнять поля. Для этого заполним атрибуты value элементов формы только что введенными значениями. Листинг form_ 7.php <html> <body> <? $name = isset($_POST['name'])? $_POST['name']: ''; $year = isset($_POST['year'])? $_POST['year']: ''; if (isset($_POST['name'], $_POST['year'])) { if ($_POST['name'] == '') { echo ' Укажите имя!<br>'; } else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) { echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>'; } else { echo ' Здравствуйте, '. $_POST['name']. '!<br>'; $age = 2004 - $_POST['year']; echo ' Вам '. $age. ' лет <br>'; } echo '<hr>'; } ?> <form method="post" action="<?=$_SERVER['PHP_SELF']?>"> Введите Ваше имя: <input type="text" name="name" value="<?=$name?>"> <br> Введите Ваш год рождения: <input type="text" name="year" value="<?=$year?>"> <input type="submit" value="OK">
</form> </body> </html>
Несколько непонятными могут оказаться строки 4 и 5. Все очень просто: X = A? B: C - сокращенная запись условия if (A) X=B else X=C. Строку 4 можно было бы записать так: if (isset($_POST['name'])) $name = $_POST['name']; Else $name = ''; Используемая в строках 21 и 23 конструкция <?=$ foo?> - и того проще: это сокращение для <? echo $ foo?>. Может возникнуть вопрос - почему бы не выбросить строки 4-5 и не написать: Введите Ваше имя: <input type="text" name="name" value="<?=$_POST['name']?>"><br> Введите Ваш год рождения: <input type="text" name="year" value="<?=$_POST['year']?>"> Дело в том, что, если эти POST -переменные не определены (а так и будет, если форму еще не заполнили), то PHP выдаст предупреждения об использовании неинициализированных переменных (причем, вполне обоснованно). Такое сообщение позволяет быстро находить трудно обнаруживаемые опечатки в именах переменных, а также предупреждает о возможных "дырах" на сайте. Можно, конечно, поместить код с isset(). прямо в форму, но получится слишком громоздко. Разобрались? А теперь попробуйте найти ошибку в приведенном коде. Ну, не совсем ошибку, - но недочет.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|