Переменные извне PHP
Вернуться к: Переменные
HTML-формы (GET и POST)
Когда происходит отправка данных формы PHP-скрипту, информация из этой формы автоматически становится доступной ему. Существует несколько способов получения этой информации, например:
Пример #1 Простая HTML-форма
<form action="foo.php" method="post"> Имя: <input type="text" name="username" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="Отправь меня!" /> </form>
С версии PHP 5.4.0, есть только два способы получить доступ к данным из HTML форм. Доступные сейчас способы приведены ниже:
Пример #2 Доступ к данным из простой HTML POST-формы
<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>
В старых версиях PHP также существовало несколько других способов. Они приведены ниже. Смотрите также список изменений внизу страницы.
Пример #3 Старые способы получения пользовательских данных
<?php
// ВНИМАНИЕ: эти методы больше НЕ поддерживаются.
// Использование import_request_variables() - эта функция удалена в PHP 5.4.0
import_request_variables('p', 'p_');
echo $p_username;
// Эти длинные предопределенные массивы удалены в PHP 5.4.0
echo $HTTP_POST_VARS['username'];
// Использование register_globals. Эта функциональность удалена в PHP 5.4.0
echo $username;
?>
GET-форма используется аналогично, за исключением того, что вместо POST, вам нужно будет использовать соответствующую предопределенную переменную GET. GET относится также к QUERY_STRING (информация в URL после '?'). Так, например, http://www.example.com/test.php?id=3 содержит GET-данные, доступные как $_GET['id']. Смотрите также $_REQUEST.
Замечание:
Точки и пробелы в именах переменных преобразуется в знаки подчеркивания. Например, <input name="a.b" /> станет $_REQUEST["a_b"].
PHP также понимает массивы в контексте переменных формы (смотрите соответствующие ЧАВО). К примеру, вы можете сгруппировать связанные переменные вместе или использовать эту возможность для получения значений списка множественного выбора select. Например, давайте отправим форму самой себе, а после отправки отобразим данные:
Пример #4 Более сложные переменные формы
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" method="post">
Имя: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Пиво: <br />
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select><br />
<input type="submit" value="Отправь меня!" />
</form>
Имена переменных кнопки-изображения
При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида:
<input type="image" src="image.gif" name="sub" />
Когда пользователь щелкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными - sub_x и sub_y. Они содержат координаты нажатия пользователя на изображение. Опытные программисты могут заметить, что на самом деле имена переменных, отправленных браузером, содержат точку, а не подчеркивание, но PHP автоматически конвертирует точку в подчеркивание.
HTTP Cookies
PHP прозрачно поддерживает HTTP cookies как определено в » RFC 6265. Cookies - это механизм для хранения данных в удаленном браузере и отслеживания и идентификации таким образом вернувшихся пользователей. Вы можете установить cookies, используя функцию setcookie(). Cookies являются частью HTTP-заголовка, поэтому функция SetCookie должна вызываться до того, как браузеру будет отправлен какой бы то ни было вывод. Это ограничение аналогично ограничению функции header(). Данные, хранящиеся в cookie, доступны в соответствующих массивах данных cookie, таких как $_COOKIE и $_REQUEST. Подробности и примеры смотрите на странице setcookie() руководства.
Если вы хотите присвоить множество значений одной переменной cookie, вы можете присвоить их как массив. Например:
<?php
setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>
Это создаст две разные cookie, хотя в вашем скрипте MyCookie будет теперь одним массивом. Если вы хотите установить именно одну cookie со множеством значений, примите во внимание сначала применение к значениям таких функций, как serialize() или explode().
Обратите внимание, что cookie заменит предыдущую cookie с тем же именем в вашем браузере, если только путь или домен не отличаются. Так, для приложения корзины покупок вы, возможно, захотите сохранить счетчик. То есть:
Пример #5 Пример использования setcookie()
<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
Точки в именах приходящих переменных
Как правило, PHP не меняет передаваемых скрипту имен переменных. Однако следует отметить, что точка не является корректным символом в имени переменной PHP. Поэтому рассмотрим такую запись:
<?php
$varname.ext; /* неверное имя переменной */
?>
По этой причине важно заметить, что PHP будет автоматически заменять любые точки в именах приходящих переменных на символы подчеркивания.
Определение типов переменных
Поскольку PHP определяет и конвертирует типы переменных (в большинстве случаев) как надо, не всегда очевидно, какой тип имеет данная переменная в конкретный момент времени. PHP содержит несколько функций, позволяющих определить тип переменной, таких как: gettype(), is_array(), is_float(), is_int(), is_object() и is_string(). Смотрите также раздел Типы.
Список изменений
Версия | Описание |
---|---|
5.4.0 | Register Globals, Magic Quotes и register_long_arrays удалены |
5.3.0 | Register Globals, Magic Quotes и register_long_arrays стали устаревшими |
4.2.0 | register_globals по умолчанию стала равна off. |
4.1.0 | Добавлены Суперглобальные массивы, такие как $_POST и $_GET |
Вернуться к: Переменные