Массив get в php

Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

В PHP версии 4 и выше введено понятие "суперглобальных" массивов. Эти массивы содержат всю информацию о состоянии сервера и среды выполнения скрипта. Массивы доступны в любом месте скрипта без дополнительных объявлений, т.е. не надо использовать ключевое слово global.

Всего массивов девять. Имена всех массивов записываются заглавными буквами, а начинается имя всегда с "$_" (кроме массива $GLOBALS).

$GLOBALS Массив содержит ссылки на все переменные, объявленные в данном скрипте. Это ассоциативный массив, в котором имена переменных являются ключами.
$_SERVER Массив содержит все данные о настройках среды выполнения скрипта и параметры сервера.
$_GET Список переменных, переданных скрипту методом GET, т.е. через параметры URL-запроса.
$_POST Список переменных, переданных скрипту методом POST.
$_COOKIE Массив содержит все cookies, которые сервер установил на стороне пользователя.
$_FILES Содержит список файлов, загруженных на сервер из формы. Более детально мы рассмотрим этот массив в уроке, посвящённом загрузке файлов на сервер.
$_ENV Содержит переменные окружения, установленные для всех скриптов на сервере.
$_REQUEST Этот массив объединяет массивы $GET, $POST и $COOKIE. очень часто бывает удобен при обработке пользовательских запросов, но применять его для защищённой обработки данных не стоит.
$_SESSION Массив содержит все переменные сессии текущего пользователя.

Просмотреть содержимое всех масивов можно в результате вызова функции phpinfo().

Рассмотрим примеры использования глобальных массивов.

$_SERVER

С помощью этого массива можно узнать практически всё о сервере, на котором исполняется скрипт. Например:

Пользоваться этим массивом нужно аккуратно, т.к. некоторые сервера имеют достаточно специфичные настройки или значения параметров. Иногда это приводит к неприятным ошибкам, которые к тому же очень сложно диагностировать и исправить. Например, параметры $_SERVER["REQUEST_URI"] и $_SERVER["SCRIPT_NAME"] могут быть не установлены (хотя один из них как правило присутствует).

Читайте также:  Мднф с помощью карт карно

$_GET и $_POST

В эти массивы помещаются данные, передаваемые скрипту извне (так называемый, пользовательский ввод). В принципе, пользователь может влиять только на эти два массива плюс массив файлов и cookie. И именно поэтому все элементы этих массивов должны тщательно проверяться на допустимые значения.

Например, если пользователь ввёл в строку адреса браузера адрес "http://localhost/index.php?name=Dmitry&fam=Medvedev&jt=pres >

Этот скрипт будет устойчиво работать при любом GET-запросе, даже если не будет указан ни один параметр. Если используется метод POST, то достаточно заменить $_GET на $_POST. А если вам совершенно не важно, откуда получены данные — воспользуйтесь массивом $_REQUEST (см. ниже).

При работе с пользовательским вводом есть одно правило:

Всё, что пользователь может изменить, неправильно написать или не ввести — он однажды изменит, напишет или не введет. Намеренно или случайно — это уже другой вопрос. Но в любом случае, все вводимые данные должны проверяться и перепроверяться. Однажды написанная процедура проверки данных избавит вас от множества проблем и лишней работы по установке и отладке.

$_COOKIES

В массив $_COOKIES автоматически помещаются все cookies, которые получены от браузера. Механизм cookies мы подробно рассмотрим в соответствующем уроке. А пока вам достаточно запомнить, что есть глобальный массив, из которого в любое время можно узнать какие cookies установлены на стороне клиента.

$_REQUEST

Массив $_REQUEST объединяет три массива: $_POST, $_GET, $_COOKIES. В ранних версиях PHP сюда же входил массив $_FILES, но из соображений безопасности и производительности его исключили. Пользоваться массивом $_REQUEST очень удобно в случаях, когда нет разницы, каким методом был сделан запрос. Например, при постраничном выводе данных номер страницы можно передавать через URL ("index.php?page=3") методом GET, а можно через элемент формы методом POST. И в том и в другом случае переменная page попадёт в массив $_REQUEST.

Читайте также:  Лучшие соковыжималки для больших объемов

$_SESSION

Предназначение массива $_SESSION — хранение всех переменных сессии текущего пользователя. Мы подробно рассмотрим механизм сессий в соответствующем уроке.

Глобальные массивы очень удобны в работе, но злоупортеблять ими не стоит, особенно массивом $_SESSION. Если переменной нужна только в локальной области видимости — не надо её делать глобальной. Слишком большое количество "лишних" переменных сильно снижает быстродействие и эффективность скрипта.

В начало страницы

В начало страницы

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

$_GET — $HTTP_GET_VARS [устарело] — Переменные HTTP GET

Описание

Ассоциативный массив переменных, переданных скрипту через параметры URL (известные также как строка запроса). Обратите внимание, что массив не только заполняется для GET-запросов, а скорее для всех запросов со строкой запроса.

$HTTP_GET_VARS содержит аналогичный набор данных, но не является суперглобальным. (Обратите внимание, что $HTTP_GET_VARS и $_GET являются разными переменными и обрабатываются PHP независимо друг от друга)

Примеры

Пример #1 Пример использования $_GET

Подразумевается, что пользователь ввел в браузере адрес http://example.com/?name=Иван

Результатом выполнения данного примера будет что-то подобное:

Примечания

Это ‘суперглобальная’ или автоматическая глобальная переменная. Это просто означает, что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.

Параметры GET обрабатываются urldecode() .

Смотрите также

User Contributed Notes 4 notes

Just a note, because I didn’t know for sure until I tested it.

If you have a query string that contains a parameter but no value (not even an equals sign), like so:
http://path/to/script.php?a

The following script is a good test to determine how a is valued:

I tested this with script.php?a, and it returned:

a is an empty string
a is set

So note that a parameter with no value associated with, even without an equals sign, is considered to be an empty string (""), isset() returns true for it, and it is considered empty, but not false or null. Seems obvious after the first test, but I just had to make sure.

Читайте также:  Моноблок таволга тр с22

Of course, if I do not include it in my browser query, the script returns
Array
(
)
a is null

Note that named anchors are not part of the query string and are never submitted by the browser to the server.

// returns "apocalypse.php" and NOT "apocalypse.php#doom"

you would be better off treating the named anchor as another query string variable like so:
http://www.xyz-abc.kz/index.php?title=apocalypse.php&na=doom

. and then retrieve it using something like this:
$url = $_GET[‘title’]."#".$_GET[‘na’];

Hope this helps someone.

Please note that PHP setups with the suhosin patch installed will have a default limit of 512 characters for get parameters. Although bad practice, most browsers (including IE) supports URLs up to around 2000 characters, while Apache has a default of 8000.

Is it possible to have a value in $_GET as an array?

If I am trying to send a link with http://link/foo.php? >, and I want to use $_GET[‘id’] on the php side, how can that value be an array? Because right now echo $_GET[‘id’] is returning 3 . Its the last id which is in the header link. Any suggestions?

9 Answers 9

The usual way to do this in PHP is to put id[] in your URL instead of just id :

Then $_GET[‘id’] will be an array of those values. It’s not especially pretty, but it works out of the box.

You could make id a series of comma-seperated values, like this:

Then, within your PHP code, explode it into an array:

This will maintain brevity. The other (more commonly used with $_POST) method is to use array-style square-brackets:

But that clearly would be much more verbose.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector