Введение в переменные 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 запросов гораздо шире, это был просто частный пример.

Домашнее задание

  1. Изучите тег textarea.
  2. Создайте форму с полями text (name = name) и textarea (name = description).
  3. Создайте код, который будет заносить в таблицу cats название и описание категории при отправке формы (нажатии кнопки) методом POST.
  4. Напишите код, который будет выводить название и описание категории, когда к адресу страницы будет прибавляться ?id=2 – где 2 – это id категории.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, php, уроки, переменные, post-запрос




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Морской бой на Java с исходниками
Кодирование и декодирование base64 на Java 8
Урок 4. Введение в данные, методы и свойства Vue