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

Тема в разделе "FAQ", создана пользователем g-prime, 9 фев 2009.

Статус темы:
Закрыта.
  1. g-prime

    g-prime איך בין גאָט

    Регистр.:
    11 авг 2008
    Сообщения:
    779
    Симпатии:
    1.131
    Основы написания админ-панели
    Автор: Unrecogn!seD

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

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

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

    Значения переменных 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, и начинаем его следующим кодом:

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

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

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

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

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

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Яркий пример того, как делать не надо :D

    ЗЫ для кода есть bb-тэги (code, html, php), чтоб не получались тряпки в несколько экранов.
     
    ap0stal нравится это.
  3. El_Magnifico

    El_Magnifico Команданте

    Регистр.:
    1 сен 2006
    Сообщения:
    653
    Симпатии:
    487
    согласен, не самая лучшая реализация, но для начального уровня - пойдет
     
  4. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    Лучше логин и пароль от админки хранить в БД, так безопаснее! И пароль в мд5, я бы еще сделал с солью.
     
  5. Anu

    Anu Постоялец

    Регистр.:
    19 окт 2007
    Сообщения:
    136
    Симпатии:
    13
    какой кошмар :)

    PHP:
    if (!empty($_SESSION['admin']))
    {
    if (
    $_SESSION['admin'])
    {
    Зачем у вас двойная проверка одного и того же условия?

    нужно все переписывать и перед написанием админки, лучше почитать получше про алгоритмику авторизации, иначе защита у вашей админки будет... :)
     
    ap0stal нравится это.
  6. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    чесно говоря удивлен что в разделе ПРО появился такой топик, его в раздел для начинающих и то если потянет... для начинающего самое оно хотя они это и так должны знать из книжек
     
  7. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    А можно ссылку увидеть на материал? Интересно почитать.
     
  8. XeonN

    XeonN

    Регистр.:
    13 ноя 2006
    Сообщения:
    369
    Симпатии:
    150
    Вобще то что представлено выше на готовые решения вобще не тянет, место ему в разделе для начинающий.
    У меня админка к номармальному скрипту занимает 400кб кода, правда большой функциона и куча настроек.
    А самая большая проблема при написании админок у меня это их дизайн, хотя в последнее время препарировал жумлу и перекроил ее шаблон админки так как всегда использую один шаблонизатор xTemplate и модульность админки, сейчас ее создание больше 5-8 часов не отнимает.
     
  9. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Бред. Это как-раз пример как НЕ надо делать админ-панель.
    По крайней мере эта конструкция должна быть "модульной".
     
  10. ustas76

    ustas76 Постоялец

    Регистр.:
    15 фев 2007
    Сообщения:
    140
    Симпатии:
    25
    Модераторы удалите этот бред,
    g-prime начинай изучать чужие исходники.
     
Статус темы:
Закрыта.