Простая CMS. Часть 1. Описание функционала. Создание БД и конфигураций

Учебный проект "Простой сайт (CMS) на PHP, SQL (mysql) + HTML/CSS -- Пример создания". Часть 1. Описание функционала. Создание БД и конфигураций.

Функционал нашей CMS

Клиентская часть:

  • Главная страница, на которой выводиться список последних 5 статей
  • Страница со списком всех статей
  • Страница просмотра отдельной статьи

Серверная часть:

  • Вход/выход для администратора
  • Список всех статей
  • Добавление новой статьи
  • Редактирование существующей статьи
  • Удаление существующей статьи

Каждая статья имеет собственный заголовок, резюме и дату публикации.

Шаг 1. Создаем базу данных

На первом шаге нужно создать базу данных MySQL для хранения содержания. Здесь можно узнать, как уcтановить MySQL. Также есть справочник по работе с MySQL. Итак, создаём базу данных:

  1. Запускаем программу клиент mysql
    • Открываем окно терминала и набираем команду
      mysql -u username -p
    • После запроса введите пароль для доступа к MySQL.
    • username - имя пользователя, который имеет полномочия для создания баз данных. В случае работы на локальном компьютере можно использовать root, хотя для безопасности всегда следует создавать пользователя с другим именем для решения задач администрирования.
  2. Создаем базу данных
    • После метки mysql> вводим:
      create database cms;

      И нажимаем Enter.

  3. Выходим из программы клиента mysql
    • После метки mysql> вводим:
      exit

      И нажимаем Enter.

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

Для работы с БД также можно воспользоваться графическим интерфейсом для администрирования баз данных, таким как HeidiSQL.

Шаг 2. Разворачиваем БД. Описание таблиц.

Наша простая CMS будет иметь две таблицы в базе данных: articles(содержит статьи) и categories(содержит категории, на которые подразделяются статьи).

Но начнём мы с создания одной таблицы. Откройте файл tables.sql на вашем сервере(находится в корневой директории проекта) и замените его содержимое на следующий код схемы таблицы:

DROP TABLE IF EXISTS articles;
	CREATE TABLE articles
	(
	  id  smallint unsigned NOT NULL auto_increment,
	  publicationDate date NOT NULL, # Когда статья опубликована
	  title  varchar(255) NOT NULL, # Полный заголовок статьи
	  summary text NOT NULL,  # Резюме статьи
	  content  mediumtext NOT NULL,  # HTML содержание статьи
	  PRIMARY KEY(id)
	);

Схема таблицы описывает типы данных, которые могут содержаться в таблице и информацию о ней. Код написан на SQL, языке для создания и манипулирования базами данных в MySQL (и во многих других системах). Разберем его подробнее:

  1. Создаем таблицу articles Выражение
    DROP TABLE IF EXISTS articles;

    удаляет любую существующую таблицу articles (вместе с данным - осторожно!). Мы выполняем данную операцию чтобы в базе не было двух таблиц с одинаковыми именами. Выражение

    CREATE TABLE articles ( );

    создает новую таблицу articles. Код, размещенный в скобках, определяет структуру данных в таблице.

  2. Определяем для каждой статьи уникальный ID Теперь можно определять структуру таблицы. Таблица состоит из набора полей (также их называют столбцами). Каждое поле содержит опредленный тип информации о статье. Сначала мы создаем поле id. Оно имеет тип smallint unsigned (без знаковое маленькое целое), то есть число от 0 до 65,535. Таким образом, наша CMS может содержать до 65,535 статей. Также для него определяется атрибут NOT NULL, который означает, что поле не может быть пустым (null). Данное свойство существенно облегчает труд разработчика. Добавляем атрибут auto_increment, который указывает MySQL назначать новое, уникальное значение для поля id при создании записи. Итак, первая статья будет иметь id 1, вторая - id 2, и так далее. Мы будем использовать уникальные значения как указатели на статью при выводе и редактировании в CMS.
  3. Добавляем поле publicationDate Следующая строка создает поле publicationDate, которое хранит дату публикации каждой статьи. Данное поле имеет тип date, соответствующий значениям дат.
  4. Добавляем поле title Теперь создаем поле title, в котором размещается заголовок. Оно имеет тип varchar(255), то есть может хранить строку длиной до 255 символов.
  5. Добавляем поля summary и content Последние два поля 2, summary и content, содержат резюме статьи (краткое описание материала) и HTML содержание соответственно. Резюме имеет тип text (то есть, может состоять из 65,535). А поле content имеет тип mediumtext (то есть может содержать до 16,777,215).
  6. Добавляем основной ключ Последняя строка в выражении CREATE TABLE определяет ключ для таблицы. Ключ также называют индексом, и он служит для быстрого поиска данных в таблице за счет некоторого увеличения требующегося пространства для хранения. Мы определяем поле id как PRIMARY KEY. Каждая таблица может содержать единственный PRIMARY KEY, так как данный ключ уникально определяет каждую запись в таблице. Кроме того, с помощью данного ключа MySQL очень быстро находит нужную запись.

Теперь, чтобы таблица появились на вашем компьютере, схему нужно загрузить в MySQL. Самый простой способ - развернуть файл tables.sql по аналогии с разворотом дампа базы данных.

Шаг 3. Создаем файл конфигурации

Теперь у нас есть база данных и мы готовы разрабатывать код PHP. Начнем с создания файла конфигурации для хранения различных установок для нашей CMS. Данный файл будет использоваться остальными скриптами нашей системы.

Обратимся к коду файла config.php. Разберем код подробно (далее смотрим в код файла config.php и читаем пояснения):

  1. Выводим ошибки в браузере Строка ini_set() устанавливает режим вывода сообщений об ошибках в браузере. Отличная опция для отладки кода, но на готовом проекте данную опцию надо отключить ( установить значение false) для безопасности ресурса. error_reporting определяет степнь отображения ошибок: аргумент E_ALL говорит системе о том, что мы хотим видеть уведомления абсолютно обо всех ошибках, предупреждениях и замечаниях.
  2. Устанавливаем временную зону Так как наша CMS будет использовать функцию PHP date(), нужно указать временную зону сервера для PHP (иначе PHP будет генерировать предупреждение).
  3. Устанавливаем детали доступа к базе данных Затем определяем константу DB_DSN, которая указывает PHP, где искать базу данных MySQL. Параметр dbname должен соответствовать имени базы данных нашей CMS (cms), charset - указывает на тип кодировки данных (используем UTF-8, т.к. наш сайт должен будет отображать русские буквы). Также мы будем хранить имя пользователя MySQL и пароль, которые используются для доступа к базе данных CMS в константах DB_USERNAME и DB_PASSWORD. Установите правильные значения в данных константах, которые соответствуют вашим настройкам.
  4. Устанавливаем пути Мы устанавливаем 2 пути в нашем файле конфигураций: CLASS_PATH, который указывает на место хранения файлов классов, и TEMPLATE_PATH, который указывает на место хранения шаблонов HTML. Оба пути указываются относительно верхнего каталога cms.
  5. Устанавливаем количество статей, выводимых на главной странице HOMEPAGE_NUM_ARTICLES управляет максимальным количеством заголовков статей, которые выводятся на главной странице. Мы установили 5, но можно легко увеличить или уменьшить значение.
  6. Устанавливаем имя и пароль администратора Константы ADMIN_USERNAME и ADMIN_PASSWORD содержат данные регистрации для администратора нашей CMS.
  7. Включаем класс Article Так как файл класса Article (мы его создадим позже) требуется во всех скриптах нашего приложения, добавим его здесь.
  8. Наверное вы заметили, что код конфигураций обёрнут в блок try{}. Конструкция try/catch{} обеспечивает перехват ошибок, возникающих при исполнении кода внутри try. Функция echo() выводит общее сообщение об ошибке, а error_log() записывает данные об ошибке в журнал веб сервера. Такая функция способствует улучшению безопасности системы, позволяет "поймать" (catch) "исключение" (exception, или ошибку) и обработать его.

Замечание о безопасности

В реальных проектах лучше каким-либо образом скрывать кодconfig.php, так как в файле содержатся имена и пароли. Обычно код PHP невозможно просмотреть в браузере, но иногда из-за неправильной конфигурации веб сервера код становится доступным. Также следует использовать хэширование или другие способы шифрования паролей и не хранить их в открытом виде.

В следующем уроке мы построим основной класс нашего приложения - Article.

Вернуться на Главную страницу

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

поправил оформление SQL кода

_____________
матфак вгу и остальная классика =)