После авторизации Вы получите доступ к файлам, скрытым материалам сайта, исходным кодам
возможность комментировать и т.д.

Вы можете авторизоваться на сайте всего одним кликом:

2016-07-02
Основы PHP → HTTP - Запросы, Параметры URL
PHP, Get, Post, Запросы, Отправка данных, Новости, Динамическая страница, Динамический сайт

HTTP (Hyper Text Transport Protocol) — тот самый язык, на котором "разговаривают" браузеры с веб-серверами, важнейший протокол Интернета...

Типы запросов

Запросы можно разделить на два вида:

  1. GET;
  2. POST.

GET используется при наборе адреса сайта в строке браузера или перехода по ссылке. POST служит для отправки форм, например при регистрации на сайте, публикации комментария к статье. Для отправки формы обычно нужно нажать кнопку "Написать" или подобную ей:

Для простоты понимания различие можно представлять так:

  1. GET используется для чтения сайтов (читаем Интернет);
  2. POST служит для публикации информации на сайтах (пишем Интернет)

URL и параметры запроса

В обоих случаях требуется URL (Uniform Resource Locator) запрашиваемого документа.

URLэто адрес страницы в Интернете. Как правило, он имеет такой вид:
http://<хост>/<путь>
Например:
http://www.example.ru/about.php
Или же такой, если необходимо передать параметры сценарию:
http://<хост>/<путь>?<параметры>
где <параметры> — это набор пар вида:
<имя>=<значение>
разделенных символом &.
Пример:
http://www.example.ru/news.php?id=100&show_comments=yes

У вас может возникнуть вопрос: для чего сценарию передавать параметры? Динамическая страница (она же сценарий), в отличие от статической, может выдавать различную информацию. Например, сценарий новостной ленты отображает либо список анонсов последних новостей, либо целиком текст конкретной статьи. Что именно хочет увидеть пользователь, сценарий понимает, исходя из переданных ему параметров.

Это могло бы работать следующим образом. Получение списка последних новостей: http://www.example.ru/news.php (URL без параметров). Получение полного текста новостной статьи: http://www.example.ru/news.php?id=1 (URL включает в качестве параметра номер новости).

Обработка параметров URL

А сейчас мы напишем сценарий этой самой новостной ленты. У нее будут два режима:

  1. Демонстрация списка всех новостей (если нет параметров):
  2. Отображение текста конкретной новости (если ее номер передан в качестве параметра):
Всего новостей у нас будет три:
  1. "За качество ответят. Контролировать продукты питания начали по-новому";
  2. "Варшава не раскрывает перечень возможных мер против Минска";
  3. "Павел Астахов намерен добиваться отставки ряда чиновников Удмуртии"
ВНИМАНИЕ ! Пример упрощен. Никто никогда не хранит новости в коде сценария. Хранить подобную информацию следует в базе данных. Но это предмет совсем другого урока!

Сейчас же нам важно научиться обрабатывать параметры, переданные через URL. Итак, создайте файл news.php:

<?php
// Функция вывода всего списка новостей.
function show_list($news)
{
   echo '<html>';
   echo '<head>';
   echo '<title>Последние новости</title>';
   echo '</head>';
   echo '<body>';
   echo '<ul>';

   for ($i = 0; $i < count($news); $i++)
   {
      echo '<li>';
      echo '<a href="/?id=' . ($i + 1) . '">';
      echo $news[$i];
      echo '</a>';
      echo '</li>';
      echo '</ul>';
      echo '</body>';
      echo '</html>';
   }

   // Функция вывода конкретной новости.
   function show_item($news, $id)
   {
      echo '<html>';
      echo '<head>';
      echo "<title>Новость #$id</title>";
      echo '</head>';
      echo '<body>';
      echo '<a href="/">Вернуться к списку новостей</a>';
      echo '<p>';
      echo $news[$id — 1];
      echo '</p>';
      echo '<p>';
      echo 'Представьте, что здесь много текста и картинок :)';
      echo '</p>';
      echo '</body>';
      echo '</html>';
   }
}

   // Точка входа.
   // Создаем массив новостей.
   $news = array();
   $news[0] = 'За качество ответят. Контролировать продукты питания начали по-новому.';
   $news[1] = 'Варшава не раскрывает перечень возможных мер против Минска';
   $news[2] = 'Павел Астахов намерен добиваться отставки ряда чиновников Удмуртии';

   // Был ли передан id новости в качестве параметра?
   if (isset($_GET['id']))
   {
      show_item($news, $_GET['id']);
   }
   else
   {
      show_list($news);
   }
   ?>

Теперь подробно разберем, что же мы написали.

Вначале объявляем две функции, которые будут генерировать HTML. Первая отображает список новостей, вторая — текст конкретной новости. Управление будет передано в эти функции только тогда, когда мы их вызовем. Вернемся к ним позже.

Выполнение сценария начинается с того места, где комментарием помечена точка входа. Мы создаем массив, состоящий из трех новостей. Напомним, нумерация элементов в массиве начинается с нуля!

Далее проверяем, был ли передан id новости в качестве параметра. Параметры, переданные через URL, хранятся в системной переменной $_GET. Она представляет собой ассоциативный массив (или, по-другому, словарь).

Напомним, что ассоциативный массив (или словарь) — это такая структура данных, которая содержит пары "ключ—значение".

Ключи словаря $_GET — это имена параметров. Функция isset() возвращает true , если переменная определена. Таким образом,
if (isset($_GET['id']))
следует читать: "если URL запроса содержит параметр id".

Теперь возвращаемся к функциям. Здесь все просто, но мы хотели бы обратить внимание на два момента.

Во-первых, может быть не совсем понятно, для чего в одном месте прибавляем к $i единицу, а в другом — вычитаем. Сделано это для того, чтобы пользователь видел URL первой новости так: "news.php?id=1", а не "news.php?id=0". Это хороший тон и не более того.

Во-вторых, обратите внимание на строчку:
echo "Новость #$id";
Двойные кавычки отличаются от одинарных тем, что если внутри них встречаются имена переменных (со знаком $), то они заменяются значениями этих самых переменных. Строка в одинарных кавычках остается как есть без подстановки значений переменных.

В следующем уроке мы разберем как отправить содержимое HTML-Формы, заполненной пользователем, и обработать его.

1985
0
Пожалуйста, авторизируйтесь, чтобы скачать архив с файлами урока