Полезные материалы:
На позапрошлом уроке мы создали страницу с новостями. Но не будем же мы каждый раз заходить в панель управления хостингом, чтобы публиковать изменения – гораздо удобней сделать для этого собственную админ-панель, где в удобном виде можно будет редактировать и публиковать новые записи.
Также, лучше разделить новости, потому что, если они будут публиковаться регулярно, в какой-то момент страница новостей превратится в огромную простыню текста, которую невозможно прочитать, и уж тем более отредактировать.
При работе с большим количеством типовых данных – удобнее всего использовать базы данных. На этом уроке, мы и познакомимся с базами данных MySQL.
MySQL – это наиболее популярные на сегодняшний день базы данных, которые применяются для веб-сайтов.
Переходим в панель управления хостингом, кликаем на «Базы данных» и создаем новую базу данных. На следующем шаге нам будет предложено создать пользователя базы данных и указать для него пароль.
Теперь нажимаем на кнопку «Веб интерфейс БД». В левой части экрана находим нашу базу данных и создаем новую таблицу.
Работа с таблицами баз данных производится точно также, как мы работаем в Excel. Есть заголовки (т.е. столбцы таблицы), которые определяют какие данные, где мы будем хранить, а есть записи (т.е. строки таблицы), которые содержат значения. Точно также как и в Excel нам необходимо для каждого столбца задать тип данных, т.е. какие значения от нас будет ожидать база данных в каждой конкретной ячейке – это могут быть числа, строки, текст, даты, булевые значение (типа ЛОЖЬ / ИСТИНА). Важно правильно подобрать подходящие типы значений для наших данных, чтобы в дальнейшем все работало корректно. В списке «тип» мы можем посмотреть все доступные типы значений, с которыми умеет работать база данных и отдельно загуглить и прочитать про каждый из типов. Но на первых этапах, мы будем пользоваться только теми, что я озвучил выше, а именно: числа, строки, текст, даты и булевые параметры. Также, для строк и чисел необходимо задать максимальную их длину – сколько символов могут иметь каждые значения данного столбца, если это числа или строки. В параметре «по умолчанию» мы можем указать значения, которые будут автоматически записываться в таблицу, если мы их не заполнили.
Теперь, подумаем какие типы данных у нас будут в новостях.
Перво-наперво, это индекс новости – её уникальный порядковый номер. Так мы с лёгкостью сможем получить информацию по той или иной публикации просто по её порядковому номеру в БД. Укажем имя id, тип int (т.е. целые числа). Максимальное значение не будем указывать – оставим его по умолчанию.
Далее – дата публикации новости, укажем имя date, выберем тип данных “timestamp”, который содержит в себе сразу и дату и время. В параметре «по умолчанию» выберем current_timestamp – это позволит автоматически сохранить текущую дату и время при добавлении новой записи в таблицу.
Далее – заголовок новости, укажем имя title, выберем тип стркоа (т.е. varchar) и укажем максимальное значение заголовков наших новостей до 512 символов. При желании можно указать больше или меньше, в зависимости от того, какую максимальную длину заголовков вы хотите использовать.
Далее – текст новости, он у нас может быть очень длинным, поэтому мы не будем его никак ограничивать и выберем тип записи TEXT.
Попробуем добавить новость напрямую в БД. Для этого нажимаем вставить и заполняем созданные ранее нами поля.
Теперь у нас есть новость под порядковым номером 1 и сейчас мы попытаемся её показать на нашем сайте.
Переходим к файловому менеджеру панели управления хостингом, находим файл с нашими новостями и сделаем так, чтобы на это странице пользователь видел все заголовки и даты публикации новостей, которые есть в базе данных.
Во-первых, нам понадобится драйвер базы данных. Это специальное расширение для языка программирования PHP, которое позволяет работать с базами данных. Обычно, такие драйверы на хостинге уже установлены, нам необходимо лишь определить какой именно драйвер нам предстоит использовать. Доступные драйверы могут зависеть от версии PHP, которая установлена на хостинге.
Наиболее распространенная сегодня версия PHP – седьмая. Убедимся, что именно она установлена на хостинге.
Создадим файл info.php и напишем в нем команду:
Перейдем к этому файлу в браузере и проверим, чтобы у нас была установлена именно 7-я версия PHP, если установлена другая -–можно либо попробовать её изменить в настройках хостинга, либо с помощью гугла выяснить какой именно драйвер для работы с БД используется в этой версии PHP, и изучить документацию к нему.
У нас всё хорошо, установлена 7-я версия php, поэтому мы будем использовать драйвер mysqli.
Гуглим запрос «php mysql» и изучаем представленную документацию.
Параллельно открываем файл news.php. Перво-наперво, согласно инструкции, нам необходимо установить соединение. Копируем код из примера и заменяем авторизационные данные на те, что мы задали при создании БД.
$mysqli = new mysqli("localhost", "user", "password", "database");
echo $mysqli -> host_info . "\n";
Проверяем, что соединение успешно установлено и удаляем строчку, которая выводит эту информацию в нашем PHP-файле. Здесь используется функция echo, которую также необходимо загуглить и прочитать, для чего она используется. Гуглить необходимо любую незнакомую для вас функцию. Здесь я сэкономлю вам время – функция эхо позволяет выводить текст на веб-страничке. Практически любой php-код работает незаметно для пользователя, PHP-код будет невиден если посетитель сайта откроет исходный код сайта в браузере. Все действия происходят исключительно на стороне сервера, а посетитель получает уже сформированный HTML-документ, к котором PHP-код отсутствует. Для того, чтобы добавить что-либо в код HTML-документа, который будет открыт в браузере посетителя сайта можно как раз воспользоваться функцией echo.
Теперь, нам необходимо вывести на странице заголовки и даты публикации новостей. Переходим в гугл и формируем наш поисковый запрос. Он должен включать все используемые технологии, в нашем случае – это язык программирования «PHP», драйвер «mysqli» и база данных «MySQL» ну сам вопрос. Копируем приведенный пример и начинаем с ним разбираться.
$sql = "SELECT * FROM Users";
if ($result = $conn -> query($sql)){
foreach($result as $row){
$userid = $row["id"];
$username = $row["name"];
$userage = $row["age"];
}
}
Во-первых, здесь мы видим SQL-запрос (селект звёздочка фром юзерс). Изучив ранее документацию и/или примеры по работе с MySQL в PHP, вы должны были уже наткнутся на подобные конструкции. Вся работа с MySQL строится на SQL-запросах к Базе Данных.
SQL – это язык запросов к базам данных. При разработке программного обеспечения или веб-сайтов, при работе с БД именно он будет использоваться для выполнения команд вне зависимости кто или что выполняет эти команды. Вы можете самостоятельно использовать данные комманды в коммандной строке MySQL, вы можете запускать эти комманды с помощью языков программирования – это может быть не только PHP, но и Python или NodeJS. Сами запросы при этом будут оставаться незименными.
Сам по себе язык запросов SQL довольно простой, интуитивно понятный, количество основных команд, которые наиболее часто используются можно пересчитать по пальцам, а понять значение этих запросов можно просто из примеров, которые были найдены на просторах Гугла.
Тем не менее, если вы чувствуете неуверенность или вас пугают эти конструкции – здесь я опять могу порекомендовать крайне небольшой курс от Code Academy, который позволит лучше разобраться в SQL-запросах.
Мы же разберем текущий запрос, который нашли в примере:
— команда SELECT заставляет базу данных вернуть строки таблицы
— далее идет значение параметра SELECT, т.е. перечисление столбцов таблицы, которые мы хотим получить, например, если нас интересуют только заголовки новостей из нашей таблицы мы можем написать titile. в примере же указана звездочка, которая означает, что база данных вернет все значения выбранных строк по всем столбцам
— в следующем параметр FROM необходимо указать имя таблицы, с которой мы сейчас работаем. Как не сложно догадаться, в одной базе данных может быть несколько таблиц
— при необходимости, далее мы можем указать условия в параметре WHERE, например WHERE `id` > 10, таким образом, база данных вернет только те новости, порядковый номер у которых больше 10
Сам же SQL запрос, который обрамлён в кавычки присваивается переменной с именем sql. В языке программирования PHP вам часто придётся работать с переменными. Переменные выделяются знаком доллара и хранят заданную разработчиком в них информацию. В данном случае – строку запроса к базе данных.
Переменные могут содержать строки, числа, булевые значения и другую информацию. Значения переменным задаются с помощью знака равно. А каждая комманда, в том числе задание значения переменной – должна быть окончена точкой с запятой.
В следующей строке мы видим конструкцию if, которая выполняет PHP-команды, находящиеся внутри фигурных скобок, которые идут после оператора if, в случае, если условие, обрамлённое круглыми скобками выполняется.
В круглых скобках мы видим команду query, которая выполняет SQL-запрос, находящийся в переменной sql для соединения, которое находится в переменной conn. При этом результат выполнения команды присваивается переменной result.
В случае, если SQL-запрос был успешно выполнен – запускается PHP-код, находящийся в фигурных скобках – рассмотрим теперь его.
Внутри фигурных скобок находится конструкция foreach, которая поочередно перебирает массив данных. Массивы – это упорядоченные наборы данных. Результатом выполнения нашего SQL-запроса на получение строк таблицы базы данных, как раз и является набор этих строк.
В скобках оператора foreach указывается правило, как обрабатывать массив, т.к. массив $result разбивается на набор элементов $row. И с каждой итерацией последовательного прохода по массиву – мы можем обратиться к текущему элементу этого массива с помощью переменной $row. Простыми словами – PHP-код, расположенный внутри конструкции foreach будет выполнен столько раз, сколько строк таблицы нам вернула база данных. При этом, на каждом этапе, пока осуществляется проход по массиву, мы можем работать со текущей строкой таблицы с помощью переменной $row.
Сама переменная $row также является массивом. Ключём массива является имя столбца, которое мы задавали, когда создавали таблицу базы данных. Поэтому, если мы захотим последовательно вывести все заголовки новостей, мы напишем
echo $row["title"];
Как я уже говорил ранее – все незнакомые команды, которые мы видим в примерах стоит загуглить, чтобы понять, что они означают и как работают. Тот же язык программирования PHP имеет огромное количество функций, запомнить которые попросту невозможно. А помимо того, что мы в своей работе будем использовать не только несколько языков программирования, языков разметки, языков запросов – мы будем использовать различные библиотеки, компоненты, модули, фреймворки и так далее. Поэтому гуглить все подряд нужно уже сейчас брать за правило.
В общем, при помощи Гугла и какой-то матери, мы разобрались с тем, что увидели в примере, что означают эти конструкции и по каким принципам они работают. Теперь, нам необходимо доработать данный код под себя.
Во-первых, нам необходимо заменить переменную conn, к которой хранится подключение к БД, в нашем случае она называется mysqli.
Далее, нам необходимо изменить PHP-код, находящийся внутри конструкции foreach. Вместо присваивания переменным значений из БД, нам необходимо выводить текст на сайте. Ранее я уже упомянул функцию echo – вот именно она нам сейчас и потребуется.
В итоге у нас получается следующий код:
$sql = "SELECT * FROM Users";
if ($result = $mysqli -> query($sql)){
foreach($result as $row){
echo $row["id"];
echo $row["date"];
echo $row["title"];
}
}
Сохраняем изменения и открываем файл в браузере.
Теперь, добавим к тексту, который мы выдёргиваем из БД HTML-разметку, чтобы всё выглядело более опрятно.
Теперь сделаем так, чтобы каждая новость открывалась на отдельной странице. Превратим заголовок в ссылку, которая будет содержать идентификатор новости
echo '' . $row["title"] . '';
Создадим новый PHP-файл с именем view.php в корневой директории и скопируем туда код из news.php
Сейчас мы не будем создавать отдельные файлы для каждой новости – веб-странички новостей будут генерироваться автоматически и здесь нам помогу GET-параметры. Адрес веб-странички может иметь так называемы GET-параметры. Это набор параметров и их значений, отделенный в адресной строке при помощи вопросительного знака от пути к файлу, к которому мы обращаемся. GET-параметров запросе может быть сразу несколько, каждый следующий GET-параметр должен быть отделен от предыдущего при помощи символа &.
Сейчас мы будем использовать GET-параметры как раз для передачи информации о том, какую новость мы хотим открыть.
В PHP доступ к GET-параметрам можно получить с помощью массива $_GET, где в качестве ключа мы укажем id. В этом случае, когда пользователь откроет страницу example.com/?id=1 мы сможем получить порядковый номер нужной новости с помощью следующей команды
$_GET["id"];
Проверим как это работает – добавим на страницу view.php эту команду, сохраним документ и откроем нашу веб-страничку в браузере указав id=1, а чтобы продемонстрировать что мы получили – используем функцию echo:
echo $_GET["id"];
Скачать исходные файлы урока №6