ШАСК - Лаборатория 305

Лабораторная работа №2 (PHP)

Тема: Погружение в программиррование

Работаем с базой данных

Мы уже знаем, как создавать переменные, записывать и изменять значения, вставлять переменные в шаблон. Но до сих пор информацию для переменных мы придумывали сами. Давайте уже возьмём реальные данные.

База данных — сложная система, которая хранит информацию сайта в организованном виде. В нашем случае это просто PHP-файл, так как информации для хранения у нас мало.

Чтобы получить данные о товаре, воспользуемся его уникальным номером, или артикулом, который хранится в базе данных. В программировании такой номер называется идентификатором, то есть id.

В нашей базе данных есть полезные команды. Например, get_product_title поможет получить название конкретного товара. Для этого нужно указать в скобках подходящий артикул.

Например, get_product_title(25)

Команды, с помощью которых мы будем получать данные из базы, являются нашей разработкой и хранятся в базе данных, а не частью языка PHP. Поэтому вне данной базы они не работают.

Подключим базу данных в начале сценария, и полезные команды станут доступны. Затем заменим значение $title на get_product_title, а в скобках укажем номер товара.

Задание 2.1

  1. В файле product.php подключите на 2 строке базу данных products_db.php
  2. Поменяйте значение переменной $title, замените 'Люстра Леопом' на get_product_title(1)
  3. Посмотрите, как изменилось название товара на странице в браузере
  4. Поменяйте число в скобках из get_product_title(1) на 5 и посмотрите, как изменится название товара на странице

Добавляем изображения из базы данных

Название товара мы берём из базы данных, сделаем так же и с изображением товара.

Используем ещё одну команду из базы — get_img_url. Она поможет получить путь до картинки с товаром. Обратите внимание, эта команда также не является стандартной для языка PHP, а создана специально для нашего магазина.

Создадим переменную в сценарии product.php, запишем в неё информацию из базы данных и выведем эту переменную в шаблоне в атрибуте src тега <img>

Можно добавить переменную в шаблон знакомым способом, но такая запись слишком многословная:

Код php
<img src="<?php echo($img_url); ?>">
// Добавили переменную в атрибут картинки в шаблоне

В PHP есть запись короче:

Код php
<img src="<?= $img_url ?>">
// Двойные кавычки в атрибуте не удаляются

Работают эти две записи одинаково, разница только в количестве символов.

Обратите внимание,

Обратите внимание

В полной записи скрипта нужно ставить знак точка с запятой, а в сокращенной – не нужно.

Добавим изображение товара так же c помощью сокращённого формата. А в атрибут alt элемента img добавим переменную $title. Так описание фотографии будет соответствовать названию товара.

Задание 2.2

  1. В файле product.php после переменной $title создайте переменную $img_url
  2. Запишите в эту переменную get_img_url(10)
  3. Переключитесь в редакторе на вкладку c шаблоном components/product_info.php
  4. Добавьте переменную $img_url в атрибут src тега <img> с помощью сокращённой записи:
    <?= $img_url ?>, при этом кавычки должны остаться.
  5. По аналогии добавьте переменную $title в атрибут alt

Переменная id

Сейчас у нас не совпадает название товара и его фотография. Почему так произошло? Всё из-за того, что мы вручную прописывали разные артикулы в команды.

product.php
$title = get_product_title(1);
$img_url = get_img_url(10);

Как защититься от подобных ошибок?

Можно записать артикул в одно место и затем использовать его. Тут нам тоже помогут переменные.

Обычно такую переменную для хранения идентификатора называют $id.

Заведём новую переменную и запишем в неё идентификатор товара. Затем заменим цифры в командах на эту переменную. Достаточно поменять номер товара только в одном месте — в переменной, и вся информация будет соответствовать одному товару. Вероятность ошибки станет ниже.

Задание 2.3

  1. В файле product.php объявите переменную $id со значением 1
  2. Поменяйте команду get_product_title(1) на get_product_title($id)
  3. По аналогии поменяйте get_img_url(10) на get_img_url($id)
  4. Проверьте, как стала выглядеть страница с описанием товара.
  5. Поменяйте значение переменной $id c 1 на 7 и посмотрите, как изменятся данные на странице.

Знакомимся с командой $_GET

Мы научились задавать идентификатор в одном месте, но мы не можем каждый раз менять значение для каждого пользователя вручную. Оно должно приходить откуда-то извне. И лучший вариант — адрес, который виден в адресной строке браузера.

В адресе есть специальная часть, которая называется «параметры запроса». Параметры запроса располагаются после знака вопроса.

https://www.gloevk.ru/product.php?product_id=1

В данном примере у нас есть один параметр product_id, а цифра в конце этого адреса — его значение.

Получить параметр запроса можно с помощью команды $_GET, указав в квадратных скобках его название.

echo($_GET['product_id']);
// Получаем значение параметра запроса

Подробную информацию о параметрах запроса и использовании $_GET вы можете получить в учебнике (ссылка).

На следующем шаге используем $_GET['product_id'] для получения артикула товара.

Получаем данные из параметров запроса

На предыдущем шаге мы убедились, что можно получать данные из адреса. Теперь осталось подставить $_GET['product_id'] в значение переменной $id. Так мы получим артикул товара.

$id = $_GET['product_id'];

Как проверить, что наш динамический шаблон работает? Сделать это можно двумя способами.

Самый простой — ещё раз поменять значение параметра запроса в адресной строке.

Второй способ чуть дольше. У нас есть каталог, в котором у каждого товара есть ссылка. В ней уже прописан нужный адрес с правильными параметрами. Об этом позаботились наши верстальщики. Поэтому мы можем перейти на страницу каталога и щёлкнуть по любой ссылке. Браузер перейдёт на страницу этого товара, и мы увидим нужный товар.

Задание 2.4

  1. В файле product.php замените значение переменной $id на $_GET['product_id']
  2. В адресной строке поменяйте число 1 на 9
  3. В браузере перейдите по ссылке на страницу каталога товаров
  4. Щёлкните на третий товар — «Блетуб». Убедитесь, что на странице товара отображается выбранный товар.