Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Описание алгоритмов скриптов администраторской части форума




Схема взаимодействия скриптов администраторской части форума

Рис. 6.9 – Схема взаимодействия скриптов администраторской части форума

Из схемы видно, что администраторская часть форума приложения начинается с файла admin_konf.php, расположенного в папке ADM_FORUM. Перейдя по ссылке Создать таблицу новостей, администратору предоставляется возможность создать таблицу новостей для пользователей, файл admin_konf_sozdat.php. Ссылка Удалить таблицу новостей, файл admin_konf_udalit.php, удаляет таблицу новостей. Такжеадминистратору предоставляется возможность создания ( файл admin_konf_sozdat_black.php), удаления ( файл admin_konf_udalit_black.php), просмотра ( файл admin_konf_show_black.php) таблицы адресов черного списка по ip-адресу и разблокировать пользователя (файл work_with_ip.php); создания ( файл admin_konf_sozdat_black_login.php), удаления ( файл admin_konf_udalit_black_login.php), просмотра ( файл admin_konf_show _black_login.php) таблицы адресов черного списка по логину и разблокировать пользователя (файл work_with_login.php); Ссылки В черный список по ip, В черный список по логину, Сохранить и Удалить (файл admin_konf_edit_note.php) позволяют администратору работать с оставленными пользователями сообщениями. Также администратор имеет возможность очистить таблицу новостей (файл admin_konf_udalit_all.php) и удалить новости, старше заданного количества дней (файл admin_konf_udalit_news.php)

 

Администраторская часть форума (папка ADM_FORUM) содержит 2 подключаемых файла connect_db.dan и variables.dan.

Подключаемый файл connect_db.dan задает переменные – параметры для подключения к серверу баз данных и выполняет подключение к серверу и выбор базы данных, а также в нем подключается файл okno.dan:

include("../okno.dan");

$server_name="sql-4.ayola.net"; // задаем имя сервера

$user_name="sforum615"; // задаем имя пользователя

$user_password="su6wiw4fll"; // задаем пароль пользователя

$databasename="sforum615"; // задаем имя базы данных

$tablename="konf"; // задаем имя таблицы для хранения сообщений

$tablename_black="black"; // задаем имя таблицы ip-адресов черного списка

$tablename_black_login="black_login";

$tab_password=password;

Соединяемся с сервером, передавая имя пользователя и пароль

mysql_connect($server_name, $user_name, $user_password) or okno("Подключение к серверу БД", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Не могу подключиться к серверу базы данных", "", "", 1);

Выбираем базу данных

mysql_select_db($databasename) or okno("Выбор БД", "/ADM/PICTURES/pictures_adm_users/ image_fon.jpg", "", "Ошибка", "Не могу выбрать базу данных на сервере", "", "", 1);

$adm=md5("angelina");

Получаем пароль из таблицы пароля администратора

$q=mysql_query("select passwd from $tab_password") or okno("Получение пароля администратора", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Ошибка обращения к таблице паролей", "", "", 1);

$pass=mysql_fetch_row($q);

$ps=$pass[0];

Подключаемый файл variables.dan получает нижеперечисленные параметры по методам POST или GET

Переменные по методу POST

if($_SERVER['REQUEST_METHOD']=='POST') {

$parametr = $_POST['parametr'];

$message = $_POST['message'];

$contakts = $_POST['contakts'];

$ipadress = $_POST['ipadress'];

$chislo = $_POST['chislo'];

$login = $_POST['login'];

$password = $_POST['password'];

$unid = $_POST['unid']; // номер последного сообщения

$ip_black = $_POST['ip_black']; // ip-адрес черного списка

$kol_dney = $_POST['kol_dney']; // дней для хранения сообщения

$work = $_POST['work']; }

Переменные по методу GET

if($_SERVER['REQUEST_METHOD']=='GET') {

$parametr = $_GET['parametr']; // действие над данными

$login = $_GET['login']; // логин администратора

$password = $_GET['password']; // пароль администратора

$p = $_GET['p']; // номер страницы }

Скрипт admin_konf.php формирует страницу администрирования форума и выполняет следующие действия:

Подключаемся к серверу баз данных и базе данных на сервере

include ("connect_db.dan");

include ("variables.dan");

Если существует переменная parametr и ее значение равно nachalo

if (isset($parametr) && $parametr=="nachalo" && isset($login) && $login==$adm && isset ($password) && $password==$ps) {

то выводим формы для изменения информации администратором.

Формируем html страницу Администрирование, со ссылками на операции для администрирования сайта:

Вверху страницы для редактирования новостей формируем формы с соответствующими кнопками

Форма с кнопкой для создания таблицы черного списка по логину

print "<form method=\"POST\" action=\"admin_konf_sozdat_black_login.php\">";

print "<input type=\"hidden\" name=\"parametr\" value=\"create_table_black_login\" >";

print "<input type=\"submit\" value=\"Создать таблицу адресов черного списка по логину\">";

print "</form>";

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

Выбираем все записи из таблицы новостей: desk - упорядочитьь по убыванию; asc - по возрастанию

$a=mysql_query("select number, message, contakts, chislo, ipadress, server, user from $tablename ORDER by unid desc");

Получаем количество записей в таблице konf

$kol_zap=mysql_num_rows($a);

Если количество сообщений > 10

if ($kol_zap>10) {

Создаем ссылки на страницы

print "<table><tr><td colspan=2 width=100% ><font size=\"5\"><b> Страницы: ";

Выводим номера страниц. Переменная j будет определять номер страницы

$kol_str=$kol_zap/10;

for ($i=0; $i<$kol_str; $i++) {

$j=$i+1;

print "[";

Для страницы не равной текущей формируется ссылка

if (!isset($p) || $p<>$j)

{ print "<a href=admin_konf.php?parametr=nachalo&login=$adm&password=$ps&p=$j>"; }

Выводится номер страницы

print $j;

Для страницы не равной текущей формируется конец ссылки

if (!isset($p) || $p<>$j) { print "</a>"; }

print "] "; } }

print "</b></font></td></tr></table>";

$pz - номер первой записи на странице для первой страницы = 0. Для остальных считается по формуле (номер страницы-1)*10

if (isset($p)) { $pz=($p-1)*10; }

else { $pz=0;}

Начиная с номера $pz из таблицы выбираем десять записей

$a=mysql_query("select number, message, contakts, chislo, ipadress, server, user from $tablename ORDER BY unid desc limit $pz, 10") or okno("Выбор записи из таблицы", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Невозможно выбрать записи из таблицы!", "", "", 1);

if ($a) {

Цикл по всем записям. Функция mysql_fetch_row получает из результата выполнения sql-запроса $a в строку $b (массив)

while ($b=mysql_fetch_row($a)) {

Смотрим находится ли пользователь в черном списке ПО ЛОГИНУ

$c=mysql_query("select user from $tablename_black_login where user='$b[6]'");

$f=0;

if (mysql_num_rows($c)!=0) { $f=1;}

Смотрим находится ли пользователь в черном списке по ip

$d=mysql_query("select ipadress from $tablename_black where ipadress='$b[4]'") or okno("Выбор записи из таблицы", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Невозможно выбрать записи из таблицы черных ip-адресов!", "", "", 1);

$f_ip=0;

if (mysql_num_rows($d)!=0) { $f_ip=1;}

Формируем строки экранной таблицы, каждая из которых является формой

print "<tr><form method=\"POST\" action=\"admin_konf_edit_note.php\">";

if ($f==1) {

print "<font size=\"-1\"><i>новость № $b[0]<br>от<br>$b[3]<br>прислано с<br>$b[5]<br>(ip $b[4])<br> пользователь <b>$b[6] </b></i></font>";

} else

if ($f_ip==1) {

print "<font size=\"-1\"><i>новость № $b[0]<br>от<br>$b[3]<br>прислано с<br>$b[5]<br>(ip $b[4])<br> пользователь <b>$b[6] </b></i></font>";

} else {

print "<font size=\"-1\"><i>новость № $b[0]<br>от<br>$b[3]<br>прислано с<br>$b[5]<br>(ip $b[4])<br> пользователь <b>$b[6] </b></i></font>"; }

print "<font size=\"-1\"><textarea rows=5 cols=115 name=\"message\">$b[1]</textarea></font>";

В скрытом поле с именем unid передаем значение равное идентификатору новости

print "<input type=\"hidden\" name=\"unid\" value=\"$b[0]\">";

print "<input type=\"hidden\" name=\"ip_black\" value=\"$b[4]\">";

print "<input type=\"hidden\" name=\"ip_black_login\" value=\"$b[6]\">";

print "<input type=\"submit\" name=\"parametr\" value=\"В черный список по ip\" ><br><br>";

print "<input type=\"submit\" name=\"parametr\" value=\"В черный список по логину\" ><br><br>";

print "<input type=\"submit\" name=\"parametr\" value=\"Сохранить\" > &nbsp; &nbsp;";

print "<input type=\"submit\" name=\"parametr\" value=\"Удалить\" >";

print "<font size=\"-1\"><i>&nbsp;&nbsp;Контактная информация:</i></font>&nbsp; &nbsp; <textarea rows=1 cols=94 name=\"contakts\">$b[2]</textarea></td></form></tr>";}

print "</table><br>"; } }

Скрипт admin_konf_sozdat.php проверяет существование переменной $parametr. Если значение переменной $parametr равно create_table, то выполняем sql-запрос по созданию таблицы сообщений базы данных.

if (isset($parametr) && ($parametr=="create_table")) {

// unid - уникальный идентификатор сообщения, number - номер сообщения, message - текст сообщения, contakts – контакт, chislo - дата создания сообщения, vremya - время создания сообщения, ipadress - ip адрес создателя сообщения, server - server создателя сообщения

$q=mysql_query("CREATE TABLE $tablename(

unid int(11) NOT NULL auto_increment,

number text,

message text,

contakts text,

chislo text,

vremya BIGINT(10),

ipadress text,

server text,

user varchar(30),

UNIQUE KEY unid(`unid`)) TYPE=MyISAM"); }

Скрипт admin_konf_udalit.php проверяет существование переменной $parametr. Если значение переменной $parametr равно delete_table, то выполняем sql-запрос по удалению таблицы сообщений базы данных.

if (isset($parametr) && ($parametr=="delete_table")) {

mysql_query("drop table $tablename") }

А затем формируем страницу с сообщением об успешном или не успешном удалении таблицы.

Скрипт admin_konf_sozdat_black.php проверяет существование переменной $parametr. Если значение переменной $parametr равно create_table_black, то выполняем sql-запрос по созданию таблицы адресов черного списка. Затем формируем страницу с сообщением об успешном или не успешном удалении таблицы

if (isset($parametr) && ($parametr=="create_table_black")) {

// id - уникальный идентификатор записи черного списка

// ipadress - ip адрес черного пльзователя

$q=mysql_query("CREATE TABLE $tablename_black(

id int(11) NOT NULL auto_increment,

ipadress text NOT NULL,

UNIQUE KEY id(`id`)) TYPE=MyISAM"); }

Скрипт admin_konf_udalit_black.php проверяет существование переменной $parametr. Если значение переменной $parametr равно delete_table_black, то выполняем sql-запрос по удалению таблицы сообщений базы данных.

if (isset($parametr) && ($parametr=="delete_table_black")) {

mysql_query("drop table $tablename_black") or die ("Не могу удалить таблицу ip адресов черного списка из базы данных");}

А затем формируем страницу с сообщением об успешном или не успешном удалении таблицы.

Скрипт admin_konf_show_black.php проверяет существование переменной $parametr. Если значение переменной $parametr равно show_table_black, то выполняем sql-запрос для просмотра таблицы ip-адресов черного списка базы данных.

if (isset($parametr) && ($parametr=="show_table_black")) {

print "<div align=center><b> Черный список ip адресов </b>";

print "<BR><BR> <table align=center border=1 width=50%> <tr>";

print "<td align=center bgcolor=#99CCFF> <font color=black> Код </font> </td>";

print "<td align=center bgcolor=#99CCFF> <font color=black> Адрес </font> </td>";

print "</tr>";

Отображаем на экран таблицу базы данных

$s="select * from $tablename_black"; // * - все поля таблицы

$q=mysql_query($s) or okno("Обращение к таблице c информацией о черных ip адресах", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Ошибка обращения к таблице c информацией о черных ip адресах", "", "", 1); }

Затем выводим записи в виде таблицы.

Скрипты admin_konf_sozdat_black_login.php, admin_konf_udalit_black_ login.php, admin_konf_show_black_login.php предназначены для работы с логином пользователя и реализованы аналогично скриптам, работающим с ip.

Скрипт admin_konf_udalit_news.php проверяет существование переменной $parametr. Если значение переменной $parametr равно ddelete и существует $kol_dney и $kol_dney>0, то выполняем sql-запрос по удалению информации старше указанного количества дней

if (isset($parametr) && $parametr=="ddelete" && isset($kol_dney) && $kol_dney>0) {

Получаем время, старше которого надо удалить

$q=time()-$kol_dney*24*60*60;

Переприсваиваем номера, начиная с удаленного уменьшая на единицу

$a=mysql_query("select * from $tablename where vremya<'$q'");

$kol_del=mysql_num_rows($a);

Удаляем записи, удовлетворяющие этому условию

mysql_query("delete from $tablename where vremya<'$q'");

Переприсваиваем номера,начиная с удаленного уменьшая на единицу

$a1=mysql_query("select unid, number from $tablename");

Пока есть строки в массиве (mysql_fetch_row-функция возвращает результат запроса как массив строк)

while ($b=mysql_fetch_row($a1)) { $new_num=$b[1]-$kol_del;

mysql_query("update $tablename set number=$new_num where unid='$b[0]'"); }

А затем формируем страницу с сообщением об удалении записи.

Скрипт admin_konf_udalit_all.php проверяет существование переменной $parametr. Если значение переменной $parametr равно deleteall, то выполняем sql-запрос на удаление всех записей таблицы новостей

if (isset($parametr) && $parametr=="deleteall") { mysql_query("truncate $tablename"); }

А затем формируем страницу с сообщением об успешном удалении данных из таблицы новостей.

Скрипт admin_konf_edit_note.php отвечает за занесение отредактированной новости в БД, т.е. проверяет существование переменной $parametr.

Если значение переменной $parametr равно "Сохранить" и существует $unid (идентификатор новости), то выполняем sql-запрос на сохранение всех изменений в новости таблицы новостей

if (isset($parametr) && ($parametr=="Сохранить") && isset($unid)) {

mysql_query("update $tablename set contakts='$contakts' where number='$unid'");

mysql_query("update $tablename set message='$message' where number='$unid'"); }

Затем выводим сообщение о сохранении измененной новости.

Если значение переменной $parametr равно "Удалить" и существует $unid (идентификатор новости), то выполняем sql-запрос на удаление одной записи таблицы новостей

if (isset($parametr) && $parametr=="Удалить" && isset($unid)) {

mysql_query("delete from $tablename where number='$unid'");

Переприсваиваем номера, начиная с удаленного уменьшая на единицу

$a=mysql_query("select unid, number from $tablename");

while ($b=mysql_fetch_row($a)) {

Если номер больше номера удаленной новости

if ($b[1]>$unid){

mysql_query("update $tablename set number=number-1 where unid='$b[0]'"); } }

А затем формируем страницу с сообщением об успешном удалении новости.

Если значение переменной $parametr равно "В черный список по ip" и существует $ip_black (ip-адрес), то выполняем sql-запрос на добавление одной записи в таблицу ip адресов черного списка

if (isset($parametr) && $parametr=="В черный список" && isset($ip_black)) {

Добавляем в таблицу ip адресов черного списка запись

mysql_query("insert into $tablename_black set ipadress='$ip_black'") }

А затем формируем страницу с сообщением об успешном добавлении ip-адреса в таблицу ip-адресов.

Если значение переменной $parametr равно "В черный список по логину" и существует $ip_black_login (логин), то выполняем sql-запрос на добавление одной записи в таблицу логинов черного списка

if (isset($parametr) && $parametr=="В черный список по логину" && isset($ip_black_login)) {

Добавляем в таблицу ip адресов черного списка запись

mysql_query("insert into $tablename_black_login set user='$ip_black_login'"); }

А затем формируем страницу с сообщением об успешном добавлении логина в таблицу логинов.

Скрипт work_with_ip.php отвечает за разблокирование и удаление пользователей, которые были заблокированы по ip-адресу. Если значение переменной $work равно "Разблокировать", то выполняем:

if (isset($work) && ($work=="Разблокировать")) {

Получаем переменные и их значения, переданные формой

reset ($_POST);

$f=0;

$vivod='';

Перебираем все элементы формы и их значения

while (list($key, $val) = each ($_POST)) {

Выделяем 3 первых символа из имени переменной формы

$kod=substr($key,0,3);

Если это строка KOD

if ($kod=="kod") { $f=1;

Получаем из имени переменной код пользователя для удаления

$kod_udaleniya=substr($key,3);

Получаем ip адрес из таблицы черных ip-адресов

$q=mysql_query("select * from $tablename_black where id='$kod_udaleniya'") or okno("Выборка логина из таблицы", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Ошибка выборки логина из таблицы", "", "", 1);

$row=mysql_fetch_row($q);

$ip_user=$row[1];

Удаление из таблицы одной записи с указанным кодом

mysql_query("delete FROM $tablename_black where id='$kod_udaleniya'") or okno("Логическое удаление записи из таблицы черных ip-адресов", "/ADM/PICTURES/pictures_adm_users/

image_fon.jpg", "", "Ошибка", "Ошибка логического удаления записи из таблицы черных ip-адресов", "", "", 1);

mysql_query("OPTIMIZE TABLE $tablename_black") or okno("Физическое удаление записи из таблицы черных ip-адресов", "/ADM/PICTURES/pictures_adm_users/image_fon.jpg", "", "Ошибка", "Ошибка физического удаления записей из таблицы черных ip-адресов!", "", "", 1);

Добавляем ip адрес к строке вывода

$vivod=$vivod.'<BR>'.$ip_user; } }

А затем формируем сообщения об успешном разблокировании ip-адресов.

Удаление ip-адресов производится аналогичным образом.

Скрипт work_with_login.php предназначен для разблокирования и удаления логинов из таблицы «черных» логинов, реализация производится аналогично скрипту work_with_ip.php

 




Поделиться с друзьями:


Дата добавления: 2015-07-02; Просмотров: 320; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.097 сек.