Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

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


Автор: dlap < >

Основная задача 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>  <?php
  <br>  echo "Hello, ".$_POST['username'];
  <br>  ?>
  <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>  Пожалуй хватит на сегодня, о сохранении полученной информации поговорим как – нибудь в другой раз.

Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS