PHP
Методы GET и POST
Синтаксис тернарного оператора
поле textarea
Синтаксис тернарного оператора
элемент checkbox
элемент select
Ссылка для передачи данных методом GET
Как правило данные передаются из формы, иногда данные могут передавться через адресную строку. Для передачи данных существуют два специальных метода - это методы POST и GET, и соответственно, в зависимости от того каким методом мы отправляем данные, эти данные будут доступны в одном из двух предопределённых массивов: это массив $_POST и массив $_GET
Передача данных методом GET
Создадим в папке с уроком файл index.php
Создадим в форме поле input и кнопку button.
Введем в поле имя: Андрей
В адресной строке появится запись: ?name=Андрей - таким образом передаются данные методом GET.
Передаются они через адресную строку в формате ключ - значение .
- Где ключ - это имя поля: name ,
- а значение это то, что мы ввели в данное поле (Андрей).
Все GET-параметры идут после вопросительного знака .
По умолчанию данные из формы отправляются методом GET
Файл index.php
-- файл index.php --
<?php
(-1);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title> Document </title>
</head>
<body>
<form>
<p>
<input type = "text" name ="name">
</p>
<p>
<button type ="submit"> Send </button>
</p>
</form>
</body>
</html>
передача данных методом GET:
Передача данных методом POST
Для этого в форме используем атрибут method, в котором укажем метод post. При нажатии на кнопку данные отправляются, но в адресной строке их нет. Если нажать кнопку F5 или иконку обновления страницы , браузер предложит повторно отправить форму.
Для того, чтобы эту проблему избежать, эта проблема известна еще как " проблема F5", мы должны перезапрашивать страницу .
Так как данные, при отправке методом POST, не видны, его можно применять при отправке важных,секретных данных, например, пароль и логин при регистрации и т. д.
Метод GET использовать для этих целей нельзя . Метод GET применяется, например, при добавлении товара в корзину.
Так же преимущество POSTа перед GETом это то, что он может отправлять неограниченный объем данных .
Используем еще один атрибут формы action, в котором мы укажем, куда будет отправляться форма(action.php). По умолчанию, если мы не укажем action, то данные будут отправлятся на эту же страницу.
Создадим файл action.php - в нем распечатаем наши данные.
Файл action.php
-- файл action.php --
<?php
(-1);
print_r($_POST);
print_r($_GET);
?>
// Добавим ссылку "назад"
<p>
<a href ="index.php"> back </a>
</p>
Файл index.php
-- файл index.php --
<?php
(-1);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title> Document </title>
</head>
<body>
// Передача данных методом POST
// добавим в форму атрибут method, в котором укажем метод post.
<form method="post" action="action.php">
<p>
<input type="text" name="name">
</p>
<p>
<button type="submit"> Send </button>
</p>
</form>
</body>
</html>
передача данных методом POST:
Распечатка массивов
Распечатка массивов, только в том случае, если в них есть данные, переданные методом POST
Первый случай заключается в использовании функции empty (пустой).
Эта функция проверяет, не пуста ли, та или иная переменная и существует ли она вообще. Если переменная существует и она не пуста, тогда функция empty вернет ложь (false), если она пуста либо ее не существует, вернет - истину (true).
Файл action.php
-- файл action.php --
<?php
(-1);
if (! empty($_POST)){
echo '<pre>';
print_r ($_POST);
echo '</pre>';
}
if ( !empty($_GET)){
echo '<pre>';
print_r ($_GET);
echo '</pre>';
}
?>
распечатка массива данных, переданных методом POST с использованием функции empty:
Второй способ - это проверить, существует ли какой-нибудь элемент в массиве . Зачастую проверяется кнопка или какое-нибудь обязательное поле формы.
Сейчас кнопка не имеет имени и поэтому в массиве $_POST ее нет.
Если добавим (в index.php) имя кнопки , например: name="send", то данное имя появится в массиве $_POST. Добавим также значение value="test" и в массиве появится "test" как значение поля формы (кнопка - то же поле формы ) с ключем "send".
Мы можем проверить (в action.php), существует ли у нас такая кнопка с помощью функции isset, которая проверяет, установленна ли переменная, не важно, есть значение у переменной или нет, главное чтобы она была.
Проверяем: если у нас существует в массиве $_POST элемент "send", тогда мы распечатаем этот массив - это значит, что кнопка была нажата и форма была отправленна.
Файл action.php
-- файл action.php --
<?php
(-1);
// если у нас существует в массиве $_POST элемент "send",
// тогда мы распечатаем этот массив
if ( isset ($_POST['send'])){
echo '<pre><p>$_POST</p>';
print_r($_POST);
echo '</pre>';
}
if ( isset ($_GET['send'])){
echo '<pre><p>$_GET</p>';
print_r ($_GET);
echo '</pre>';
}
?>
Файл index.php
-- файл index.php --
<?php
(-1);
?>
<!doctype html>
<html>
<head>
<meta charset ="UTF-8" >
<title> Document</title>
</head>
<body>
<form method="post" action= "action.php">
<p>
<input type="text" name= "name">
</p>
<p>
// добавим имя кнопки: name="send" и значение: value="test"
<button type="submit" name="send" value="test"> Send </button>
</p>
</form>
</body>
</html>
Распечатка массива данных, переданных методом POST с помощью проверки
существования в массиве $_POST элемент "send":
Чтобы данные принимала эта же страница (index.php) делаем в форме action="" - пустым или action="index.php".
Выведем на странице браузера полученное имя:
Введенное имя: <?php if (!empty ($_POST[ 'name' ])) echo $_POST[ 'name' ].
- if ( !empty ($_POST[ 'name' ])) - проверяем, существует ли переменная(инициализированна ли она) и не пуста ли она,
- echo $_POST[ 'name' ] - если она существует, то выведем ее,
- в противном случае выведем: Форма не отправлена .
textarea
Добавим еще одно поле textarea, с именем name="text" .
С помощью функции nl2br , переносы строк в поле textarea , будут так же отображаться
в браузере .
Проверяем, введен ли текст в поле textarea .
Попробуем вывести проверку текста в поле textarea под формой с помощью тернарного оператора .
Синтаксис тернарного оператора
<?php условие ? да : нет ?>
- если условие выполняется, тогда мы выполним выражение "да", если нет,
тогда мы выполним выражение "нет" (то, что идет после знака двоеточия).
В нашем случае: Введенный текст: <?php echo ! empty ( $_POST ['text' ]) ? nl2br ( $_POST ['text' ]) :
'Форма не отправлена' ?> ,
где:
-! empty ( $_POST ['text' ]) ? - если у нас существует $_POST ['text' ],
- echo nl2br ( $_POST ['text' ]) - то его выводим,
- в противном случае выводим 'Форма не отправлена' .
В файле index.php запишем:
-- файл index.php --
<?php
(-1);
if( isset($_POST['send'])){
echo '</pre><p>$_POST</p>';
print_r($_POST);
echo '</pre>';
}
if( isset ($_GET['send' ])){
echo '</pre><p>$_GET</p>';
print_r($_GET);
echo '</pre>';
}
?>
<!doctype html>
<html>
<head>
<meta charset ="UTF-8">
<title> Document </title>
</head>
<body>
// делаем в форме action="" - пустым, чтобы данные принимала эта же страница
<form method="post" action ="">
<p>
<input type="text" name="name">
</p>
<!-- добавим еще одно поле textarea, с именем name="text" -->
<p>
<textarea name="text"> </textarea>
</p>
// добавим имя кнопки: name="send" и значение: value="test"
<p>
<button type="submit" name="send" value="test"> Send </button>
</p>
<hr>
<!-- если существует переменная $_POST['name'], тогда выведем его,-->
<!-- иначе выведем выведем'Форма не отправлена' -->
<p>
Введенное имя: <?php if(!empty($_POST['name'])) echo $_POST['name'];
else echo 'Форма не отправлена' ?>
</p>
<!-- если существует переменная $_POST['text'], тогда выведем его, -->
<!-- иначе выведем выведем'Форма не отправлена' -->
<p>
Введенный текст: <?php if (!empty($_POST['text'])) echo ($_POST['text']);
else echo 'Форма не отправлена' ?>
</p>
<!-- вариант альтернативной записи условия - тернарный оператор -->
<p>
Введенный текст: <?php echo (!empty($_POST['text'])) ? ($_POST['text']) :
'Форма не отправлена' ?>
</p>
</form>
</body>
</html>
заполняем поля:
получаем после нажатия кнопки Send :
checkbox
Добавим в форму чекбокс (checkbox) с именем name="remember" .
В обработчике проверяем, существует ли $_POST['remember'].
select
Добавим в форму элемент селект (select) с именем lang .
В нем будут опшины со значениями: <option value= "eng"> English </option> и т. д.
Для выборов нескольких значений, добавляем атрибут multiple="". В браузере, удерживая клавишу Ctrl, выбираем несколько значений. Но последнее значение перезапишет предшествующие.
Чтобы указать, что мы хотим принимать на сервере все значения языков, для этого указываем , что lang - это не просто одиночное значение, а это - массив (lang[]).
Ссылка для передачи данных методом GET
Добавляем ссылку для передачи данных методом GET (применяется, например, для добавления в корзину товаров).
Пишем ссылку: <a href="index.php?name=Петя & test=123" >link</a> - после вопросительного знака, указываем наши параметры: name=Петя & test=123. В адресной строке выведится: ?name=Петя" & test=123.
Для передачи нескольких данных, разделяем пары ключ-значение знаком амперсанда ( & ),
но правильней сделать его HTML-сущностью ( amp; )
В файле index.php запишем:
-- файл index.php --
<?php
(-1);
if( isset ($_POST['send'])){
echo '</pre>$_POST</p>';
print_r($_POST);
echo '</pre>';
}
// если есть что-то в массиве GET, тогда мы его распечатаем
if( ! empty($_GET['send'])){
echo '</pre>$_GET</p>';
print_r($_GET);
echo '</pre>';
}
?>
<!doctype html>
<html>
<head>
<meta charset ="UTF-8">
<title> Document </title>
</head>
<body>
<form method="post" action ="">
<p>
<input type="text" name="name">
</p>
<!-- добавим еще одно поле textarea, с именем name="text" -->
<p>
<textarea name="text"> </textarea>
</p>
<!-- добавим в форму чекбокс, с именем name="remember" -->
<p>
<input type="checkbox" name="remember">
</p>
<!--добавим в форму элемент селект -->
<p>
<select name="lang[]" multiple="">
<option value="eng"> English </option>
<option value="ru"> Russian </option>
<option value="jp"> Japan </option>
</select>
</p>
<p>
<button type="submit" name="send" value="test"> Send </button>
</p>
<hr>
<!-- если существует переменная $_POST['name'], тогда выведем его,-->
<!-- иначе выведем выведем'Форма не отправлена' -->
<p>
Введенное имя: <?php if(! empty($_POST['name'])) echo $_POST['name'];
else echo 'Форма не отправлена' ?>
</p>
<!-- если существует переменная $_POST['text'], тогда выведем его, -->
<!-- иначе выведем выведем'Форма не отправлена' -->
<p>
Введенный текст: <?php if(!empty($_POST['text'])) echo nl2br($_POST['text']);
else echo 'Форма не отправлена' ?>
</p>
<!-- вариант альтернативной записи условия - тернарный оператор -->
<p>
Введенный текст: <?php echo(!empty($_POST['text'])) ? nl2br ($_POST['text']) :
'Форма не отправлена' ?>
</p>
<!-- Чекбокс -->
<p>
<?php if (!empty($_POST['remember']) && $_POST['remember'] == 'on')
echo 'Чекбокс отмечен' ?>
</p>
<!-- ссылка для передачи методом GET (после вопросительного знака, -->
<!-- указываем наши параметры) -->
<a href="index.php?name=Петя & test=123"> link </a>
<!-- в адресной строке выведится: ?name=Петя & test=123 -->
</form>
</body>
</html>
заполняем все поля, отмечаем чексбокс, выбираем все языки:
получаем после нажатия кнопки Send:
получаем после нажатия ссылки link:
- в адресной строке вывелось: ?name=Петя & test=123 & subject=TEST
- на экране распечатался массив $_GET
Структура файлов урока
Наверх Наверх