Как получить данные из html формы

Как получить данные из html формы

Итак нам необходимо использовать одну и ту же страницу HTML для вывода формы и обработки введенных в ней данных. Другими словами, требуется избежать размножения страниц, которые работают на отдельных этапах транзакции.

Мы используем скрытое поле в форме, чтобы указать программе, что предполагается его обработка в форме. В данном случае скрытое поле называется stage и имеет значение process:

 

if (isset($_POST['stage']) && ('process' == $_POST['stage']))

{

  process_form();

}

else

{

  print_form();

}

Когда люди создавали формы на заре развития Всемирной паутины, они делали две страницы: статическую HTML – страницу с формой и сценарий, который обрабатывал форму и возвращал динамически сгенерированный ответ пользователю. Это было немного громоздко, поскольку form.html была источником для form.cgi, и если одна страница изменялась, то нужно было не забыть также отредактировать и другую, иначе сценарий мог работать неправильно.

Формы легче поддерживать, когда все части находятся в том же самом файле, а контекст определяет, какие разделы отображать. Используйте скрытое поле формы с именем stage, чтобы отслеживать позицию в процессе обработки формы – оно действует как диспетчер этапов, возвращающих пользователю соответствующий HTML-документ.

Однако иногда такой подход невозможен, например, когда ваша форма обрабатывается сценарием на каком-нибудь другом сервере. Cоздавая HTML-документ для формы, не прописывайте жестко путь к странице в атрибуте action. Это делает невозможным переименование и изменение местоположения страницы без одновременного ее редактирования.

Вместо этого PHP предоставляет полезную переменную: $_SERVER['PHP_SELF']

$_SERVER['PHP_SELF'] – является синонимом URL текущей страницы. Поэтому установите атрибут action в это значение, и ваша форма всегда будет отправляться, даже если вы переместили файл в новое место на сервере. Поэтому пример теперь выглядит следующим образом:

 

if(isset($_POST['stage']) && ('process' == $_POST['stage']))

{

  process_form();

}

else

{

  print_form();

}

function print_form()

{

  echo <<<END

  <form action="$_SERVER[PHP_SELF]" method="post">

  What is your first name?

  <input type="text" name="first_name">

  <input type="hidden" name="stage" value="process">

  <input type="submit" value="Say Hello">

  </form>

  END;

}

function process_form()

{

  echo 'Hello ' . $_POST['first_name'] . '!';

}

Если форма имеет более одного этапа, то просто устанавливайте атрибут stage в новое значение для каждого этапа.

 

Возможно Вас заинтересуют эти материалы

PHP: Буферизация вывода

PHP: Буферизация вывода

Буферизация вывода в PHP это довольно полезная штука, если уметь ею пользоваться. Скажите сколько раз
POP3 протокол с примерами

POP3 протокол с примерами

POP3 это протокол по которому мы можем получить почту с сервера, для подобной задачи, используется
PHP: Хранение сессии в базе данных

PHP: Хранение сессии в базе данных

Как и обещал, тема данной заметки: база данных, как обработчик сессии. А так как на