Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
При использовании метода GET все данные упаковываются в адресную строку. Причем происходит это следующим образом: вначале имена переменных и их значения преобразуются в вид, безопасный для передачи в строке URL (особенно хорошо это заметно, когда передаются русские символы), после чего все данные преобразуются в форму name=value и собираются в одну строку, отделяясь друг от друга знаком & (амперсанд). Происходит это таким образом:
http://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>
Получим после запуска вида:
http://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]: книги, компьютер, музыка, спорт.
Дата публикования: 2014-11-18; Прочитано: 443 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!