|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Разработка форума на PHPРазработка форума на PHPМИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ВЛАДИВОСТОКСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЭКОНОМИКИ И СЕРВИСА ИНСТИТУТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И ТЕХНИЧЕСКИХ СИСТЕМ КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ И КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ УТВЕРЖДАЮ Заведующий кафедрой С. М. Семенов « » 2009г. Курсовая работа По дисциплине «Администрирование в информационных системах» Разработка форума на PHP Студент гр. ВМ - 06- 01О. С. Чебан ПреподавательИ.Г. Лаштанов Владивосток 2009АннотацияОбъектом исследования данной курсовой работы является технология создания сценария для общего доступа к данным на web-узле. Целью работы является программная реализация поставленной задачи. Написание Интернет-сценария «Форум».Для решения задачи был выбран программный пакет Denwer состоящий из связки PHP+MySQL+HTML.В результате выполнения работы были получены навыки разработки Интернет сценариев, а так же написан сценарий «Форум», реализующий возможности обмена информацией пользователей в сети Интернет.Областью применения данной курсовой работы могут являться задачи обеспечения общения пользователей между компьютерами по сети Интернет.СодержаниеВведениеПроектирование базы данныхАрхитектура системыСистема аутентификацииПанель администратораОсновная часть Руководство пользователяВыводСписок литературыВведениеЦелью работы является программная реализация поставленной задачи. Написание интернет сценария «Форум». В настоящее время существует достаточно много решений подобной задачи ввиду актуальности объекта исследований. Сценарий представляет собой набор модулей в виде файлов с расширением php, реализующих возможности обмена информацией пользователей в сети. Областью применения данной курсовой работы могут являться задачи обеспечения общения пользователей между компьютерами по сети Интернет.Проектирование базы данныхПри проектировании базы данных (далее БД) “forum” использовалась система phpMyAdmin входящая в программный пакет Denwer. В БД mуSQL входят четыре таблицы:- таблица forum_name хранит информацию о названии и описании форумов; - таблица forum_info хранит информацию обо всех темах форумов; - таблица forum_mess хранит сообщения всех тем;- таблица forum_user хранит информацию о зарегистрированных пользователях;Структура таблиц.
Система аутентификацииСистема аутентификации состоит из авторизации и регистрации. Модуль reg.php содержит в себе все необходимые средства для регистрации пользователей в БД. Для регистрации пользователь должен ввести имя, пароль и подтверждение пароля. После этого отсылается запрос к БД на создание записи этого пользователя. Код данного модуля приведен ниже.<?php //осуществляем php обработку, при нажатии на кнопку reg_ok соединяемся с БД и делаем фильтрацию //данных, необходимую для защиты if (isset($_POST['reg_ok'])){require_once("connect.php");if ($_POST['user_n']!='' && $_POST['user_p']!='' && $_POST['user_p2']!='') {If (strlen($_POST['user_n'])<20 && strlen($_POST['user_p'])<25&& strlen($_POST['user_p2'])<20) {if (strlen($_POST['user_n'])>=3 && strlen($_POST['user_p'])>=3 && strlen($_POST['user_p2'])>=3) {if ($_POST['user_p'] == $_POST['user_p2']) {// можно вводить только эти символы$span_str = "abcdefghijklmnopqrstuvwxyz" ."ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-" ."абвгдежзиклмнопрстуфхцчшщьыъэюя" ."АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";if (strspn($_POST['user_n'],$span_str) == strlen($_POST['user_n'])) {$b_login = mysql_escape_string($_POST['user_n']);$b_login = htmlspecialchars($b_login);//запрос на выборку во избежание одинаковых имен пользователей$query = "SELECT user_name FROM forum_user WHERE user_name = '".$b_login."'";$result = mysql_query($query);$line = mysql_fetch_row($result);if ($line[0] != $b_login) {$login = mysql_escape_string($_POST['user_n']);$login = htmlspecialchars($login);$pass1 = mysql_escape_string($_POST['user_p']);$pass = htmlspecialchars($pass1);$date = date('Y-m-d');//если все условия регистрации выполнены записываем данные в БД$sql = "INSERT INTO forum_user SET user_name ='$login',user_pass=password('$pass'),user_role = 'Пользователь',date='$date'";mysql_query($sql); echo "<center><h3>Регистрация прошла успешно!!!</h3><a href = index.php>назад</a>"; }else{echo"<center><h3>Логин используется!!!</h3><a href = reg.php>назад</a>";} }else{echo"<center><h3>Вы ввели недопустимые символы!!!</h3><a href = reg.php>назад</a>";} }else{echo"<center><h3>Неверное подтверждение пароля!!!</h3><a href = reg.php>назад</a>";} }else{echo"<center><h3>Слишком короткий логин или пароль(меньше 3 символов)!!!</h3><a href = reg.php>назад</a>";} }else{echo"<center><h3>Слишком длинный логин или пароль(больше 25 символов)!!!</h3><a href = reg.php>назад</a>";} }else{echo"<center><h3>Необходимо заполнить все поля !!!</h3><a href = reg.php>назад</a>";}}?>При авторизации выводится форма авторизации, чтобы войти в систему необходимо ввести имя пользователя и пароль. Код авторизации находящийся в основном модуле index.php приведен ниже.session_start(); //создаем сессию, будем записывать в нее информацию о входеrequire_once("connect.php");//соединяемся с БДif (!isset($_SESSION['autorized'])){//если пользователь не прошел авторизацию, то на форуме он будет гостем $_SESSION['name'] = 'guest';//выводим форму авторизацииif (!isset ($_POST['enter'])){echo "<form action='' method = POST>Логин<input type = text name = login><code>Пароль<input type = password name = pass maxlenght = 15><input type = submit value = Войти name = enter></form>";}//фильтрация данных и условия авторизацииelse if (strlen($_POST['login']) < 25 && strlen($_POST['pass']) < 25){if ($_POST['login']!='' && $_POST['pass']!=''){$safe_name1 = mysql_escape_string($_POST['login']); $safe_pass1 = mysql_escape_string($_POST['pass']); $safe_name = htmlspecialchars($safe_name1); $safe_pass = htmlspecialchars($safe_pass1); $sql1 = "SELECT user_name,user_role,date FROM forum_user WHERE user_name = '".$safe_name."' and user_pass=password('$safe_pass')"; $result = mysql_query($sql1); if (!mysql_num_rows($result)){echo "<center><h5>Логин или пароль неверные</h5> "; echo "<center><a href = 'index.php'>Назад</a>";}else{ //если вход в систему выполнен, то записываем в сессию имя пользователя и его роль на форуме $line = mysql_fetch_row($result); $_SESSION['autorized']=true; $_SESSION['name'] = $_POST['login']; $_SESSION['role'] = $line[1]; echo "<center><table border=1 width=564> Спасибо что зашли ".$_SESSION['name']." (Ваш статус: ".$_SESSION['role'].") <a href = 'logout.php'>(Выход)</a>"; }}else{ echo "Необходимо заполнить все поля<a href = 'index.php'>Назад</a>";}} else{ echo "Пароль или логин не должен быть больше 25 символов <center><a href = 'index.php'>Назад</a>"; }}else{ echo "<center><table border=1 width=564><tr><td width=554><center> <code>Спасибо что зашли ".$_SESSION['name']." (Ваш статус: ".$_SESSION['role'].";<a href = 'logout.php'>(Выход)</a>";}Файл logout.php уничтожает сессию и перенаправляет на главную страницу.Панель администратораПри авторизации администратора в системе появляются возможности добавления, редактирования форумов, тем, сообщений, а так же их удаления. Обычный пользователь этого не может, ему можно создавать только темы и сообщения.Функции редактирования и удаления информации выполняют два модуля, edit.php и del.php. Доступ к этим модулям определяется условием, которое выполняется, если переменная $_SESSION['role'] будет равна значению `Администратор'. В этом случае выводятся дополнительные формы, доступные только администратору форума. Исходный код модуля edit.php приведен ниже.<?php require_once("connect.php"); //соединяемся с БД//редактирование имени форума (переменная edit хранит ключевой номер форума, по которому мы //определяем его имя и все остальное) if (isset($_GET['edit'])){//выводим имя форума для его редактирования$sql = "SELECT name_forum FROM forum_name WHERE id_forum = ".$_GET['edit'];$data = mysql_query($sql);$line = mysql_fetch_array($data);echo "<form method = POST><h4>Название форума: </h4><textarea name = message cols=50 rows=10>".$line['name_forum']."</textarea><br><br><input type = submit name = ok value = 'Редактировать'</form>";if (isset($_POST['ok']))//заносим изменения в БД {$sql = "UPDATE forum_name SET name_forum = '".$_POST['message']."' WHERE id_forum = ".$_GET['edit'];mysql_query($sql);echo "Форум успешно изменен<BR>";echo "<a href = 'index.php'>Назад</a>";}}//редактирование темы (переменная edit_t хранит ключевой номер темы, по которому мы //определяем ее имя) if (isset($_GET['edit_t'])){echo "<center><h2>Редактирование темы</h2><div class=c7><div class=t2><a href = 'index.php?id_topic=".$_GET['id_t']."'><tt>Назад</tt></a>";//делаем запрос на вывод имени темы$sql = "SELECT name_topic FROM forum_info WHERE id_topic = ".$_GET['edit_t'];$data = mysql_query($sql);$line = mysql_fetch_array($data);echo "<form method = POST><h4>Название темы: </h4><textarea name = message cols=50 rows=10>".$line['name_topic']."</textarea><br><br><input type = submit name = ok value = 'Редактировать'</form>";if (isset($_POST['ok'])) {//запрос на изменение темы$sql = "UPDATE forum_info SET name_topic = '".$_POST['message']."' WHERE id_topic = ".$_GET['edit_t'];mysql_query($sql);echo "Тема успешно изменена<BR>";echo "<a href = 'index.php?id_topic=".$_GET['id_t']."'>Назад</a>";}}//редактирование сообщения (переменная edit_m хранит ключевой номер сообщения, по которому мы //определяем его имя) if (isset($_GET['edit_m'])){ echo "<center><h2>Редактирование сообщения</h2><a href = 'index.php?id_message=".$_GET['back']."'><tt>Назад</tt></a></center>";//запрос на вывод нужного нам сообщения$sql = "SELECT message FROM forum_mess WHERE id_message = ".$_GET['edit_m'];$data = mysql_query($sql);$line = mysql_fetch_array($data);echo "<form method = POST><h4>Сообщение: </h4><textarea name = message cols=50 rows=10>".$line['message']."</textarea><br><br><input type = submit name = ok value = 'Редактировать'</form>";if (isset($_POST['ok'])){//добавляем отредактированное сообщение в БД $sql = "UPDATE forum_mess SET message = '".$_POST['message']."' WHERE id_message = ".$_GET['edit_m'];mysql_query($sql);echo "Сообщение успешно изменено<BR>";echo "<a href = 'index.php?id_message=".$_GET['back']."'>Назад</a>";}}Исходный код модуля del.php приведен ниже.<?phperror_reporting(0);include_once("connect.php"); //соединяемся с БД//удаление форума и всех его тем(переменная id_f хранит ключевой номер форума)if(isset($_GET['id_f'])){$sql = "DELETE FROM forum_name WHERE id_forum = ".$_GET['id_f'];$sql1 = "DELETE FROM forum_info WHERE codeoff_topic = ".$_GET['id_f'];if (mysql_query($sql) && mysql_query($sql1)){echo "<center><hr><h3>Форум успешно удален</h3>";echo "<a href = 'index.php'>Назад</a></center><hr>";}}//удаление темы и всех ее сообщений (переменная id_t хранит ключевой номер темы)if(isset($_GET['id_t'])){$sql = "DELETE FROM forum_info WHERE id_topic = ".$_GET['id_m'];$sql1 = "DELETE FROM forum_mess WHERE codeoff_message = ".$_GET['id_m'];if (mysql_query($sql) && mysql_query($sql1)){echo "<center><hr><h3>Тема успешно удаленa</h3>";echo "<a href = 'index.php?id_topic=".$_GET['id_t']."'>Назад</a></center><hr>";}}//удаление сообщения(переменная id_mess хранит ключевой номер сообщения)if(isset($_GET['id_mess'])){$sql = "DELETE FROM forum_mess WHERE id_message = ".$_GET['id_mess'];if (mysql_query($sql)){echo "<center><hr><h3>Сообщение успешно удалено</h3>";echo "<a href = 'index.php?id_message=".$_GET['back']."'>Назад</a></center><hr>";}}?>Основная частьОсновная часть описывается в модуле index.php. Она содержит форму авторизации, таблицу с названиями форумов и информацию о них. Названия форумов отображаются в виде ссылок, на которые при нажатии открывается таблица, содержащая все темы по данному форуму. Темы так же отображаются в виде ссылок при нажатии, на которые формируется таблица всех содержащихся в данной теме сообщений. Так же модуль содержит формы добавления тем и сообщений.Исходный код главной страница приведен ниже.<?phpsession_start();error_reporting(0);$_SESSION['name'];$_SESSION['role'];require_once("connect.php");if (!isset($_GET['id_message'])){//таблицу сообщений выводим тогда когда присвоено значение if (!isset($_GET['id_topic'])){ //таблицу тем выводим тогда когда присвоено значение//--------------------------------------------Формирование таблицы форумов--------------------------------- echo "<center><table border=1 width=1228 height=18><tr> <td width=606 height=12><p align=center><tt>Форумы</tt></p></td> <td width=100 height=12><p align=center><tt>Содержимое</tt></p></td> <td width=350 height=12><p align=center><tt>Описание форума</tt></p> </td></tr></table></center>"; $sql = "SELECT id_forum,name_forum,info_forum FROM forum_name"; $data = mysql_query($sql); while ($line = mysql_fetch_array($data)) { $query = "SELECT COUNT(codeoff_topic) FROM forum_info WHERE codeoff_topic = ".$line['id_forum']; $result = mysql_query($query); $line2 = mysql_fetch_row($result); echo "<center><table border=1 width=1228 height=18> <tr><td width=606 height=12><p align=left><a href = index.php?id_topic=".$line['id_forum']."><img src=pic/unternav_go.gif> ".$line['name_forum']."</a></p>"; if ($_SESSION['role'] == 'Администратор') {echo "<form action = 'edit.php?edit=".$line['id_forum']."' method =POST><input type = submit value = 'Редактировать'></form>"; echo "<form action = 'del.php?id_f=".$line['id_forum']."' method =POST><input type = submit value = 'Удалить'></form>"; } echo "</td><td width=100 height=12><center><div class=c10><div class=t2><tt>Тем: ".$line2[0]."</tt></center></div></div></td> <td width=350 height=12><div class=c8><div class=t2> <p align=lift><tt>".$line['info_forum']."</tt></p></div></div> </td></tr></table></center>"; }}//---------------------------------------Переходим в раздел тем------------------------------------------------- if (isset($_GET['id_topic'])) { //создаем дорожку переходов $sql = "SELECT id_forum,name_forum FROM forum_name WHERE id_forum =".$_GET['id_topic']; $data = mysql_query($sql); $line1 = mysql_fetch_array($data); echo "<div class=c7><div class=t2><a href = index.php>Форумы</a> &rarr<a href = index.php?id_topic=".$line1['id_forum']."> ".$line1['name_forum']."</a></div></div><hr>";//------------------------------------------------Таблица тем------------------------------------------------------- echo "<table border=1 width=1228> <tr><td width=782><p align=center><tt>Тема</tt></p></td> <td width=146><p align=center><tt>Содержимое</tt></p></td> <td width=204><p align=center><tt>Создатель темы</tt></p></td> <td width=220><p align=center><tt>Дата</p></tt></td></tr></table>"; $sql = "SELECT id_topic,codeoff_topic,name_topic,user_name,date FROM forum_info WHERE codeoff_topic = ".$_GET['id_topic']; $data = mysql_query($sql); while ($line = mysql_fetch_array($data)) { $query = "SELECT COUNT(codeoff_message) FROM forum_mess WHERE codeoff_message = ".$line['id_topic']; $result = mysql_query($query); $line1 = mysql_fetch_row($result); echo "<table border=1 width=1228><tr><td width=782><p align=left> <a href = index.php?id_message=".$line['id_topic']."> ".$line['name_topic']."</a></p><br>";if ($_SESSION['role'] == 'Администратор') {echo "<form action = edit.php?id_t=".$_GET['id_topic']."&edit_t=".$line['id_topic']." method =POST><input type = submit value = 'Редактировать'></form>";echo "<form action = del.php?id_t=".$_GET['id_topic']."&id_m=".$line['id_topic']." method =POST><input type = submit name = delete value = 'Удалить'></form>"; }echo "</td><td width=150><p align=center><div class=c12><center><div class=t2><tt>Сообщ: ".$line1[0]."</tt></div></div></center></p></td> <td width=212><p align=center><div class=c10><div class=t2><center><tt>".$line['user_name']."</tt></div></div></center></p></td> <td width=212><p align=center><div class=c8><center><div class=t2><tt>".$line['date']."</tt></div></div></center></p></td> </tr></table>";}//----------------------------------------------------форма добавления темы------------------------------------echo "<br><form method = POST><input type = submit name = b_add_t value = 'Добавить тему'></form>";if (isset($_POST['b_add_t'])) {echo "<center><form method = POST>";echo "Введите название темы<br><input type = text name = tema size=50> <input type = submit name = b_add_t2 value = Добавить></form>"; }if (isset($_POST['b_add_t2'])) {if (strlen($_POST['tema']) < 50) {if ($_POST['tema']!='') { $name1 = mysql_escape_string($_POST['tema']); $name = htmlspecialchars($name1); $code = htmlspecialchars($_GET['id_topic']); $sql = "INSERT INTO forum_info SET codeoff_topic='$code',name_topic='$name', user_name = '".$_SESSION['name']."',date = '".date('Y-m-d')."'"; mysql_query($sql); echo "<br><center>Новая тема успешно добавлена!<br><a href = index.php?id_topic=".$_GET['id_topic'].">Назад</a><BR><center>"; }else { echo "<br><center>Необходимо заполнить поле!<br><a href = index.php?id_topic=".$_GET['id_topic'].">Назад</a><BR><center>"; }}else { echo "<br><center><br>Длина темы должна быть не больше 50 символов!<a href = index.php?id_topic=".$_GET['id_topic'].">Назад</a><br><center>"; }}}//---------------------------------------Переходим в раздел сообщений----------------------------------------}else{$sql = "SELECT forum_info.id_topic,forum_info.codeoff_topic,forum_info.name_topic,forum_name.name_forum FROM forum_info,forum_name WHEREforum_info.id_topic = ".$_GET['id_message']." AND forum_name.id_forum = forum_info.codeoff_topic";$data = mysql_query($sql);$line = mysql_fetch_array($data);echo "<div class=c7><div class=t2><a href = index.php>Форумы</a>&rarr<a href = index.php?id_topic=".$line['codeoff_topic'].">".$line['name_forum']."</a>&rarr<a href = index.php?id_message=".$_GET['id_message'].">".$line['name_topic']."</a></div></div><hr>";echo "<table border=1 width=1228><tr><td width=212><p align=center><tt>Ответил</tt></p></td><td width=782><p align=center><tt>Сообщение</tt></p></td><td width=212><p align=center><tt>Дата</tt></p></td></tr></table>";$sql = "SELECT id_message,message,usermess_name,date FROM forum_mess WHERE codeoff_message = ".$_GET['id_message'];$data = mysql_query($sql);while($line = mysql_fetch_array($data)) { $sql1 = "SELECT date FROM forum_user WHERE user_name = '".$line['usermess_name']."'"; $res = mysql_query($sql1); $line1 = mysql_fetch_array($res); echo "<table border=1 width=1228><tr> <td width=212><p align=center><tt><div class=c10><div class=t2>".$line['usermess_name']."</div></div><h4>Зарегистрирован: ".$line1['date']."</h4></tt></p></td> <td width=782><p align=left><tt>".$line['message']."</tt></p><br>"; if($_SESSION['role'] == 'Администратор') {echo "<form action = edit.php?edit_m=".$line['id_message']."&back=".$_GET['id_message']." method =POST><input type = submit value = 'Редактировать'></form>";echo "<form action = del.php?id_mess=".$line['id_message']."&back=".$_GET['id_message']." method =POST><input type = submit name = delete value = 'Удалить'></form>"; }echo"</td><td width=212><p align=center><center><div class=c8><div class=t2><tt>".$line['date']."</tt></div></div></center></p></td></tr></table>"; }echo "<form method = POST><br><input type = submit name = b_add_t value = 'Добавить сообщение'></from>";//----------------------------------------------------Добавление сообщения-------------------------------------if (isset($_POST['b_add_t'])) {echo "<center><form action = index.php method = POST>"; echo "<tt>Введите сообщение</tt><br><textarea name = question rows = 5 cols = 40></textarea> <br><br><input type = submit name = b_add_t2 value = 'Добавить'></form>";} if(isset($_POST['b_add_t2'])){ if(strlen($_POST['question']) < 200){ if($_POST['question']!=''){ $name1 = mysql_escape_string($_POST['question']); $name = htmlspecialchars($name1); $code = htmlspecialchars($_GET['id_message']); $sql = "INSERT INTO forum_mess SET codeoff_message='$code',message='$name', usermess_name = '".$_SESSION['name']."',date = '".date('Y-m-d')."'";mysql_query($sql);echo "<br><center>Новое сообщение успешно добавлено!<br><a href = index.php?id_message=".$_GET['id_message'].">Назад</a><BR><center>";}else {echo "<br><center>Необходимо заполнить поле!<br><a href = index.php?id_message=".$_GET['id_message'].">Назад</a><BR><center>";}}else {echo "<br><center><br>Длина темы должна быть не больше 200 символов!<a href = index.php?id_message=".$_GET['id_message'].">Назад</a><BR><center>";}}}?>Руководство пользователяРегистрация пользователя не обязательна, в этом случае пользователь сможет пользоваться форумов и ему будет присвоена роль гостя. Но если пользователь захочет зарегистрироваться, для это у него есть меню регистрации (Рис. 2).Рис. 2После регистрации нужно воспользоваться формой авторизации (Рис. 3).Рис. 3Далее у вас есть возможность создавать свои собственные темы и сообщения, или отвечать на сообщения своих друзей. Форма создания тем (Рис. 4).Рис. 4Некоторые фрагменты панели администратора (Рис. 5, Рис. 6).Рис. 5Рис. 6ВыводВ результате выполнения работы были получены навыки разработки Интернет сценариев, а так же написан сценарий «Форум», реализующий возможности обмена информацией пользователей в сети Интернет.Данная версия форума является примитивной, в дальнейшем планируется создание модераторов, аватаров, более сложной системы регистрации с использованием защиты от спама и отправкой электронного письма на мыло пользователя для подтверждения регистрации.Областью применения данной курсовой работы могут являться задачи обеспечения общения пользователей между компьютерами по сети Интернет.Список литературыА. Я. Архангельский «Программирование PHP» Москва 2003г.А. Я. Архангельский «Приемы программирования на PHP» Москва 2003г.Стив Тейксера, Ксавье Пачеко «PHP+MySQL Руководство разработчика» Москва 2002г.Фень Юань «web программирование» Москва 2002г.В.Г. Олифер «Компьютерные сети» Москва 2002г.лекции по курсу «php + sql библия пользователя». |
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |