Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Особенности метода отправки формы 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-представление (например, кавычку - на &quot;):

Листинг 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 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.