Когда форма отправляется в PHP-скрипт, любые переменные этой формы автоматически делаются доступными скрипту
PHP. Если опция конфигурации track_vars
включена/on, то эти переменные будут находиться в ассоциативных массивах $_POST,
$_GET и/или $_FILES, в соответствии с источником переменной в вопросе.
Дополнительно об этих переменных см. Предопределённые переменные.
Пример 7-1. Простая переменная формы
<form action="foo.htm" method="post">
Name: <input type="text" name="username"><br>
<input type="submit">
</form> |
|
Когда такая форма отправляется на сервер, значение из поля ввода text будет доступно в
$_POST['username']. Если директива конфигурации register_globals
включена/on, то эта переменная будет также доступна как $username в глобальной области видимости.
Примечание: директива конфигурации magic_quotes_gpc
действует на значения Get, Post и Cookie. Если она включена, значение (It's "PHP!")
автоматически становится (It\'s \"PHP!\"). Мнемонизирование необходимо для вставки в БД. См. также
addslashes(),
stripslashes() и
magic_quotes_sybase.
PHP также понимает массивы в контексте переменных формы
(см. соответствующий faq). Вы можете,
например, сгруппировать взаимосвязанные переменные или использовать эту
возможность для запроса значений из списка множественного выбора select:
Пример 7-2. Более сложные переменные формы
<form action="array.htm" method="post">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog
<option value="guinness">Guinness
<option value="stuttgarter">Stuttgarter Schwabenbräu
</select>
<input type="submit">
</form> |
|
В PHP 3 использование переменной массива формы ограничено одномерными
массивами. В PHP 4 таких ограничений нет.
При отправке формы возможно использование изображения/image вместо
стандартной кнопки submit с помощью тэга такого вида:
<input type="image" src="image.gif" name="sub"> |
Когда пользователь щёлкает в каком-либо месте изображения,
соответствующая форма передаётся на сервер с двумя дополнительными
переменными: sub_x и sub_y. Они содержат координаты щелчка. Опытные
программисты могут заметить, что фактические имена переменных,
отправляемые браузером, содержат точку, а не символ подчёркивания, но PHP
конвертирует точку в символ подчёркивания автоматически.
PHP прозрачно поддерживает куки HTTP, как определено в
Netscape's Spec. Куки это механизм хранения данных на удалённом браузере и отслеживания или
идентификации с их помощью ответов пользователя. Вы можете устанавливать куки функцией
setcookie(). Куки являются частью HTTP-шапки/header, поэтому функция SetCookie обязана
вызываться до любого вывода, высылаемого браузеру. Это такое же ограничение, как и для функции
header(). Любые куки, высылаемые вам с этого клиента, автоматически конвертируются в
PHP-переменную точно так же, как и GET и POST-данные.
Если вы хотите присвоить несколько значений одной куке, просто добавьте [] в имя куки. Например:
setcookie("MyCookie[]", "Testing", time()+3600); |
Обратите внимание, что эта кука/cookie замещает предыдущую куку с тем же
именем, если только path или domain не отличаются. Так,
для приложения shopping cart вы можете захотеть сохранить счётчик/counter и передать его. То есть:
Пример 7-3. SetCookie
$Count++;
setcookie("Count", $Count, time()+3600);
setcookie("Cart[$Count]", $item, time()+3600); |
|
PHP автоматически делает переменные окружения доступными как нормальные переменные PHP.
echo $HOME; /* Показывает переменную окружения HOME, если она установлена. */ |
Поскольку информация, приходящая через механизмы GET, POST и Cookie, также
автоматически создаёт переменные PHP, иногда бывает лучше явно считывать
переменную из окружения, чтобы гарантировать получение правильной версии. Функция
getenv() может использоваться для этого. Вы можете также установить переменную
окружения функцией putenv().
Обычно PHP не изменяет имена переменных при передаче их скрипту. Однако
нужно отметить, что точка (dot, period, full stop) не является правильным
символом в имени PHP-переменной. Посмотрим на такое имя:
$varname.ext; /* неправильное имя переменной */ |
Разборщик видит теперь имя переменной $varname, за которым идёт операция конкатенации строк, а затем идёт голая строка (т.е.
строка без кавычек, которая не совпадает ни с одним известным ключевым или
зарезервированным словом) 'ext'. Очевидно, это не тот результат, который ожидался.
Поэтому важно подчеркнуть, что PHP будет автоматически заменять любые
точки в именах входящих переменных на символы подчёркивания.
Поскольку PHP определяет типы переменных и конвертирует их
(обычно) так, как нужно, не всегда бывает очевидно, какой тип имеет данная
переменная в данное время. PHP имеет несколько функций, которые определяют тип переменной. Это
gettype(),
is_array(),
is_float(),
is_int(),
is_object() и
is_string().
|