Новичку полезно

  • А знаете ли вы что?

    - rudvs согреет в непогоду


Обработка форм

Теги: формф, обработка форм, Php

Основная задача PHP - обработка форм, поэтому это самая важная тема, и я решил написал статью по ней самостоятельно. Тем более что я не нашёл в Интернете статей на эту тему, которые бы мне понравились.
Во первых, хочу познакомить (или напомнить) о области действия переменных. Термин область действия (skope) относится к тем разделам сценария внутри которых возможен доступ к некоторой конкретной переменной, иначе говоря область из любого места которой видна эта переменная. В PHP используются следующие 4 основных типа области действия:
1. Встроенные суперглобальные переменные. Видны везде.
2. Глобальные переменные, обьвленные в сценарии винды в любом месте сценария, но не внутри функции.
3. Переменные, использованные внутри функции, являться локальными по отношению к этой функции.
4. Переменные, использованные внутри функции, которая объявлена как глобальная относиться к глобальным переменным, имеющим теже имена.

В новых версиях РНР есть различные массивы, которые подчиняются собственным правилам. Их я буду описывать по ходу дела. Сейчас я привиду список суперглобальных переменных, которые винды везде:
$GLOBAL – массив всех переменных.
$SERVER – массив переменных среды сервера
$_GET , $_POST – масив переменных переданные через форму методом GET или POST соответственно. Тут я хочу остановиться. Дело в том, что в некоторых источниках я читал что в старых версиях этих массивов нет. В очень древних версиях PHP существовали только массивы $HTTP_GET_VARS и $HTTP_POST_VARS, сейчас эти массивы так же присутсвуют, однако, говорят что их использование не рекомендуеться, а существуют они только для совместимости. У меня даже споры очень серьёзные были по этому поводу. Но в результате мы выяснили что использовать можно как $_GET так и $HTTP_GET_VARS, на всех современных серверах оба массива существуют. Мы так и не смогли найти сервера на котором была бы установлена старая версия РНР, в котором бы небыло массива $_GET. Если вы ничего не поняли из того что я сказал, не переживайте, юзайте $_GET и $_POST и всё

$_COOKIE – масив cookie переменных
$_SESSION – массив переменных сеанса
$_FILES – массив переменных определяющих выгрузку файлов
$_ENV массив переменных определяющих конфигурации сервера
$_REQUEST – массив всех переменных вводимых пользователем
Ну вроде ничего не забыл….  Есть различные переменные, переменные среды сервера, в которых есть много полезной инфы. Все перечислять я не имею ни желания ни возможностей, и по этому подскажу 2 вещи. Первое, всегда можно написать print_r($GLOBAL) и получить инфу о всех переменах. А о переменных среды сервера ( как и о сервере) можно получить инфу если написать phpinfo();

Теперь давайте перейдём к самим формам. Как извесно, у тега

есть опция mthod которая указывает каким методом передаются данные. Метод GET передаёт переменные в вместе с URL, после вопросительного знака. Например: mysite.php?var1=value1&  var2=value2
  
  А POST в самом HTTP запросе. Как именно устроен протокол HTTP как – ни будь. Факт тот, что длинна URL ограничена, по этому большое кол-во данных нужно предавать через POST. Однако, переменные передаваемый через GET видны,  и по этому легче дебагать скрипты использующие GET. Некоторые считаю, что GET менее безопасный, ибо юзер видит все переменные, и может их менять. Конечно такое мнение имеет право на существование, однако, я не вижу причин почему юзер не может посмотреть сорц фаила и не изучить POST, и например, написать программу которая сама отсылает данные методом POST… возможно это мнение сложилось из тех людей, которые просто не знают как устроен HTTP протокол, и не умеют работать с сокетами….
  
  Следующий вопрос «как обращаться к этим переменным». Это очень просто. Самый лучший способ, это через массивы $_GET и $_POST ($HTTP_GET_VARS и $HTTP_GET_POST).
Привиду пример:
Index.html:

Enter your name:



Login.php:



  
Я думаю тут всё должно быть понятно. Единственное что login.php так же мог содержать фразу echo "hello, ".$HTTP_POST_VARS['username'] От этого бы ничего не изменилось. Теперь о одной важной детали в настройках сервера. Есть такой параметр – register_globals в фаиле php.ini. Если он установлин как on, то тогда к переменным можно обращаться на прямую, например вместо $_POST['username'] можно сразу написать $username. В старых версиях РНР по умалчанию эта настройка включена, однако в современных версиях эта настройка выключена. Я рекомендую никогда ей не пользоваться, по причины безопасности. Например, если эта настройка включена, вы никогда не можете быть уверены на верняка в правдоподобности информации, которая даёт функция isset (var). На неё сможет повлиять любой юзер. Зато есть замечательная функция explode (array). Она создаёт все переменные которые есть в массивы как отдельные. Например:

$a['first'] = 1;
$a['second'] = 2;
explode ($a);
echo $first.$second;


Этот фрагмент кода выдаст 12. Почему? Подумайте сами, пусть это будет ваше домашнее задание:)

Пожалуй хватит на сегодня, о сохранении полученной информации поговорим как – нибудь в другой раз.

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


Обновить