После того как форма отправлена Web-серверу, если ее атрибут ACTION представляет собой PHP-сценарий, этот сценарий запускается и принимает данные, которыебыли отправлены. Но как эти данные становятся доступными в PHP-коде? К счастью, существует множество очень удобных методов извлечения данных. В зависимости от того, какой метод используется для отправки данных формы и передачи их РНР-сценарию (GET или POST), в РНР определены два суперглобальных массива, называемые, соответственно, $_GET и $_POST, которые могут использоваться для сохранения данных. Это ассоциативные массивы, содержащие список ключей (представляющих имена элементов формы, указанные в атрибутах NAME) и ассоциированных с ними значений. Таким образом, значение переменной $_GET [' mytext' ] будет содержать значение элемента HTML-формы, атрибут NAME которого равен mytext:
Элемент HTML-формы: <INPUT TYPE="text" NAME="mytext" VALUE="3TO текст!"> Код РНР:
При отправке формы получается вывод: Это текст!
НА ЗАМЕТКУ Термин суперглобальный введен в главе 1 и обозначает, что независимо от текущего контекста (например, внутри функции), переменные $_GET и $_POST будут всегда доступны без необходимости использования оператора global для включения их в текущий контекст. За дополнительной информацией обращайтесь в главу 1.
При использовании массива $_GET предполагается, что форма отправляется методом GET. Если же это делается методом POST, данные будут сохранены в массиве $_POST. Для тех случаев, когда ни один из этих двух методов не подходит (или может быть любым), предусмотрен третий суперглобальный массив $_REQUEST, который комбинирует $_GET, $_POST, $_COOKIE (суперглобальный массив, содержащий так называемые cookie-переменные — см. главу 5) и $_FILES (описанный далее в настоящей главе). Для тех из вас, кто в прошлом имел дело с РНР (версий, предшествовавших 4.1.0), по умолчанию РНР создает стандартные имена переменных, такие как $myvalue для представления значения, содержащегося в суперглобальной переменной $__GET [ 'myvalue' ]. Хотя по-прежнему можно включить это поведение по умолчанию (установив значение директивы register_globals равной on), поступать так весьма не рекомендуется из соображений безопасности. Более правильный подход (обеспечивающий тот же конечный результат) предполагает использование функции import_request_variables (). Эта функция создает глобальные переменные наподобие $myvalue для хранения значений из суперглобальных массивов. Синтаксис функции выглядит следующим образом: import_request variables($types [, $prefix]) использовании этой функции $ types представляет строку, которая указывает тип переменных для импорта и должна содержать любую комбинацию (не зависящую от регистра) букв Р, G и С. Эти буквы соответствуют $_POST, $_GET и $_СООК1Е. Второй необязательный параметр, $prefix, если он указан, представляет префикс к имени каждой создаваемой переменной. В листинге 4.11 (предполагается, что $_GET[ 'myvalue'] существует) используется функция import_request_variables () для создания локальной копии $_GET [ 'myvalue' ].
Листинг 4.11. Использование функции import_request_variables () <?php /* Предполагается, что $_GET['myvalue'] существует */ import_request_variables("G", "myget_"); echo "Значение поля 'myvalue1 равно: $myget_myvalue"; ,
НА ЗАМЕТКУ Использование функции import_request_variables () рекомендуется вместо конфигурационной директивы register_globals, однако следует отметить, что она не защитит вас от риска, связанного с обработкой пользовательских данных. Всегда рекомендуется, чтобы данные, переданные от пользователя, были обработаны перед использованием. Важно также отметить, что эта функция импортирует переменные только в область глобального контекста. То есть она никогда не должна вызываться внутри тела функции.