Практическое занятие

Тема: «Создание административной панели»

 

 

Рассмотрим подробнее создание административной панели на основе сайта с библиотекой.

Пусть имеется база данных books с таблицей book. Таблица имеет структуру: идентификатор книги (id), автор(ы) книги (avtor), название книги (nazv), год издания (god), адрес расположения книги (url). И содержит такие данные:

 


 

База данных и ту часть сайта, которую видит пользователь (Frontend), можно скачать из архивов books.sql.zip и site.rar.

Займемся созданием административной панели сайта на основе этих архивов.

 

1. В каталоге, где находится главная страница сайта index.php, создадим папку admin. И далее работаем в ней.

 

2. Создаем страницу авторизации администратора login.php:

 

 

3. Создаем страницу index.php:

 

 

 

4. Создаем страницу для соединения с базой данных connect.php:

 

<?php

     //Устанавливаем доступы к базе данных:

     $host = 'localhost'; //имя хоста, на локальном компьютере это localhost

     $user = 'root'; //имя пользователя, по умолчанию это root

     $password = ''; //пароль

     $db_name = 'books'; //имя базы данных

     //Соединяемся с базой данных используя доступы:

     mysql_connect($host, $user, $password);

     mysql_select_db($db_name);

     //Устанавливаем кодировку

     mysql_query("SET NAMES 'utf8'");

?>

 

5. Создаем страницу работы с информацией по книгам book.php:

 

</form>

 

</body>

</html>

<?php

}

else //если администратор не авторизован

{

//отправляем его на страницу авторизации

     header("Location: index.php");

}?>

 

 

6. Создаем страницу выхода и удаления сессии logout.php:

 

<?php

//стартуем сессию

     session_start();

//разрушаем сессию

     session_destroy();

//извлекаем адрес сайта (тот, что отображается в строке браузера)

     $url=$_SERVER['REQUEST_URI'];

//отрезаем с конца адреса текст 'admin/exit.php'

     $new_url=rtrim($url,'admin/exit.php');

//выходим с админ-панели

//переходим на главную страницу сайта

     header("Location: ".$new_url);

?>

 

7. Создаем страницу редактирования записей из таблицы book.

Странице даем имя record.php:

 

<?php

//стартуем сессию

session_start();

//если администратор авторизован

if($_SESSION["auth"])

{

//отображаем содержимое страницы

?>

<!DOCTYPE HTML>

<html lang="ru">

<head>

     <meta charset="utf-8">

     <title>Редактирование</title>

     <link rel="stylesheet" href="style/style_record.css" />

</head>

<body>   

    

     <form method="POST" enctype="multipart/form-data">

          <input type="submit" name="back" value="Отмена">

          <input type="submit" name="save" value="Сохранить" >

 

<?php

     include ('connect.php');

     //если передан get-параметр, т.е. передан номер книги

if ($_GET['id'])

     {

     //находим в базе данных книгу с номером, переданным как get-параметр

     $result = mysql_query("select * from book where id=".$_GET['id']);

     //считываем данные по этой книге

     $row = mysql_fetch_assoc($result);

     }

?>

<!—-выводим таблицу-->

     <table border="0" width="100%">

          <tr>

              <td>Автор</td>

<!—-выводим в ячейку автора книги-->

              <td><input type="text" name="T1" value="<?echo $row['avtor'];?>" ></td>

          </tr>

          <tr>

              <td>Название</td>

<!—-выводим в ячейку название книги-->

              <td><input type="text" name="T2" value="<?echo $row['nazv'];?>" required></td>

          </tr>

          <tr>

              <td>Год</td>

<!—-выводим в ячейку год издательства-->

              <td><input type="text" name="T3" value="<?echo $row['god'];?>"></td>

          </tr>

          <tr>

              <td>Адрес книги</td>

<!—-отображаем кнопку для загрузки файла-->

              <td><input type="file" name="file" value="<?echo $row['url'];?> ">

              </td>

          </tr>

     </table>

     <?php

     //eсли нажата кнопка Сохранить

     if ($_POST['save'])

     {

     //если редактируется запись

     if ($_GET['id'])

     {

     //если год пустой, то даем ему значение ноль, чтобы не вызвало ошибку при записи в базу данных

     if($_POST["T3"]=="")$god=0;

          else $god=$_POST["T3"];

     //считываем адрес книги

     $url=$row['url'];

//если файл выбран

     if(!empty($_FILES['file']['name']))

     {

          $destiation_dir = dirname(__FILE__) .'/book/'.$_FILES['file']['name']; // Директория для размещения файла

          move_uploaded_file($_FILES['file']['tmp_name'], $destiation_dir ); // Перемещаем файл в желаемую директорию

          //составлем путь для хранения в базе данных

          $url="book/".$_FILES['file']['name'];

     }

    

     $avtor=($_POST["T1"]);

     $nazv=($_POST["T2"]);

//изменяем запись в базе данных с учетом поправок администратора

mysql_query('update book set avtor="'.$avtor.'", nazv="'.$nazv.'", god='.$god.', url="'.$url.'" where id='.$_GET["id"]);

     }

//отправляем администратора на страницу книг, возвращая номер книги

     echo '<script type="text/javascript">location.href="book.php?id='.$_GET['id'].'";</script>';

     }

     //если нажата Отменить

     else if ($_POST['back'])

     //переходим на страницу книг

     echo '<script type="text/javascript">location.href="book.php?";</script>';

     ?>

    

     </form>

</body>

</html>

<?php

}

else

//если пользователь не авторизован, отправляем его на авторизацию

header('Location: index.php');

?>

 

8. Аналогично создаем страницу добавления записей (новых книг) в таблицу book. Это выполнить самостоятельно. А также самостоятельно задать стилевое оформление.

 

 

9. Блокируем доступ к элементам сайта через .htaccess

 

Каталоги сайта имеют вид:

 

 

Элементы сайта (header.php, content.php, …) находятся в папке pages/elems. Если злоумышленник напишет в адресной строке браузера путь к файлу header.php, то он с легкостью попадет на этот элемент сайта. Это является крайне нежелательным, так как может нанести вред сайту.

Чтобы злоумышленник не мог добраться до элементов сайта, в каталоге elems (в том каталоге, куда будет запрещен прямой доступ) создают файл .htaccess и в нем записывают код, запрещающий доступ ко всем файлам текущей папки:

 

RewriteEngine On

RewriteBase

deny from all

 

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

 

10. Хеширование пароля с помощью функции md5()

 

В файле login.php пароль (в нашем примере это 111) явно прописан. Это недопустимо.

Внесем изменения в файл login.php так, чтобы вместо пароля использовать его хеш.

 

Для начала проверим, какой хеш у нашего пароля. В новом, например, файле запишем код:

 

<?php

     //просмотрим хеш-пароля 111

     echo md5("111");

?>

 

В браузере запустим эту страницу увидим, что хеш пароля 111 имеет вид:

698d51a19d8a121ce581499d7b701668

 

Теперь, зная хеш, исправим код страницы login.php:

 

<?php

//стартуем сессию

session_start();

//записываем в сессию логин администратора

$_SESSION["login"]= $_POST['T1'];

//записываем в сессию пароль администратора

$_SESSION["pass"]=$_POST['T2'];

//проверяем, если нажата кнопка и правильно введен логин и пароль администратора

//хеш данных, записанных в сессию сравниваем с хэшем пароля

if ($_POST['B1'] && $_SESSION["login"]=="admin" && md5($_SESSION ["pass"])=="698d51a19d8a121ce581499d7b701668")

{

     //записываем в сессию, что пользователь авторизован

     $_SESSION["auth"]=true;

     //отправляем на главную страницу админ-панели

     header("Location: index.php");

}

//если не нажата кнопка или неправильно введен логин или пароль администратора

else

{

//отображаем страницу с формой

?>

<?php

}    //окончание else

?>

 

Теперь пароль явно не записан в файле login.php.