Методы GET и POST
Синтаксис тернарного оператора
Как правило данные передаются из формы, иногда данные могут передавться через адресную строку. Для передачи данных существуют два специальных метода — это методы POST и GET, и соответственно, в зависимости от того каким методом мы отправляем данные, эти данные будут доступны в одном из двух предопределённых массивов: это массив $_POST и массив $_GET
Передача данных методом GET
Создадим в папке с уроком файл index.php
Создадим в форме поле input и кнопку button .
В адресной строке появится запись: ?name=Андрей — таким образом передаются данные методом GET.
Передаются они через адресную строку в формате ключ — значение .
— Где ключ — это имя поля: name ,
— а значение это то, что мы ввели в данное поле ( Андрей ).
Все GET-параметры идут после вопросительного знака .
По умолчанию данные из формы отправляются методом GET
передача данных методом GET:
Передача данных методом POST
Для этого в форме используем атрибут method , в котором укажем метод post . При нажатии на кнопку данные отправляются, но в адресной строке их нет. Если нажать кнопку F5 или иконку обновления страницы , браузер предложит повторно отправить форму .
Для того, чтобы эту проблему избежать, эта проблема известна еще как » проблема F5«, мы должны перезапрашивать страницу .
Так как данные, при отправке методом POST, не видны, его можно применять при отправке важных,секретных данных, например, пароль и логин при регистрации и т. д.
Метод GET использовать для этих целей нельзя . Метод GET применяется, например, при добавлении товара в корзину.
Так же преимущество POSTа перед GETом это то, что он может отправлять неограниченный объем данных .
Используем еще один атрибут формы action , в котором мы укажем, куда будет отправляться форма(action.php). По умолчанию, если мы не укажем action , то данные будут отправлятся на эту же страницу .
Создадим файл action.php — в нем распечатаем наши данные.
передача данных методом POST:
Распечатка массивов
Распечатка массивов, только в том случае, если в них есть данные, переданные методом POST
Первый случай заключается в использовании функции empty ( пустой ).
Эта функция проверяет, не пуста ли, та или иная переменная и существует ли она вообще. Если переменная существует и она не пуста, тогда функция empty вернет ложь ( false ), если она пуста либо ее не существует, вернет — истину ( true ).
if (! empty ( $_POST )) echo ‘
' ;
print_r ( $_POST );
echo '
‘ ;
>
if ( ! empty ( $_GET )) echo ‘
' ;
print_r ( $_GET );
echo '
‘ ;
>
?>
распечатка массива данных, переданных методом POST с использованием функции empty :
Второй способ — это проверить, существует ли какой-нибудь элемент в массиве . Зачастую проверяется кнопка или какое-нибудь обязательное поле формы.
Сейчас кнопка не имеет имени и поэтому в массиве $_POST ее нет.
Если добавим (в index.php) имя кнопки , например: name=»send» , то данное имя появится в массиве $_POST . Добавим также значение value=»test» и в массиве появится «test» как значение поля формы ( кнопка — то же поле формы ) с ключем «send» .
Мы можем проверить (в action.php), существует ли у нас такая кнопка с помощью функции isset , которая проверяет, установленна ли переменная, не важно, есть значение у переменной или нет, главное чтобы она была.
Проверяем: если у нас существует в массиве $_POST элемент «send» , тогда мы распечатаем этот массив — это значит, что кнопка была нажата и форма была отправленна .
// если у нас существует в массиве $_POST элемент «send»,
// тогда мы распечатаем этот массив
if ( isset ( $_POST [ ‘send’ ])) echo ‘
$_POST
' ;
print_r ( $_POST );
echo '
‘ ;
>
if ( isset ( $_GET [ ‘send’ ])) echo ‘
$_GET
' ;
print_r ( $_GET );
echo '
‘ ;
>
?>
Распечатка массива данных, переданных методом POST с помощью проверки
существования в массиве $_POST элемент «send» :
Чтобы данные принимала эта же страница (index.php) делаем в форме action=»» — пустым или action=»index.php» .
Выведем на странице браузера полученное имя:
Введенное имя: — if ( !empty ($_POST[ ‘name’ ])) — проверяем, существует ли переменная(инициализированна ли она) и не пуста ли она,
— echo $_POST[ ‘name’ ] — если она существует, то выведем ее,
— в противном случае выведем: Форма не отправлена .
textarea
Добавим еще одно поле textarea , с именем name=»text» .
С помощью функции nl2br , переносы строк в поле textarea , будут так же отображаться в браузере .
Проверяем, введен ли текст в поле textarea .
Попробуем вывести проверку текста в поле textarea под формой с помощью тернарного оператора .
Синтаксис тернарного оператора
— если условие выполняется, тогда мы выполним выражение «да», если нет,
тогда мы выполним выражение «нет» (то, что идет после знака двоеточия).
В нашем случае: Введенный текст: ,
где:
— ! empty ( $_POST [‘text’ ]) ? — если у нас существует $_POST [‘text’ ] ,
— echo nl2br ( $_POST [‘text’ ]) — то его выводим,
— в противном случае выводим ‘Форма не отправлена’ .
В файле index.php запишем:
PHP занятие 8. Передача данных
При передачи данных формы на сервер формируются суперглобальные переменные — ассоциативные массивы, содержащие передаваемые значения:
- $_GET[] — ассоциативный массив, который содержит все значения, передаваемые в сценарий с помощью метода формы GET .
- $_POST[] – ассоциативный массив, который содержит все значения, передаваемые в сценарий с помощью метода формы POST .
- $_REQUEST[] – ассоциативный массив, который содержит все значение, передаваемые в сценарий с помощью методов POST и GET .
Рассмотрим пример использования метода GET
Пример: В файле index.html находится форма для заполнения данных пользователем. В файле abswer.php разработать скрипт обработки данных формы с выводом введенных пользователем значений (использовать метод GET )
Выполнение:
Файл index.html
form action="answer.php" method="get"> Имя br>input type="text" name="Firstname" >br> Фамилия br> input type="text" name="Lastname" >br> E-mailbr> input type="text" name="email">br> input type="submit" name="submit" value="Отправить"> /form>
echo "
Ваше имя" . $_GET['Firstname']; echo "
Ваша фамилия" . $_GET['Lastname']; echo "
Ваш электронный адрес" . $_GET['email']; ?>
Ваше имя» . $_GET[‘Firstname’]; echo »
Ваша фамилия» . $_GET[‘Lastname’]; echo »
Ваш электронный адрес» . $_GET[’email’]; ?>
Рассмотрим вариант безопасной обработки данных:
If (isset($_GET['Firstname']) { $firstname=trim (strip_tags($_GET['Firstname'])); echo "
Ваше имя" .$firstname;} ?>
Безопасная обработка данных
Рассмотрим тот же самый пример с использованием метода POST
Пример: В файле index.html находится форма для заполнения данных пользователем. В файле abswer.php разработать скрипт обработки данных формы с выводом введенных пользователем значений (использовать метод POST )
Выполнение:
Файл index.html
form action="answer.php" method="post"> Имя br>input type="text" name="Firstname">br> Фамилия br> input type="text" name="Lastname">br> E-mailbr> input type="text" name="email">br> input type="submit" name="submit" value="Отправить"> /form>
echo "
Ваше имя" . $_POST['Firstname']; echo "
Ваша фамилия" . $_POST['Lastname']; echo "
Ваш электронный адрес" . $_POST['email']; ?>
Ваше имя» . $_POST[‘Firstname’]; echo »
Ваша фамилия» . $_POST[‘Lastname’]; echo »
Ваш электронный адрес» . $_POST[’email’]; ?>
Итерации по массиву $_Request
Пример: В файле index.html находится форма для заполнения данных пользователем. В файле abswer.php разработать скрипт обработки данных формы с выводом введенных пользователем значений (использовать метод REQUEST )
Выполнение:
Файл index.html
form action="answer.php" method="post"> Имя br>input type="text" name="Firstname">br> Фамилия br> input type="text" name="Lastname">br> E-mailbr> input type="text" name="email">br> input type="submit" name="submit" value="Отправить"> /form>
foreach($_REQUEST as $key => $value) { echo $key; echo ": " .$value; echo "
"; } ?>
Формируемый при передачи массив имеет вид:
$_Request['Firstname']="…" $_Request['Lastname']="…" $_Request['email']="…"
Функции для обработки данных формы
- is_string(string) – определяет, является ли переменная string строкой. Возвращает значение true или false .
- is_int(string) или is_integer(string) – определяет, является ли переменная string целым числом. Возвращает значение true или false .
- is_numeric(string) – определяет, является ли переменная string числовой строкой. Возвращает значение true или false .
- is_double(string) или is_float(string) – определяет, является ли переменная string числом с плавающей точкой. Возвращает значение true или false
- был ли отправлен запрос при щелчке на кнопке
- были ли поля заполнены цифрами, а не другими символами
- Создайте файл calculator.php
- Для построения формы воспользуйтесь конструкцией:
echo $_SERVER['PHP_SELF']; ?>" method="post">
Лабораторная работа 8_2 (сложный вариант):
Написать интерфейс, который позволял бы создавать html-формы. Пользователь выбирает, какие элементы и в каком количестве нужно создать, придумывает им названия, а программа сама генерирует требуемую форму.
- выбор типов элементов ввода и их количества (task_form.html);
task_form.html:
Результат:
ask_names.php:
При создании двух элементов типа «текстовая строка» и одного элемента типа «текстовая область» получим (рис. 8). Введем в эту форму, например, строки «Название», «Автор» и «Краткое содержание». Эти данные будет обрабатывать скрипт task.php.
рис. 8. Промежуточные результаты
Результатом работы скрипта с входными данными, приведенными выше, будет следующая форма:
Лабораторная работа 8_3 (легкий вариант):
Средствами PHP разработать простой валютный калькулятор, который конвертирует различные валюты в рубли (см. рисунок). Форму калькулятора и скрипт обработки поместить в один файл, используя функцию:
Валютный калькулятор на php
Лабораторная работа 8_4:
Заменить фреймовую структуру с меню, на работу с одним файлом php.
- Откройте файл в котором формируется меню.
- Измените значения всех элементов массива на index.php
- Добавьте к значению «index.php» параметр id , передаваемый методом GET
- Добавьте к параметру id уникальные значения.
action=" echo $_SERVER['PHP_SELF']; ?>"