Основы написания админ-панели. Основы написания админ-панели Выносим подключения к БД в отдельный файл

Как написать свою CMS на базе PHP и MySQL? Как сделать собственную административную панель (админку) на php?

Наверное, многие могли задаваться подобными вопросами, но сложности в изучении и скудный материал в сети Интернет вряд ли содействовал в этом. Скудный, спросите вы, несмотря на обилие копипастов? Да, отвечу я, ибо на десятках сайтах копирующих тупо копирующих статьи со сторонних источников, распространяются одни и те же ошибки, которые становятся серьезнейшим камнем преткновения для начинающих изучать PHP. Многочисленные высоколобые форумчане зачастую не могут разобраться в наипростейших кодах, что приходится самому разбираться во всем.

В очередной раз я нашел тому подтверждение, когда решил начать освоение языка PHP и работы с базами данных MySQL с создания простейшей админки и небольшого сайтика, дабы на реальном движке отточить свое мастерство. Каково же было мое удивление, когда ни один из приведенных в сети кодов не заработал. Мне понадобился целый день, чтобы самому решить те простейшие задачи, на которые я так и не нашел ответа в сети.

Итак, в этой статье я представляю работающий код простой админки и шаблона, позволяющего создавать и редактировать статьи, используя php.

Часть 1. Запись в таблицы базы данных MySQL

По сути своей CMS - это инструмент для записи в базу данных всей информации о сайте. Все это должно содержаться в таблицах, и у администратора сайта должен быть удобный способ для ввода информации в таблицы, ее изменения или удаления.

Для начала создадим с помощью phpMyAdmin базу данных, а в ней - таблицу pages с двумя полями title и content. Для этого войдите в раздел SQL на панели phpMyAdmin и выполните такой запрос:

CREATE TABLE "pages" ("title" varchar(100) NOT NULL default "", "content" text NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;

и phpMyAdmin построит вам эту таблицу.

Маленькое отступление:

если вы знакомы с базами данных хотя бы на уровне Microsoft Access, то вы помните, что каждое поле таблицы имеет ряд свойств. В данном случае мы присвоили полю content свойство text. Казалось бы, логично, ведь оно и предназначено для хранения текстов. Но следует помнить, что размер этого поля ограничен, поэтому, если вы хотите сохранить в нем текст "Войны и мира", то лучше определить его как longtext.

Чтобы управлять такой таблицей из админки, нам понадобится форма, состоящая из простого текстового поля (input type="text") для ввода заголовка, текстовой области (textarea) для ввода содержимого и кнопка "Отправить" (input type="submit").

Форма добавления страницы

Поместим эту форму в файл page.php

page.php

Моя первая CMS

Введите заголовок страницы Введите текст

Создадим файл config.php, который будет осуществлять подключение к базе данных.

config.php

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

"); exit(); } if (!@mysql_select_db($dbname, $dbcnx)) { echo("

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

"); exit(); } ?>

Теперь, когда у нас появилось подключение к базе данных и скрипт для ввода в нее нужной информации, остается организовать отправку туда содержимого текстового поля с именем my_title и текстовой области my_text. С этой целью мы определили в форме метод POST для передачи данных файлу page.php -

.

Когда администратор внесет в поля формы информацию и нажмет кнопку "Отправить", этот метод присвоит переменной $_POST["my_title"] значение текстового поля my_title, а переменной $_POST["my_text"] - значение текстовой области my_text.

Чтобы удостовериться в этом, добавим небольшой код в начало файла page.php:

".$_POST["my_text"];?>

Запустим файл page.php. Если в программе нет ошибок, то вы увидите ваш заголовок и текст в окне броузера.

Прекрасно! Осталось только организовать запись этой информации в нашу базу данных. Для этого нам придется обратиться к языку запросов SQL, а точнее - к MySQL.

Чтобы записать новые данные в таблицу базы данных, которая благодаря функции

$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);

уже подключена к работе, нам следует использовать оператор INSERT языка MySQL. Вставьте этот фрагмент в файл page.php вместо кода вывода на печать:

If ($send) $sql = mysql_query("INSERT into pages (title, content) values ("".$_POST["my_title"]."", "".$_POST["my_text"]."");");

То есть, если от кнопки "Отправить" методом POST был передан $send (см. name этой кнопки!), то должен выполниться данный запрос (функция mysql_query), и в таблицу базы данных будет записано содержимое полей формы.

Запись эта поначалу кажется трудной для чтения, и в ней можно просто запутаться во многочисленных простых и двойных кавычках. Поэтому рассмотрим ее в "чистом виде".

Параметром функции mysql_query(); является сам SQL-запрос, который можно представить в виде:

INSERT into pages (title, content) values ("значение_переменной_1", "значение_переменной_2");

Так оно, вроде, понятнее...

Теперь откройте phpMyAdmin и убедитесь, что записи внесены в поля таблицы. Но это всего лишь полдела. Нам нужно научиться "вытаскивать" из таблиц необходимые данные, чтобы работать с ними в админке, а главное - показывать их на сайте.

В окончательном виде файл page.php должен выглядеть так:

Моя первая CMS

Введите заголовок страницы Введите текст

Об этом - в следующей части.

Часть 2. Чтение из таблиц базы данных MySQL

Создадим в нашей админке перечень всех заголовков страниц, хранящихся в таблице pages. И организуем работу этого списка так, чтобы пользователь, щелкнув мышкой, получил доступ к содержимому страницы.

Для чтения записей из таблицы воспользуемся следующей конструкцией:

$sql = mysql_query("SELECT*FROM pages"); while($record = mysql_fetch_array($sql)) { $title = $record["title"]; }

Если в таблице находятся уже несколько записей, то в "чистом" виде конструкция выдаст нам только последнюю из них, ведь значение переменной $title все время обновляются в цикле while. Но мы применим маленькую хитрость. В том же цикле будем выводить их на экран все записи, одну за другой.

Для этого нарисуем таблицу, и часть ее поместим внутрь цикла:

"; } ?>
".$record["title"]."

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

Рядом с ячейкой, куда мы поместили заголовки страниц находится еще одная ячейка. Я просто написал в ней слово Редактировать, а можно было какую-нибудь красивую пиктограммку поставить - неважно. Важно другое: эта запись (или картинка) должна привести администратора в раздел админки, где находится редактор текстов.

Теперь настала пора воспользоваться самым примитивным "редактором" - текстовой областью формы.

Для этого создадим файл editor.php со следующим кодом.

editor.php

"; } ?>
".$record["title"]." ".$record["content"]." Удалить

Разберем основные конструкции этого скрипта.

В каждой из рядов верхней таблицы появляется заголовок страницы, прочитанный из базы данных. Справа от него, в соседней клетке - слово Редактировать. Оно залинковано на ту же страницу editor.php и передает ей значение переменной $page_title, которое равно заголовку страницы в этом ряду (я выделил этот фрагмент кода красным цветом):

Print "".$record["title"]."";

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

Следующий фрагмент кода ищет в базе данных таблицу pages, а в ней - значение поля content для которого поле title совпадает со значением переменной $page_title.

Найдя такое поле, он передает его содержимое переменной $content, которая и распечатывает его в текстовой области.

Теперь у нас появляется возможность редактировать этот текст. А вот как вернуть исправленный вариант этого текста в базу данных - об этом в следующей части.

Часть 3. Редактирование записей из таблиц базы данных MySQL

Добавим в начало файла editor.php следующие фрагменты кода:

А в самом конце этого файла допишем:

Этот прием называется сессии. Сессия понадобится для того, чтобы в переменной запомнить страницу, которую мы редактируем. Хотя мы и нажали на кнопку Редактировать, и получили значение переменной $page_title (заголовок редактируемой страницы), после того, как мы внесем изменения и нажмем на кнопку Сохранить, страница editor.php перезагрузится, и значение $page_title будет потеряно. Вот поэтому мы и сохраним его в $_SESSION["id"].

А когда форма отправит методом POST на перезагруженную страницу editor.php значение переменной $text_edit (такое имя мы дали текстовой области), то нам удасться запустить следующий код:

If (isset($_POST["save"])) $my_text = strval($_POST["text_edit"]); $sql =mysql_query ("UPDATE pages SET content = "".$my_text."" WHERE title="".$_SESSION["id"]."";");

Надеюсь, вы поняли, зачем нам понадобилась переменная $_SESSION["id"].

Полный скрипт файла editor.php будет выглядеть так:

"; } ?>
".$record["title"]." ".$record["content"]."

Часть 4. Удаление записей из таблиц базы данных MySQL

Добавим еще одну ячейку к таблице файла editor.php:

Удалить ";

Совершенно неважно, какое значение мы передадим переменной $delete, можете написать &delete=1 или &delete=abcd, а важно то, что теперь можно написать условие, с помощью которого мы удалим выбранную запись:

If($delete) $sql =mysql_query ("DELETE FROM pages WHERE title="".$_SESSION["id"]."";");

Внимание! Однако данный код у меня ни в какую не хотел работать. Поэтому мне пришлось немного изменить код. В editor.php:

  1. Я убрал следующую конструкцию: Удалить

    чтобы нечаянно не удалить нужную страницу;

  2. Добавил функцию удаления страницы в случае, если нажата кнопка "delete"

if (isset($_POST["delete"]))

В окончательном виде наш файл editor.php выглядит так:

header("Content-Type: text/html; charset=utf-8");
session_start();
include ("config.php");
?>



if(isset($_GET["page_title"]))
$page_title=$_GET["page_title"];
$sql = mysql_query("SELECT*FROM pages");

{
print "


";
}
?>
".$record["title"]." ".$record["content"]."

$sql = mysql_query("select * FROM pages where title="".$page_title."";");
while($record = mysql_fetch_array($sql))
{
$content=$record["content"];
}
if (isset($_POST["save"]))
$my_text = strval($_POST["text_edit"]);
$sql =mysql_query ("UPDATE pages SET content = "".$my_text."" WHERE title="".$_SESSION["id"]."";");
if (isset($_POST["delete"]))
$title = strval($_SESSION["id"]);
$sql =mysql_query ("DELETE FROM pages WHERE title="".$title."";");
?>













$_SESSION["id"]= $page_title;
?>

Вот, пожалуй, и все, что я хотел рассказать о принципах работы админки. Конечно же, в настоящей CMS все отдельные модули (а у нас их пока три: page.php, editor.php и служебный файл config.php) работают под управлением главного файла index.php, который единоразово подключает все модули к базе данных и по желанию пользователя может присоединять к себе модуль создания страниц, модуль редактирования, а также массу других модулей (модуль меню сайта, модуль управления гостевой книгой, баннерами и т.п.). Важно только понимать, что любые модули, любые действия в админке основаны на четырех главных операторах языка SQL:

  • INSERT - вставить запись в базу данных;
  • SELECT - выбрать записи из базы данных;
  • UPDATE - изменить запись;
  • DELETE - удалить запись.

Так что ничего сверхсложного нет в том, чтобы написать свою собственную админку. Любые CMS, даже такие гиганты как Joomla, работают на одном и том же принципе.

А уж подключить к админке сам сайт - это вообще проще простого, после того, как вы написали скрипт самой админки.

Успехов вам!

По материалам из разных источников с собственными исправлениями.

Админ-панель сайта - это часть движка, предназначенная для автоматического добавления контента на сайт. На ней есть поле, куда Вы пишете текст статьи. Админ панель содержит скрипты, которые создают новые страницы сайта либо добавляют статью в БД, в зависимости от структуры сайта. В меню добавляется ссылка на статью. Обычно админ-панель даёт возможность добавлять не только текст, но и другой контент. Создавая движок сайта, Вы сами решаете, делать админ-панель или добавлять статьи самостоятельно.

Админ-панель располагается на отдельной странице, которая имеет примерно такой адрес:

http://mysite.ru/adminpanel.php

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

Авторизация администратора

Авторизацию администратора можно сделать двумя способами. Если администраторов несколько, то в таблицу с пользователями можно добавить поле, в котором указывать, что пользователь является администратором. А можно в скрипте авторизации просто передавать права администратора конкретному пользователю. Мы используем второй вариант. Назовём страницу авторизации avtadministrator.html. Вот её код:

avtadministrator.html:

Форма отправляет данные в файл adminavt.php. Это скрипт авторизации. Его код такой:

adminavt.php:

3
4
5
6
7
8
9
10
11
12
13

$login = $_POST["login"]; $pas = $_POST["password"]; if ($login == "Viktor" && $pas == 1122) { session_start(); $_SESSION["admin"] = true; $script = "adminpanel.php"; } else $script = "avtadministrator.html"; header("Location: $script");

Комментарии:

3, 4 - получаем логин и пароль из формы

5 - если они правильные

8 - записываем в сессию, что это администратор

9 - страница, на которую нужно перейти - adminpanel.php

11 - если логин или пароль неправильные

13 - переход на нужную страницу

Создание админ-панели

Админ панель выглядит примерно так.

adminpanel.php:

В начале идёт PHP скрипт, в котором проверяется, есть ли в сессии переменная admin . Если нет, значит в админ-панель входит пользователь, не являющийся администратором. Тогда происходит переход на страницу авторизации. Админ-панель представляет собой форму, в которую администратор вводит новую статью. Название статьи может быть длинным и ссылка на неё в меню сайта может отличаться от названия. Поэтому в форме есть поле для текста ссылки.

Перед добавлением статьи в базу данных нужно поместить текст статьи в теги

Сделаем это на стороне клиента, чтобы не расходовать ресурсы сервера. Добавим на страницу скрипт, в котором перед текстом статьи поставим тег

А после текста

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

И открыть новый. Вот код скрипта:

JavaScript:

24
25
26
27
28
29
30

var form = document.querySelector("form"); form.onsubmit = function () { var text = form.text; text.value = "

" + text.value + "

"; text.value = text.value.replace(/\n/g, "

"); };

Как мне кажется, нам необходимо запаролить лишь один файл, а именно index.php , так как лишь в нем производится подключение к базе данных. Если вызвать, отдельно, кусочки кода, которые мы подключаем из папки moduls, ничего не произойдет, так как все они требуют подключения к БД. Так что, с помощью этих кусочков, нельзя навредить блогу! Значит паролить их вовсе не обязательно.

Цель

  • Вынесем скрипт подключения к БД в отдельный файл, и подключим его к index.php с помощью include
  • Создадим новую таблицу в БД где будем хранить логин и пароль администратора
  • Необходимо написать скрипт, который не даст нам зайти на главную страницу админки без авторизации, и перебросит нас на форму где администратору необходимо ввести логин и пароль
  • Необходимо создать новый php файл, и разместить в нем форму и код авторизации
  • Создадим шаблон формы
  • Напишем скрипт выхода администратора из админ панели, и разместим ссылку на этот скрипт на главной страницы админки

Выносим подключения к БД в отдельный файл

Так как мы будем использовать этот подключение к БД уже в двух файлах (в index.php и login.php) то будет разумнее вынести скрипт подключения в отдельный файл. Так же мы сейчас создадим в этом скрипте переменную в которой будем хранить адрес нашего блога (в виде http://адрес_блога.ru). Сначала вынесем скрипт, потом я объясню зачем нам нужна переменная с адресом.

$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));

$server_root = "http://yoururl.ru/";
?>

Сохраните этот кусочек кода в отдельном файле (я этот файл назвал db.php и поместил в папку с модулями) После удалите этот скрипт из файла index.php и вместо него вставьте следующий код


include("moduls/db.php");
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

Теперь поясню три новых строчки в файле db.php . Строчки

if(isset($_GET["server_root"])){$server_root = $_GET["server_root"];unset($server_root);}
if(isset($_POST["server_root"])){$server_root = $_POST["server_root"];unset($server_root);}

позволят нам удалить переменную если ее кто-то попытается создать GET или POST запросом. Сама же переменная с адресом нужна нам для того, что бы определить, идет ли авторизация с нашего блога, а не с постороннего сервера. Такая защита может уберечь наш блог от взлома, ну если быть точнее, то помогает нам, администраторам и программистам, в это верить

Создадим новую таблицу в БД

Для начала хочу сказать следующее: в БД мы будем хранить зашифрованный пароль с помощью функции php md5(). Админский логин и пароль мы пропишем в ручную. Я поставлю следующие данные:

Логин: admin

Пароль: 123456

Зашифрованный пароль будет выглядеть так:

То есть если пароль 123456 пропустить через функцию md5 то получится вот такой зашифрованный пароль .

Приступим. Заходим в phpMyAdmin и создаем новую таблицу:

И вставляем в ручную одну строчку в таблицу

Скрипт проверки авторизации

Сама авторизация представляет собой создание глобальной переменной $_SESSION. То есть если эта глобальная переменная есть, то пользователь авторизован, стало быть скрипт должен проверить, создана ли она (глобальная переменная). Если да то ничего не делать, если же нет, то перекинуть на файл login.php.

Перед тем как вызывать глобальную переменную $_SESSION, необходимо стартовать сессию, а именно прописать session_start(); Если этого не сделать, то глобальная переменная $_SESSION просто не будет работать!

В общем вот скрипт который необходимо вставить сразу после подключения к БД в index.php

Session_start();
$logSESS = $_SESSION["$logSESS"];
if(!isset($logSESS))
{
header("location: login.php");
exit;
}
//СКРИПТ ПРОВЕРКИ АВТОРИЗАЦИИ

Так как значение глобальной переменной $_SESSION переносится в переменную $logSESS, то нам необходимо пресечь попытку создать эту переменную ($logSESS) иными способами (я имею введу предотвратить создание этой переменной с помощью GET и POST запроса). Именно эту функцию выполняют первые две строчки скрипта.

Шаблон формы

Давайте для начала создадим шаблон. Шаблон представляет собой обычную форму с двумя текстовыми полями














Тут нет ничего сложного. Мы не раз создавали подобные шаблоны. Назовем этот шаблон login.html и поместим в паку с шаблонами

Файл авторизации

Давайте для начала создадим функцию которая нам выдаст форму авторизации. Создаем новый файл, называем его login.php и помещаем его в папку admin

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
include("moduls/db.php");
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

function form_author()//функция подключения формы
{
$sm_read = file("templates/login.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его

Return $sm_read;//выводим результат
}

$txt = form_author();//вызываем функцию подключения формы

include("templates/index.html");//главный шаблон
?>

В этом файле мы подключаемся к БД (в самом вверху). Далее я оставил место для скрипта авторизации (что бы было проще объяснить куда вставить скрипт который я выложу ниже) После мы объявляем мета теги, и создаем нашу функцию.

Функция сама по себе очень не сложная, тут производится подключение шаблона, и не более того. Предпоследняя строчка сохраняет результат функции в переменную $txt. Ну и последняя строчка подключает главный шаблон.

Сейчас если вы попытаетесь проникнуть в админскую панель блога, но Вас перекинет на вот такую страницу

//АВТОРИЗАЦИЯ
//уничтожаем переменную с логином и паролем которые были созданы путем ввода их в строку
if (isset ($_GET["loginDB"])) {$loginDB = $_GET["loginDB"];unset($loginDB);}
if (isset ($_GET["passDB"])) {$passDB = $_GET["passDB"];unset($passDB);}

//заносим в отдельные переменные логин и пароль присланных с помощью post запроса
if (isset ($_POST["loginDB"])) {$loginDB = $_POST["loginDB"];}
if (isset ($_POST["passDB"])) {$passDB = $_POST["passDB"];}

if(isset($loginDB) AND isset($passDB))//если существуют логин и пароль
{
if(preg_match("/^+$/s",$loginDB) AND preg_match("/^+$/s",$passDB))//проверяем их на корректность ввода с помощью регулярных выражений
{
$prov = getenv("HTTP_REFERER");//определяем страницу с который пришел запрос
$prov = str_replace("www.","",$prov);//удаляем www если есть
preg_match("/(http\:\/\/[-a-z0-9_.]+\/)/",$prov,$prov_pm);//чистим адресс от лишнего, нам необходимо добиться ссылки вот такого вида http://xxxx.ru
$prov = $prov_pm;//заносим чистый адрес в отдельную переменную
$server_root = str_replace("www.","",$server_root);//удаляем www если есть

If($server_root == $prov)//если адрес нашего блога и адрес страницы с которой был прислан зарос равны
{
$passDB = md5($passDB);//шифруем введенный пароль

$resultlp = mysql_query("SELECT login,pass FROM user WHERE login="$loginDB"");//выводим из базы данных логин и пароль
$log_and_pass = mysql_fetch_array($resultlp);

If($log_and_pass != "")//если был выведен результат из БД
{
if($loginDB == $log_and_pass AND $passDB == $log_and_pass)//если введенная информация совпадает с информацией из БД
{
$_SESSION["$logSESS"] = $log_and_pass;//создаем глобальную переменную
header("location: index.php");//переносим пользователя на главную страницу
exit;
}
else//если введеная инфо не совпадает с инфо из БД
{
exit;
}
}
else//если не найдено такого юзера в БД
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
else//если запрос был послан с другого адреса
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
else//если введены не корректный логин и пароль
{
header("location: login.php");//переносим на форму авторизации
exit;
}
}
//АВТОРИЗАЦИЯ

Этот кусочек кода вставляется в файле login.php вместо вот этих строк

Как работает скрипт? Для начала уничтожает переменные, с логином и паролем, созданные методом GET (если такие имеются). После идет проверка на корректность логина и пароля с помощью регулярных выражений .

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

http://yoururl.ru/login.php

а после формирование, вот таким:

http://yoururl.ru/

Этот адрес сравнивается с адресом из переменной $server_root которую мы объявили в подключение к БД (файл db.php)

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

Теперь если ввести в окно формы

логин - admin

пароль - 123456

То Вас перенесет в админ панель. Если же вы введете неправильный логин или пароль, Вас перекинет обратно к форме.

Кнопка "Выход"

Сейчас нам придется править главный шаблон админ панели, мы вставим в него ссылку на скрипт выхода, поэтому мы еще заодно пропишем в шаблон ссылку на главную страницу админ панели. Добьемся того, что бы при щелчке по логотипу в админ панели, нас переносило на главную страницу. (Это конечно не обязательно)

Вот новый кусочек кода который я вставил, вместо старого, в шаблон index.html



Теперь создадим новый файл, назовем его exit.php и поместим его в папку admin . Вот код файла

session_start();//стартуем сессию
unset ($_SESSION["$logSESS"]);//удаляем зарегистрированную глобальную переменную
session_destroy();//уничтожаем сессию
header("location: ../");//перебрасываем на главную страницу пользовательской части блога
exit;
?>

Тут каждая строчка имеет комментарий, так, что разберетесь

Заключение

Ну чтож, на этом я заканчиваю разработку простейшей CMS на php. Если это первый пост который Вы читаете на этом блоге, то вот список всех статей посвященные разработки блога с нуля. Совсем скоро открою рубрику "Улучшения" и продолжу мучить наш проект Так что подпишитесь на новости , и ждите новые посты!

Если у Вас возникли какие либо вопросы, то не стесняйтесь, задавайте их, буду рад ответить (если конечно в силах ответить на Ваш вопрос).

Удачи Вам, на сегодня у меня все!

В прошлой статье мы с Вами разбирали . Однако, очень часто приходится управлять сайтом: добавлять новые материалы, управлять пользователями, голосованиями. Безусловно, это можно делать через PHPMyAdmin , но это весьма неудобно, поэтому хорошим решением будет - создать Admin-панель для сайта . И как это сделать, Вы узнаете в этой статье.

Итак, давайте вновь распишу порядок действий, которые необходимо выполнить:

  1. Сверстайте все страницы сайта . В принципе, Вы вообще можете обойтись без дизайна, но элементарная структура должна быть. То есть табличные данные должны быть в таблице, а не сплошным текстом.
  2. Примите решение о том, какие данные Вы хотите видеть в Admin-панели . Например, наверняка Вам потребуется видеть пользователей Вашего сайта, Ваши статьи, может быть, какие-нибудь опросы.
  3. Создайте класс для управления Admin-панелью . Здесь должны быть созданы методы, которые позволяют делать выборку из самых разных таблиц, а также добавлять и редактировать записи в них. И сделать подобные методы нужно для всех таблиц, с которыми Вы хотите работать в Admin-панели (Вы уже должны были выбрать это в предыдущем пункте). Например, самый простой пример с пользователями. Минимальный набор требуемых методов: выборка всех пользователей , добавление нового пользователя , изменение пользователя . Безусловно, все эти задачи должны быть Вами уже реализованы при создании движка для сайта, поэтому здесь Вам надо будет только обратиться к старым классам и, возможно, как-то изменить данные конкретно для Admin-панели .
  4. Разбейте Ваш шаблон сайта на отдельные части и скопируйте их в отдельные файлы с расширением tpl . Также поставьте элементы шаблона, например, так: "Пользователь {username} зарегистрировался {regdate} ". Это всего лишь пример, а данные, вообще говоря, удобнее выводить в таблицах.
  5. Создайте класс, который будет заниматься подстановкой вместо элементов шаблона соответствующие данные.
  6. Собирайте по кирпичикам все страницы Admin-панели Вашего сайта с помощью созданного в предыдущем пункте класса.
  7. При желании можете сделать дизайн , хотя, безусловно, это исключительно для Вас и других администраторов.

Как видите, последние 4 пункта идентичны тем, которые Вы выполняли при создании движка. Здесь объём работы будет значительно меньше, поэтому, думаю, Вы с этим без проблем справитесь.

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

Пример создания Admin-панели Вы найдёте в этом обучающем курсе:

Задача построения системы управления содержанием (CMS) может привести в замешательство новичка разработчика PHP. Но не так страшен черт, как его малюют! В данной серии уроков мы построим простую, но полностью работоспособную систему с нуля.

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

Вы можете посмотреть работу готового приложения на странице демонстрации (с целью безопасности включен режим "только чтение", так что добавлять, изменять и удалять статьи не получится). Также можно скачать полный код PHP нашей меленькой CMS с переведенными комментариями.

Примечание: для изучения материалов уроков потребуется веб сервер Apache с установленным модулем PHP и сервер MySQL. Для работы на локальном компьютере можно воспользоваться одним из инструментов веб разработчика: XAMPP (на английском языке), Denwer , Open server или другим.

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

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

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