#2 php GET-параметры: приветствие по имени, Пример обработки Get-параметров

В уроке про страницу с датой скрипт сам решал, что вывести. Теперь передадим серверу данные прямо в адресе страницы: браузер как бы «задаёт вопрос», а скрипт отвечает с учётом запроса.

Немного теории

Вспомните, как PHP взаимодействует с сервером и клиентом: всё, что пришло в запросе, PHP ещё до запуска скрипта собирает в специальные массивы — параметры из адреса попадают в $_GET, а данные, отправленные формой, — в $_POST (с ним поработаем в уроках про формы).

Шаг 1. Добавляем параметр в адрес

Откройте страницу урока: http://localhost:19791/lessons/lesson02-get-name/ — скрипет поприветствует «незнакомца».

А теперь допишите в адрес после знака вопроса параметр: http://localhost:19791/lessons/lesson02-get-name/?name=Вася — страница ответит: «Привет, Вася!»

Часть адреса после ? называют строкой запроса: это пары вида имя=значение, разделённые знаком &. Устройство ссылок и URL мы подробно разбирали в уроке HTML&CSS-курса про ссылки.

Шаг 2. Читаем параметр в PHP

Вот весь код страницы (index.php):

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Привет по имени</title>
</head>
<body>
  <h1>Привет!</h1>
<?php
if (isset($_GET['name'])) {
    $name = $_GET['name'];
    echo '<p>Привет, ' . $name . '!</p>';
} else {
    echo '<p>Привет, незнакомец!</p>';
}
?>
</body>
</html>

Разберём новые моменты:

  • $_GET — это ассоциативный массив: у каждого элемента есть строковый ключ. Ключ 'name' совпадает с именем параметра в адресе — про массивы читайте в учебнике «Создание массивов»;
  • проверка isset() убеждается, что параметр вообще передан: без неё обращение к отсутствующему элементу вызвало бы предупреждение (документация — php.net/manual/ru/function.isset.php);
  • точка «склеивает» строки — это строковые операторы из учебника;
  • само ветвление — обычный оператор if с else.

Что произошло на самом деле

Когда вы открыли адрес с ?name=Вася, браузер отправил серверу GET-запрос; сервер передал строку запроса PHP; PHP разложил пары в массив $_GET — и только потом запустил наш код. Обновите страницу: приветствие не меняется, ведь параметры остались в адресе, а каждый запрос выполняет скрипт заново.

Попробуйте сами

  • поприветствуйте кого-нибудь ещё: ?name=Аня;
  • передайте два параметра: ?name=Вася&city=Воронеж — второй будет доступен как $_GET['city']. Доработайте страницу так, чтобы она печатала и город.

Итоги

  • данные можно передавать серверу прямо в адресе — после ?, парами имя=значение через &;
  • PHP до старта скрипта собирает эти пары в массив $_GET;
  • прежде чем читать элемент массива, стоит проверить его наличие через isset().

В следующем уроке возьмём из адреса два числа и сравним их.