Введение в переменные PHP, POST и GET
Без понимания самых основ языка дальнейшее обучение будет идти очень тяжело. Давайте разберем самые основы применительно к веб программированию. На данном уроке мы узнаем, что такое переменная, как ими манипулировать, а также познакомимся с GET и POST запросами.
Что такое переменные
Образно говоря, переменную можно представить как ящик. В который можно поместить что-то, например кота
Шутка. Вот, например, переменная $a
<?php $a; ?>В этом коде мы ввели в программу наш ящик. На ящик налеплена буква a – именно по этому обозначению мы и можем узнать наш ящик из множества других. Переменные могут иметь в своем названии не только буквы, но и цифры и знаки подчеркивания.
Принято называть переменные осмысленно, чтобы сразу можно было догадаться, что они обозначают (что в них хранится). Например, $n_dela или $chisl_rabov. Если переменная состоит из нескольких слов, то их разделяют или знаком подчеркивания (снейк кейс или змеиный_регистр) или каждое слово с заглавной буквы - $ustavKapital (кэмел кейс или ВерблюжийРегистр).
Итак, переменные мы ввели. Теперь в эти переменные как в ящик (помните аналогию?) можно положить что угодно. Число, строку, объект. А потом достать, когда требуется и произвести какие-то манипуляции. И изменить. И снова достать – есть мнение, что поэтому и называется переменная – так как хранящееся в ящике может быть разным.
Переменные можно подставлять в строки.
Пример
<?php //мы вводим переменные в код //и сразу же их инициализируем $region = "Московская область"; $name_company = "Триоквант"; //а теперь выводим на экран echo "Наша компания: $name_company, Регион: $region \n"; //а теперь в ящики мы кладем новые значения $region = "Вологодская область"; $name_company = "Оринтекс"; //и снова выводим на экран echo "Наша компания: $name_company, Регион: $region \n";
Подстановка в цикле и в запросе
В реальной разработке переменные могут использоваться, например, в качестве подстановки значений в sql-запрос. Просто пример. Нам необходимо вытащить из таблицы категорий описание категории, если имеется её идентификатор (смотри предыдущую заметку). Если мы знаем ид (например, оно равняется единице), то запрос будет самым обычным:
$sql = "SELECT `description` FROM `cats` WHERE `id`='1'"; $description_raw = $conn->query($sql) or die($conn->error); if ($result = $description_raw->fetch_object()){ $desc = $result->description; } echo $desc;А если мы не знаем, каким будет ид категории? Тогда мы используем переменную $cat_id. Код будет точно таким же:
$sql = "SELECT `description` FROM `cats` WHERE `id`='$cat_id'"; $description_raw = $conn->query($sql) or die($conn->error); if ($result = $description_raw->fetch_object()){ $desc = $result->description; } echo $desc;Но теперь перед началом выполнения кода необходимо будет задать какое-то значение переменной $cat_id. Это может быть та же единица к примеру:
$cat_id = 1;Или тройка
$cat = 3;А можно пройтись в цикле по числам. Например, так:
for ($i=1; $i++; $i <=3){ $cat_id = $i; $sql = "SELECT `description` FROM `cats` WHERE `id`='$cat_id'"; $description_raw = $conn->query($sql) or die($conn->error); if ($result = $description_raw->fetch_object()){ $desc = $result->description; $desc. "<br />"; } }Примечание 1: это плохой пример, так делать не надо, он только для демонстрации того, что переменные могут принимать любые значения.
Примечание 2: подставлять переменные прямо в запросы – плохая практика, лучше использовать специальные функции для привязки переменных к запросу, например, mysqli_stmt_bind_param, prepare, но это тема для отдельной заметки.
GET и POST запросы
Современный посетитель сайта очень часто желает не просто получать информацию, а обмениваться ей. Или получать её выборочно. Для этого ему необходимо каким-то образом взаимодействовать с сервером, давать ему понять, что посетителю что-то требуется. Самый распространенный инструмент – это GET и POST запросы.
GET
Очень простой инструмент. Посмотрите в адресную строку браузера, где вы сейчас находитесь. Вы увидите что-то типа:
https://upread.ru/art.php?id=1069Так вот после знака вопроса и идут параметры GET-запроса. В данном случае это параметр id он равен 1069. Вывести на странице его можно так:
echo $_GET['id'];Это значит, что в глобальном массиве $_GET имеется ключ id, а значение у него – 1069. Мы можем занести это значение в переменную. Например так:
$page_id = $_GET['id'];Теперь в ящике-переменной с названием $page_id хранится число 1069.
Если надо занести в глобальный массив $_GET несколько значений, то они разделяются знаком амперсанд:
http://upread.ru/art.php?id=512&ysclid=l6xi7383tq320943907Здесь у нас будет в массиве гет две пары ключ-значение id и ysclid: $_GET['id'] и $_GET['ysclid];
POST
Немного более сложный метод передачи данных – это метод POST. Здесь вы визуально не видите, как отправляются данные, но надо просто поверить – они отправляются. Давайте снова вернемся к предыдущему материалу и вспомним, что мы делали там форму:
<form method='post' action=""> </form> Тут мы создаем форму, данные которой будут на сервер отправляться методом POST к той же самой странице, на которой находится посетитель. Добавим input и кнопку <form method='post' action=""> <input type="text" name="cat_id"> <br /> <input type='submit' name='send' value='val_send'> </form>Теперь, когда в поле инпута вводите текст и нажимаете на кнопку, то на сервер отправляется та информация, которая в текстовом поле. И уже с ней можно работать. Например, в данном конкретном случае в глобальном массиве $_POST будет два значения – с ключами cat_id и send: $_POST["cat_id"] и $_POST["send"] Значение кнопки $_POST["send"] всегда будет равно 'val_send', так как мы жестко прописали в коде его. А вот значение value тега инпут тип текст всегда будет разным – в зависимости от того, что вы там напишите.
Итак, вот ввели вы текст в текстовое поле, потом нажали кнопку. Затем страница перезагружается, и уже с массивом $_POST вы можете дальше работать. Простой пример
$conn = new MySQLi("localhost","root","","demo"); if ($conn->connect_error) {die("Ошибка: невозможно подключиться: " . $conn->connect_error);} $conn->set_charset("utf8mb4"); if (isset($_POST['cat_id''])){ echo "Вы ввели в поле ".$_POST['cat_id']; } ?> <form method='post' action=""> <input type="text" name="cat_id"> <br /> <input type='submit' name='send'> </form>Обратите внимание, что мы используем функцию isset – чтобы определить существует ли вообще такое значение в массиве $_POST. Если вы просто так попробуете, например так:
echo "Вы ввели в поле ".$_POST['cat_id']; ?> <form method='post' action=""> <input type="text" name="cat_id"> <br /> <input type='submit' name='send'> </form>, то при заходе на страницу вы увидите ошибку:
Warning: Undefined array key "cat_id" in C:\xampp\htdocs\test\z5.php on line 11Почему она возникает? Дело в том, что первый раз, когда мы заходим на страницу, то мы еще ничего не отправляем кнопкой формы и никакого значения в массиве $_POST вообще не существует. Оно возникает только тогда, когда мы отправляем форму, то есть нажимаем кнопку.
Ну вот, а теперь вы можете вернуться к началу нашего урока и попробовать самостоятельно подставить $_POST['cat_id'] в запрос к базе данных.
$conn = new MySQLi("localhost","root","","demo"); if ($conn->connect_error) {die("Ошибка: невозможно подключиться: " . $conn->connect_error);} $conn->set_charset("utf8mb4"); if (isset($_POST['cat_id'])){ $desc = ""; $cat_id = $_POST['cat_id']; $sql = "SELECT `description` FROM `cats` WHERE `id`='$cat_id'"; $description_raw = $conn->query($sql) or die($conn->error); if ($result = $description_raw->fetch_object()){ $desc = $result->description; } echo "Вы ввели номер категории $cat_id, ему соотвествует описание категории ".$desc; } ?> <form method='post' action=""> <input type="text" name="cat_id"> <br /> <input type='submit' name='send'> </form>Примечание. На самом деле сфера применения POST и GET запросов гораздо шире, это был просто частный пример.
Домашнее задание
- Изучите тег textarea.
- Создайте форму с полями text (name = name) и textarea (name = description).
- Создайте код, который будет заносить в таблицу cats название и описание категории при отправке формы (нажатии кнопки) методом POST.
- Напишите код, который будет выводить название и описание категории, когда к адресу страницы будет прибавляться ?id=2 – где 2 – это id категории.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.