Лекция: Передача значений переменных по методу GET

При использовании метода GET все данные упаковываются в адресную строку. Причем происходит это следующим образом: вначале имена переменных и их значения преобразуются в вид, безопасный для передачи в строке URL (особенно хорошо это заметно, когда передаются русские символы), после чего все данные преобразуются в форму name=value и собираются в одну строку, отделяясь друг от друга знаком & (амперсанд). Происходит это таким образом:

site.domain/action.php?имя=значение&имя=значение

Пары «имя=значение» создаются для каждого элемента ввода, для которого указано имя атрибутом NAME.

В таком виде данные и попадают скрипту, который уже самостоятельно должен проделать обратную операцию и извлечь из строки названия переменных и их значения. Строка запросаможет содержать не более 254 символов. Это одно из ограничений метода GET, которое не позволяет передавать объемные данные.

В отличие от других серверных языков программирования, PHP делает всю нудную работу по расшифровке строки запроса, переданной методом GET, на себя и предоставляет нам уже готовые для использования в скрипте переменные. Причем имя переменной образуется из имени, указанного в соответствующем элементе формы. Если пользователь ввел в строке $name запроса имени «Гриня», то в скрипте автоматически появится переменная $name, которая будет иметь значение «Гриня».

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

Рассмотрим пример передачи данных через строку URI:

<!—pr421.php -->

<html>

<head> </head>

<body>

<?php //

$a =$_GET['a'];

$b =$_GET['b'];

$c++;//Если режим on включен. Следует сначала написать $с =$_GET['с'];

echo «a=$a,b=$b»; //

print "<br>c=$c";//

echo "<br><a href='pr421.php?a=1&b=2&c=3'>новая передача</a>"

?>

</body>

</html>

Получим после запуска вида:

localhost/MyPrimers/pr421.php?a=10&b=20&c=30

a=10,b=20

c=31
новая передача

Если нажмем на гиперссылку новая передача, получим

a=1,b=2

c=4
новая передача

Передача данных из клиентской формы на сервер по методу GET

<html><head>

<title>Simpleform.html </title>

</head>

<body>

<form action=«form.php» method=«GET»>

Имя:<input type=«text» name=«fio»><p>

<input type=«submit» value=«GO»><p>

</form>

</body>

</html>

 

<?php //form.php

echo «Hello, $fio<br>»;

foreach($_GET as $fio=>$value);

echo "$fio=$value<br>";

print_r ($_GET);

print_r ($_REQUEST);

?>

Результат:

Hello,valera
fio=valera
Array ( [fio] => valera ) Array ( [fio] => valera )

 

Передача данных из клиентской формы на сервер по методу POST

Метод POST, в отличие от GET, передает все данные на стандартный вывод. Соответственно, и ограничений на длину информации нет.

Какой же из этих методов лучше? Это зависит от конкретной ситуации. Для передачи информации, вводимой в форме, в большинстве случаев лучше подходит метод POST. А вот в случае динамических сайтов, когда показываемая страничка определяется не только адресом странички, но и переменными (типичный представитель — интернет-магазин), лучше использовать метод GET.

Кроме простого задания переменной в форме, PHP позволяет использовать для этой цели и массивы. В этом случае код нашей формы будет выглядеть вот так:

<form action=«formmail.php» method=«post»>

Ваше имя:

<input type=«text» name=«user[name]»><br>

Электронный адрес:

<input type=«text» name=«user[email]»> <br>

Сообщение:

<textarea name=«user[message]»></textarea><br>

<input type=«submit» value=«Отправить»>

</form>

Теперь все введенные пользователем данные будут находиться в массиве $user, что очень удобно для больших форм и передачи множества данных в функцию.

При исполнении скрипта на PHP создаются переменные с именами, соответствующими именам полей и содержащие соответствующие значения.

Предположим, что мы создали форму следующего вида:

<form action=«multi.php» method=«POST»>

<input type=«text» NAME=«first» SIZE=«4» MAXLENGTH=«4»>

< input type =«text» NAME=«second» SIZE=«4» MAXLENGTH=«4»>

< input type =«Submit» VALUE=«Умножить»>

</form>

Скрипт, содержащийся в файле multi.php может выглядеть следующим образом:

<?php

//$first=$_POST['first']; $second=$_POST['second'];

echo "$first умножить на $second получится ", $first*$second;

?>

Вывод:

5 умножить на 6 получится 30

Если register_globals=off в файле php.ini, комментарий // в закомментированной строке надо убрать.

Существует специальный тип поля HIDDEN. Это поле, которое не выводится на экран, но, если ему присвоено имя атрибутом NAME, значение его передается в форму. С помощью такого поля можно задать тип действия, которое мы хотим произвести с данными формы.

PHP воспринимает массивы в контексте переменных формы. Можно группировать взаимосвязанные переменные вместе:

<form action=«array.php» method=«post»>

Имя: <input type=«text» name=«user[name]»><br>

E-mail: <input type=«text» name=«user[email]»><br>

Хобби: <br>

<select multiple name=«hobbi[]»>

<option value=«книги»>Книги

<option value=«компьютер»>Компьютер

<option value=«музыка»>Музыка

<option value=«спорт»>Спорт

</select>

<input type=«submit» value=«Отправить»>

</form>

Теперь создадим сам PHP-скрипт array.php, обрабатывающий эту форму:

<?php //array.php

/* выводим выбранные в форме переменные */

print «user[name]:$user[name]<BR>»;

print «user[email]:$user[email]<BR>»;

print «hobbi:$hobbi[0]»;

?>

Вывод:

user[name]:rrrrrrrr

user[email]:yyyyyyyyyy

hobbi: спорт

В результате обработки этой формы PHP создаст ассоциативный массив user[] с элементами $user[name] и $user[email], и массив hobbi[] с элементами $hobbi[0], $hobbi[1], $hobbi[2], $hobbi[3]. Пользователь имеет возможность сделать множественный выбор, т.е. указать в качестве выбора hobbi[0]: книги, компьютер, музыка, спорт.

 

еще рефераты
Еще работы по информатике