Интернет

Простая админка на php. Основы написания админ-панели

Простая админка на php. Основы написания админ-панели

Как написать свою 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

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

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

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

Запустим файл 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. Но мы применим маленькую хитрость. В том же цикле будем выводить их на экран все записи, одну за другой.

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

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

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

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

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

editor.php

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

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

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

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

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

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

Часть 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 будет выглядеть так:

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

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

Удалить ";

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

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

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

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

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

  • Добавил функцию удаления страницы в случае, если нажата кнопка "delete"
  • if (isset($_POST["delete"]))

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




















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

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

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

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

    Успехов вам!

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

    Основы написания админ-панели

    Представим такую ситуацию. После нескольких дней/недель/месяцев упорного кодинга Вы написали скрипт. Скрипт получился очень хорошим, да вот только одна беда - управлять данными можно только с помощью phpMyAdmin или других менеджеров баз данных (если скрипт написан на MySQL) или "ручным" редактированием файлов, что также сопряжено с определёнными проблемами - файл надо скачать, отредактировать, "залить" на хостинг... Гораздо проще, когда у скрипта есть администраторская панель (сокращённо "Админ-панель") с помощью которой можно управлять данными. Сегодня мы научимся основам написания админ-панели.

    Первое, что нам надо сделать - это создать отдельную подпапку. Назовём её дефолтно - "admin". Наша админ-панель в будущем будет располагаться по адресу http://ваш_сайт.ru/папка_где_лежит_скрипт/admin/ . Вообще, называть папку именно "admin" вовсе не обязательно, можно назвать её как угодно.

    Второе, что нам надо сделать - это создать файл конфигурации админки. Для этого создаём в папке с дефолтным названием "admin" файл с не менее дефолтным именем - "config.php". Вписываем в него следующее содержимое:

    Нажмите, чтобы раскрыть...

    Значения переменных adminlogin и adminpassw заменяем логином и паролем - реквизитами доступа в будущую админку. В вышеуказанном примере логин - "admin", пароль - "12345".

    Теперь создаём файл входа в админку. Создаём новый файл в папке admin под названием index.php, и заполняем его кодом следующего содержания:

    Административная панель

    Вход выполнен
    Административная панель #wrap { width: 100%; height: 100%; } .loginbox1 { width: 300px; padding: 4px; border: 1px solid #777; background-color: #777; color: white; font-weight: bold; } .loginbox2 { width: 300px; padding: 4px; border: 1px solid #777; color: #777; }
    Вход выполнен
    Перейти к административной панели

    Уфф... Большой код вышел Так-с, код надо немного разобрать. Для входа мы используем сессии. Переменные сессии сохраняются в файлах на сервере. Если введённые логин и пароль совпадают с логином и паролем, указанными в конфигурации, то задается значение true (правда) переменной $_SESSION["admin"] для обозначения администратора.

    Теперь нужно написать скрипт выхода из админки. Скрипт проверяет, выполнен ли вход и, если вход выполнен, производится выход. Создаём файл admin_logout.php и впихиваем в него следующий код:

    Административная панель #wrap { width: 100%; height: 100%; } .loginbox1 { width: 300px; padding: 4px; border: 1px solid #777; background-color: #777; color: white; font-weight: bold; } .loginbox2 { width: 300px; padding: 4px; border: 1px solid #777; color: #777; }

    Выход выполнен
    Вернуться на главную страницу скрипта

    У нас уже есть возможность зайти в админку и выйти из неё, но самой админки то и нет Займёмся её созданием.

    Для начала создаём файл admin_main.php, и начинаем его следующим кодом:

    Нажмите, чтобы раскрыть...

    А после этого уже пишем, что хотим. В этом файле предполагаются ссылки на все основные функции админки (их нужно "выносить" в отдельные файлы), а также ссылка на выход из админки (на файл logout.php).

    Все файлы админки также начинаем с этой же конструкции. На всякий случай повотрю её:

    Нажмите, чтобы раскрыть...

    И после неё уже как-нибудь организовываем управление данными.

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

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

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

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

    Так как мы будем использовать этот подключение к БД уже в двух файлах (в index.php и login.php) то будет разумнее вынести скрипт подключения в отдельный файл. Так же мы сейчас создадим в этом скрипте переменную в которой будем хранить адрес нашего блога (в виде http://адрес_блога.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

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

    Функция сама по себе очень не сложная, тут производится подключение шаблона, и не более того. Предпоследняя строчка сохраняет результат функции в переменную $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 . Вот код файла

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

    Заключение

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

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

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

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

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

    http://mysite.ru/adminpanel.php

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

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

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

    avtadministrator.html:

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

    adminavt.php:



    Copyright © 2024. Портал о компьютерной технике