На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Введение в переменные 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-запрос





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



Победа
Расчет возраста человека в годах на C#


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.