Урок 14: Методы передачи данных GET и POST, работа с формами

План:

  • Создать форму
  • Передача данных GET
  • Передача данных POST
  • Перехват переданных данных
  • Работа с данными
  • Отличиня GET и POST

Домашка:

Сделать калькулятор, принимающий данные из формы и вывести их на экране

Дополнение к уроку:

Работая с $_GET или $_POST нам важно в начале разобраться какие данные мы передали в скрипт, поэтому не стесняйтесь распечатывать в момент разработки эти переменные на экран:
echo '<pre>'.print_r($_GET,1).print_r($_POST,1).'</pre>';

Забегая вперёд сразу скажу, что эту строчку в финальной версии всегда необходимо удалять. Отправляя домашку на проверку так же этой строчки не должно быть!

Хочу напомнить важное правило из прошлых уроков, нельзя внутри функции использовать $_POST, только передавать значение внутрь функции.

На таймере урока 1:09:00 был рассмотрен важнейший момент работы с данными, в нём говорилось, что нельзя принимать факт отправки формы если была нажата кнопка:
if(isset($_POST['submit']))

Форма была отправлена тогда, когда были переданы ВСЕ ДАННЫЕ, даже если форму не заполнили, для нас важен факт того, что эта форма не была модернизирована хакерами, поэтому мы проверяем была ли форма отправлена так:
if(isset($_POST['login'],$_POST['password']))

Данная проверка говорит о том, что у нас форма состоит из логина и пароля, других данных обязательных нет. Хочу заметить, что checkbox является необязательным, так как в случаях, если не отметить его, то $_POST['checkbox'] не будет передан в наш скрипт. Мы же проверяем только обязательные данные.

Если Вам любопытно применить на себе одежду хакера, то зайдите в HTML-инспектор в Chrome, найдите указанный input и удалите его, таким образом Вам удастся отправить форму с нажатием кнопки SUBMIT, но без передачи удалённых input, о чём и идёт речь с демонстрацией в уроке в 1:09:00.

К вышесказанному правилу можно добавить и следующее: нельзя работать с данными, которые могут существовать, а могут и не существовать не проверив их наличие, если мы не уверены в том, что они существуют. Поэтому мы и делаем проверку isset. Если мы создали самостоятельно в PHP $x = 1; то эта переменная всегда существует, а значит проверять её на isset не имеет смысла.

Правильно код выглядит так:
function test($x) {
    return $x * 2;
}

if(isset($_POST['number'])) {
    echo test($_POST['number']); // вывод результата функции на экран
    $result = test($_POST['number']); // записываем результат в переменную
}

Код выше демонстрирует важный момент, если мы пишем return, то мы можем эти данные как выводить, так и помещать в переменную в зависимости от необходимой нам ситуации. Если бы мы писали в функции echo, то мы бы потеряли возможность записать результат в переменную, а значит наша функция стала бы в 2 раза хуже по качеству. Поэтому функция всегда должна возвращать информацию, а не выводить её за исключением редчайших моментов, когда функция служит для вывода информации на экран.

Чуть не забыл маленькую вещь, которая очень важна на мой взгляд. Вместо checkbox или radio верстайте с тегом LABEL так:
<label><input type="radio" name="question" value="да"> Да</label>
<label><input type="radio" name="question" value="нет"> Нет</label>

Массивы из формы мы используем только тогда, когда у нас могут передаваться более 1 значения, а это бывает с checkbox, или специальном select (multiple):
<input type="checkbox" name="question[]">

Под каждым уроком есть 10 тестов, которые помогут Вам закрепить пройденный материал.
Один из тестов будет развивать Вашу логику и интеллект!
Чтобы получить доступ к тестам - авторизируйтесь!


0%
Главная БАЗОВЫЙ КУРС ПЕРВЫЙ УРОВЕНЬ программирования ВТОРОЙ УРОВЕНЬ верстки ВТОРОЙ УРОВЕНЬ программирования Начать обучение Запуск проекта Мелкие трюки Делимся практикой трудоустройства Проверь свои знания Задачи по PHP MySQL Блог Отзывы