Основная задача PHP - обработка форм, поэтому это самая важная тема, и
я решил написал статью по ней самостоятельно. Тем более что я не нашёл
в Интернете статей на эту тему, которые бы мне понравились. <br> Во первых, хочу познакомить (или напомнить)
о области действия переменных. Термин область действия (skope)
относится к тем разделам сценария внутри которых возможен доступ к
некоторой конкретной переменной, иначе говоря область из любого места
которой видна эта переменная. В PHP используются следующие 4 основных
типа области действия:
<br> 1. Встроенные суперглобальные переменные. Видны везде.
<br> 2. Глобальные переменные, обьвленные в сценарии винды в любом месте сценария, но не внутри функции.
<br> 3. Переменные, использованные внутри функции, являться локальными по отношению к этой функции.
<br> 4. Переменные, использованные внутри функции,
которая объявлена как глобальная относиться к глобальным переменным,
имеющим теже имена.
<br>
<br> В новых версиях РНР есть различные массивы, которые
подчиняются собственным правилам. Их я буду описывать по ходу дела.
Сейчас я привиду список суперглобальных переменных, которые винды
везде:
<br> $GLOBAL – массив всех переменных.
<br> $SERVER – массив переменных среды сервера
<br> $_GET , $_POST – масив переменных переданные через
форму методом GET или POST соответственно. Тут я хочу остановиться.
Дело в том, что в некоторых источниках я читал что в старых версиях
этих массивов нет. В очень древних версиях PHP существовали только
массивы $HTTP_GET_VARS и $HTTP_POST_VARS, сейчас эти массивы так же
присутсвуют, однако, говорят что их использование не рекомендуеться, а
существуют они только для совместимости. У меня даже споры очень
серьёзные были по этому поводу. Но в результате мы выяснили что
использовать можно как $_GET так и $HTTP_GET_VARS, на всех современных
серверах оба массива существуют. Мы так и не смогли найти сервера на
котором была бы установлена старая версия РНР, в котором бы небыло
массива $_GET. Если вы ничего не поняли из того что я сказал, не
переживайте, юзайте $_GET и $_POST и всё
<br>
<br> $_COOKIE – масив cookie переменных
<br> $_SESSION – массив переменных сеанса
<br> $_FILES – массив переменных определяющих выгрузку файлов
<br> $_ENV массив переменных определяющих конфигурации сервера
<br> $_REQUEST – массив всех переменных вводимых пользователем
<br> Ну вроде ничего не забыл…. Есть различные
переменные, переменные среды сервера, в которых есть много полезной
инфы. Все перечислять я не имею ни желания ни возможностей, и по этому
подскажу 2 вещи. Первое, всегда можно написать print_r($GLOBAL) и
получить инфу о всех переменах. А о переменных среды сервера ( как и о
сервере) можно получить инфу если написать phpinfo(); <br>
<br> Теперь давайте перейдём к самим формам. Как извесно,
у тега <form> есть опция mthod которая указывает каким методом
передаются данные. Метод GET передаёт переменные в вместе с URL, после
вопросительного знака. Например: mysite.php?var1=value1&
var2=value2
<br> А POST в самом HTTP запросе. Как именно устроен
протокол HTTP как – ни будь. Факт тот, что длинна URL ограничена, по
этому большое кол-во данных нужно предавать через POST. Однако,
переменные передаваемый через GET видны, и по этому легче дебагать
скрипты использующие GET. Некоторые считаю, что GET менее безопасный,
ибо юзер видит все переменные, и может их менять. Конечно такое мнение
имеет право на существование, однако, я не вижу причин почему юзер не
может посмотреть сорц фаила и не изучить POST, и например, написать
программу которая сама отсылает данные методом POST… возможно это
мнение сложилось из тех людей, которые просто не знают как устроен HTTP
протокол, и не умеют работать с сокетами….
<br> Следующий вопрос «как обращаться к этим переменным».
Это очень просто. Самый лучший способ, это через массивы $_GET и $_POST
($HTTP_GET_VARS и $HTTP_GET_POST). <br> Привиду пример:
<br> Index.html:
<br>
<br> <form method = "POST" action = "login.php">
<br> Enter your name: <input type = "text" name = "username"><br>
<br> <input type = "submit" value = "enter">
<br> </form>
<br>
<br>
<br> Login.php:
<br>
<br>
echo "Hello, ".$_POST['username'];
?>
<br>
<br>
<br> Я думаю тут всё должно быть понятно. Единственное что
login.php так же мог содержать фразу echo "hello,
".$HTTP_POST_VARS['username'] От этого бы ничего не изменилось. Теперь
о одной важной детали в настройках сервера. Есть такой параметр –
register_globals в фаиле php.ini. Если он установлин как on, то тогда к
переменным можно обращаться на прямую, например вместо
$_POST['username'] можно сразу написать $username. В старых версиях РНР
по умалчанию эта настройка включена, однако в современных версиях эта
настройка выключена. Я рекомендую никогда ей не пользоваться, по
причины безопасности. Например, если эта настройка включена, вы никогда
не можете быть уверены на верняка в правдоподобности информации,
которая даёт функция isset (var). На неё сможет повлиять любой юзер.
Зато есть замечательная функция explode (array). Она создаёт все
переменные которые есть в массивы как отдельные. Например:
<br>
<br> $a['first'] = 1;
<br> $a['second'] = 2;
<br> explode ($a);
<br> echo $first.$second;
<br>
<br> Этот фрагмент кода выдаст 12. Почему? Подумайте сами, пусть это будет ваше домашнее задание:)
<br>
<br> Пожалуй хватит на сегодня, о сохранении полученной информации поговорим как – нибудь в другой раз.