|
Особенности метода отправки формы 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-формы. Более того, он предпочтительнее, так как позволяет выяснить, какие именно поля формы заполнены. Немного более сложный пример. Листинг 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(). прямо в форму, но получится слишком громоздко. Функция htmlspecialchars() Введем, например, в поле "имя" двойную кавычку и какой-нибудь текст, например, "123. Отправим форму, и посмотрим на исходный код полученной страницы. В четвертой строке будет что-то наподобие: Введите Ваше имя: <input type="text" name="name" value=""123"> То есть - ничего хорошего. А если бы хитрый пользователь ввел JavaScript-код? Для решения этой проблемы необходимо воспользоваться функцией htmlspecialchars(), которая заменит служебные символы на их HTML-представление (например, кавычку - на "): Листинг form_7.php <html> <body> <? $name = isset($_POST['name'])? htmlspecialchars($_POST['name']):''; $year = isset($_POST['year'])? htmlspecialchars($_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 'Здравствуйте, '. $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> Повторим опыт и убедимся, что теперь HTML-код корректен. Функцию htmlspecialchars() необходимо использовать всегда, когда выводится содержимое переменной, в которой могут присутствовать спецсимволы HTML. ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры... ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между... Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычислить, когда этот... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|