Практическое занятие
Тема: «Создание административной панели»
Рассмотрим подробнее создание административной панели на основе сайта с библиотекой.
Пусть имеется база данных books с таблицей book. Таблица имеет структуру: идентификатор книги (id), автор(ы) книги (avtor), название книги (nazv), год издания (god), адрес расположения книги (url). И содержит такие данные:
|
|
Займемся созданием административной панели сайта на основе этих архивов.
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.