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

Статус
В этой теме нельзя размещать новые ответы.

g-prime

איך בין גאָט
Регистрация
11 Авг 2008
Сообщения
759
Реакции
1.081
Основы написания админ-панели
Автор: Unrecogn!seD

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

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

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

<?php
$adminlogin = 'admin';
$adminpassw = '12345';
?>

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

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

Код:
<?php
session_start();
 
if (!empty($_SESSION['admin']))
{
if ($_SESSION['admin'])
{
?>
<html>
<head>
<title>Административная панель</title>
<style type="text/css">
#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;
}
</style>
</head>
<body>
<center>
<table cellpadding="0" cellspacing="0" id="wrap"><tr><td align="center">
<table cellpadding="0" cellspacing="0">
<tr><td class="loginbox1" align="center">Вход выполнен</td></tr>
<tr><td class="loginbox2" align="center"><a href="admin_main.php">Перейти к административной панели</a></td></tr>
</table>
</td></tr></table>
</center>
</body>
</html>
<?
exit;
}
}
 
$_SESSION['admin'] = false;
include ('config.php');
 
function not_logged_in()
{
echo '<html>
<head>
<title>Административная панель</title>
<style type="text/css">
#wrap
{
width: 100%;
height: 100%;
}
#wraptd
{
padding: 20px;
}
.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;
}
.loginbox2 input
{
width: 200px;
margin: 3px 0;
border-color: #888;
color: #777;
}
</style>
</head>
<body>
<center>
<table cellpadding="0" cellspacing="0" id="wrap"><tr><td align="center" id="wraptd">
<table cellpadding="0" cellspacing="0">
<tr><td class="loginbox1" align="center">Вход в административную панель</td></tr>
<tr><td class="loginbox2" align="center">
<form action="index.php" method="post">
<input type="text" name="login" value="Логин"><br>
<input type="text" name="password" value="Пароль"><br>
<input type="submit" value="Войти">
</form>
</td></tr>
</table>
</td></tr></table>
</center>
</body>
</html>';
exit;
}
 
if(!$_POST) not_logged_in();
if(!$_POST['login']) not_logged_in();
if(!$_POST['password']) not_logged_in();
if($_POST['login'] != $adminlogin) not_logged_in();
if($_POST['password'] != $adminpassw) not_logged_in();
 
$_SESSION['admin'] = true;
?>
<html>
<head>
<title>Административная панель</title>
<style type="text/css">
#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;
}
</style>
</head>
<body>
<center>
<table cellpadding="0" cellspacing="0" id="wrap"><tr><td align="center">
<table cellpadding="0" cellspacing="0">
<tr><td class="loginbox1" align="center">Вход выполнен</td></tr>
<tr><td class="loginbox2" align="center"><a href="admin_main.php">Перейти к административной панели</a></td></tr>
</table>
</td></tr></table>
</center>
</body>
 
</html>

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

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

Код:
<?php
session_start();
if(!$_SESSION['admin']) die ("Доступ закрыт");
session_destroy();
?>
<html>
<head>
<title>Административная панель</title>
<style type="text/css">
#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;
}
</style>
</head>
<body>
<center>
<table cellpadding="0" cellspacing="0" id="wrap"><tr><td align="center">
<table cellpadding="0" cellspacing="0">
<tr><td class="loginbox1" align="center">Выход выполнен</td></tr>
<tr><td class="loginbox2" align="center"><a href="../">Вернуться на главную страницу скрипта</a></td></tr>
</table>
</td></tr></table>
</center>
</body>
</html>

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

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

<?php
session_start();
if(!$_SESSION['admin']) die ("Доступ закрыт");
?>

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

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

<?php
session_start();
if(!$_SESSION['admin']) die ("Доступ закрыт");
?>

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

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

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

ЗЫ для кода есть bb-тэги (code, html, php), чтоб не получались тряпки в несколько экранов.
 
согласен, не самая лучшая реализация, но для начального уровня - пойдет
 
Лучше логин и пароль от админки хранить в БД, так безопаснее! И пароль в мд5, я бы еще сделал с солью.
 
какой кошмар :)

PHP:
if (!empty($_SESSION['admin']))
{
if ($_SESSION['admin'])
{

Зачем у вас двойная проверка одного и того же условия?

нужно все переписывать и перед написанием админки, лучше почитать получше про алгоритмику авторизации, иначе защита у вашей админки будет... :)
 
  • Заблокирован
  • #6
чесно говоря удивлен что в разделе ПРО появился такой топик, его в раздел для начинающих и то если потянет... для начинающего самое оно хотя они это и так должны знать из книжек
 
Вобще то что представлено выше на готовые решения вобще не тянет, место ему в разделе для начинающий.
У меня админка к номармальному скрипту занимает 400кб кода, правда большой функциона и куча настроек.
А самая большая проблема при написании админок у меня это их дизайн, хотя в последнее время препарировал жумлу и перекроил ее шаблон админки так как всегда использую один шаблонизатор xTemplate и модульность админки, сейчас ее создание больше 5-8 часов не отнимает.
 
Бред. Это как-раз пример как НЕ надо делать админ-панель.
По крайней мере эта конструкция должна быть "модульной".
 
Модераторы удалите этот бред,
g-prime начинай изучать чужие исходники.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху