logo
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

Передача данных из клиентской формы на сервер по методу 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]: книги, компьютер, музыка, спорт.