Вторник, 16.06.2026, 13:57
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

Форум, работающий с базой данных MySQL
Для работы форума необходим веб-сервер Apache с поддержкой PHP и база данных MySQL. Скрипт forum.php3 помещается в каталог /usr /local /apache /htdocs (без пробелов). Работающий форум можно посмотреть здесь, а полный листинг здесь.



Начало



Прежде,чем начать рассмотрение практического применения PHP,нужно войти в MySQL как администратор и создать базу данных,в которой будет храниться вся информация.



Создаем базу данных forum.



mysqladmin -u root -p create forum;

use forum;


Создаем 3 таблицы в базе данных forum.В них будет записываться вся информация.



create table info (

id int (4) not null auto_increment primary key,

name varchar (15) not null,

password varchar (15) not null,

email varchar (40) not null,

posts int (4) default '0',

key (name),key (password));





create table topics (

top_id int (4) not null auto_increment primary key,

top_name varchar (255) not null,

name varchar (15) not null,

message text not null,

replies int (4) default '0',

post_date datetime default '0000-00-00 00:00:00',

last_reply datetime default '0000-00-00 00:00:00',

key (top_name),key (name));



create table replies (

name varchar (15) not null,

top_name varchar (255) not null,

reply text not null,

reply_date datetime default '0000-00-00 00:00:00',

key (name),key (top_name));


Регистрация пользователя в БД



Далее пойдет чистый PHP и HTML.



Сгенерируем форму для регистрации:



<h2 align=center><font color="ff0000">Registration.</font></h2>

<p><font face="serif" size=2> Please,fill in the form below.

<p>You may use only english chars



in your name,and name's length should be not less than 3 and

not more than 15 characters.

<br>Remember:all form fields are case sensitive.It means the names



<font face="arial" size=2

color="0000ff">name</font> and



<font face="arial" size=2 color="0000ff">Name</font> are different.

<p>Password's length should be not less than 6 characters.<br>

Don't forget to enter your e-mail address, you may need it if you'll forget your password.

<p><FORM ACTION="" METHOD="POST" name="reg">

<p align=right><a href="">Home</a>

<center><TABLE BGCOLOR="bfbfbf">

<tr><td colspan=2> </td></tr>

<tr><TD><b>Login:</b><TD>

<INPUT TYPE="text" NAME="login" SIZE="20" maxlength="15" >  

<tr><TD><b>Password:</b><TD>

<INPUT TYPE="password" NAME="pass" SIZE="20" onFocus="is_ValidLogin (this.form.login.value)";return true>  

<tr><TD><b>Verify password:</b><TD>

<INPUT TYPE="password" NAME="verpass" SIZE="20" onFocus="is_ValidPass (this.form.pass.value)";return true>  

<tr><TD><b>E-mail:</b><TD>

<INPUT TYPE="text" NAME="email" SIZE="20" onFocus="verPasswd ()";return true>  

<tr><td colspan=2><input type="hidden" name="action" value="register">

<tr><td colspan=2><input type="hidden" name="verify" value="ok">

<tr><TD colspan=2><p><center>

<INPUT TYPE="submit" name="submit" VALUE="Submit" onMouseOver="true_Email (this.form.email.value)";return true></center>

<tr><td colspan=2>

</table>

</form>


Функции,использованные в форме, служат для проверки информации,введенной пользователем. Далее, нужно обработать данные. Для соединения с БД используется функция mysql_connect ().Поскольку соединяться с БД придется не раз,я вынес все данные в функцию connect ()



function connect () {

$hostname="localhost:3306";

$user="root";

$password="ваш пароль";

$db="forum";



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

$request=mysql_select_db ($db);

if (!mysql_connect) {

echo "Error: ".mysql_error ();

}

}


Эта функция подключает базу данных и проверяет наличие ошибок соединения. Теперь можно получить и обработать данные пользовательского ввода.



if ($action=="register") {

connect ();

if ($verify) {



$query="select id from info where name='$login'"; // Запрос к БД.

$result=mysql_query ($query);



if (mysql_num_rows ($result)) { // Проверяем,не существует ли уже такой пользователь.

print_header ();

echo "<p align=center><b>Error!</b>";

echo "<p>Name <b>".$login."</b> already exists.Please,go back and choose another name.";

?>

<p><center><a href="?action=register">Go back</a></center>

<?php

} else {

// Если все ОК вставляем данные в таблицу info.



$query="insert into info (name,password,email) values ('$login','$pass','$email')";

$result=mysql_query ($query);



// Говорим пользователю спасибо и распечатываем информацию.

print_header ();

echo "<h3 align=center>Thank you,<font color='ff0000'>".$login."!</font></h3>";?>

<p>You are successfuly registered and your information added to our database.

<p>Please,remember your information.Only registered users may post messages and replies.

<p><font face='arial' size=2 color='0000ff'>Your login:</font>

<font face='arial' size=2 color='ff0000'></font><br>

<font face='arial' size=2 color='0000ff'>Password:</font>

<font face='arial' size=2 color='ff0000'></font><br>

<font face='arial' size=2 color='0000ff'>E-mail:</font>

<font face='arial' size=2 color='ff0000'></font>

<p>Good luck!

<center><a href="">| Go to topics</a> |

<a href="?action=add_new_top"> Post new topic</a> |</center>

<?php

}

}


Функция print_header ()-это заголовок html-страницы. Она тоже использована для уменьшения количества кода.



function print_header () {

?>

<html><head><title>Forum version 1.1</title>

</head><style> A:link {font-family:arial;font-size:10pt;text-decoration:none;color:#0000ff;}

A:hover {font-family:arial;font-size:10pt;text-decoration:none;color:red;}";

A:visited {font-family:arial;font-size:10pt;text-decoration:underline;color:#0000ff;}

BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#333300;}

TD {font-family:arial;font-size:10pt;color:#333300;}

H2 {text-align:center;color:blue;}

</style><body>

<?php

}


Ну вот и все. Пользователь зарегистрирован и может помещать сообщения в форуме.



Создание нового топика



Для создания нового топика используем следующую форму:



<h3 align=center><font color="0000ff">New topic</font></h3>

<p align=right>| <a href="<?php echo $script ?>">Go to topics</a>

| <a href="<?php echo $script ?>?action=register"> Register</a> |

<p align=right><font color="0000ff">



Only registered users may post messages in this forum.</font>



<p><form action="<?php echo $script ?>" name="newtop" method="POST">

<table width=60% align=center bgcolor="aaaaaa">

<tr><td>&nbsp;

<tr><td><b>Your nick:</b><td><input type="text" name="nick" size=20>

<tr><td><b>Your password:</b><td><input type="password" name="passwd" size=20>

<tr><td><b>Topic name:</b><td><input type="text" name="theme" size=20>

<tr><td colspan=2>&nbsp;<b>Message:</b><p>&nbsp;&nbsp;<textarea cols=40 rows=15

WRAP="VIRTUAL" name="message"></textarea>

<tr><td colspan=2><input type="hidden" name="action" value="add_new_top">

<tr><td colspan=2><input type="hidden" name="test" value="ok">

<tr><td colspan=2 align=center>&nbsp;<br>



<input type="submit" name="post" value="Submit"></table>

<?php


Все поля обязательны для заполнения. Пользователь должен ввести свое имя,под которым он регистрировался в БД и пароль.Скрипт проверяет наличие их в БД,и если все нормально-помещает сообщение в таблицу topics.Если же имя и пароль введены неверно-выдается ошибка.Помещать сообщения могут только зарегистрированные пользователи. Вот как это выглядит:



elseif ($action=="add_new_top") {

connect ();                                      // Соединяемся с БД.

if ($test) {



// Читаем данные из формы.

$date=date ( "Y-m-d H:i:s",mktime ());

$message=htmlspecialchars ($message);

$message=nl2br($message);

$message=str_replace ("'"," ",$message);

$theme=str_replace ("'"," ",$theme);

$theme=str_replace ('"'," ",$theme);

$theme=htmlspecialchars ($theme);



// Здесь следует дать пояснения об использовании



//функций htmlspecialchars (),str_replace () и nl2br ().

// htmlspecialchars () используется для того,чтобы



//преобразовать html-теги.Это делается в целях безопасности

и для защиты от разного рода шутников :)

// str_replace () заменяет символ одинарной кавычки на пробел,



//т.к. внесение одинарной кавычки в БД

//недопустимо-это специальный служебный символ.Это защитит БД от взлома.

// nl2br () преобразует символ конца строки в html-тег<br>.



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

$query="select id from info where name='$nick' AND password='$passwd'";



// Запрос к БД.Проверка имени и пароля.

$result=mysql_query ($query);



// Если все ОК,проверяем,чтобы поля формы не были пустыми.

if (mysql_num_rows ($result)) {

if (strlen ($theme)!=0 && strlen ($message)!=0) {



// Если все ОК,вставляем данные в таблицу topics.

$query="insert into topics (top_name,name,message,post_date,last_reply)



values ('$theme','$nick','$message','$date','$date')";

$result=mysql_query ($query);



// Обновляем таблицу info-увеличиваем количество постов для данного пользователя на 1.

$query="update info set posts=posts+1 where name='$nick'";

$result=mysql_query ($query);

print_header ();



// Говорим пользователю спасибо.

?>

<h3 align=center>Thank you,<font color="ff0000"><?php echo $nick ?>!</font></h3>

<p>Your topic has been submitted.

<p><center>| <a href="<?php echo $script ?>">Go to topics</a> |



<a href="<?php echo $script ?>?action=add_new_top"> Post new topic</a> |</center>

<?php

} else {

print_header ();



// Если одно из полей формы оказалось пустым-выдается ошибка.

?>

<h2 align=center>Error!</h2>

<p>You didn't enter topic name or message.Please,go back and try again.

<p><center>

| <a href="<?php echo $script ?>?action=add_new_top">Go back</a>

|  <a href="?action=remind_pass">Forgot password?</a> |</center>

<?php

}

} else {

print_header ();



// Если введены неверные имя или пароль,также выдается ошибка.

?>

<h2 align=center>Error!</h2>

<p>You entered incorrect name or password.Please,go back and try again.

<p><center>| <a href="<?php echo $script ?>?action=add_new_top">Go back</a>

| <a href="<?php echo $script ?>?action=remind_pass">Forgot password?</a>|</center>

<?php

}

}


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



Посылка ответа на сообщение



Она ничем не отличается от создания нового топика,только ответ помещается в таблицу replies. Сгенерируем форму.



<h3 align=center><font color="0000ff">Post reply.</font></h3>

<p align=right>| <a href="<?php echo $script ?>">Go to topics</a>

| <a href="<?php echo $script ?>?action=register"> Register</a> |

<p align=right><font color="0000ff">



Only registered users may post messages in this forum.</font>



<p><form action="<?php echo $script ?>" name="reply" method="POST">

<table width=60% align=center bgcolor="aaaaaa">

<tr><td>&nbsp;

<tr><td><b>Your nick:</b><td><input type="text" name="nick" size=20>

<tr><td><b>Your password:</b><td>



<input type="password" name="passwd" size=20>

<tr><td colspan=2>&nbsp;<b>Message:</b><p>&nbsp;&nbsp;



<textarea cols=40 rows=15 WRAP="VIRTUAL" name="message"></textarea>

<tr><td colspan=2><input type="hidden" name="action" value="post_reply">

<tr><td colspan=2><input type="hidden" name="top_name" value="<?php echo $top_name ?>">

<tr><td colspan=2><input type="hidden" name="validate" value="ok">

<tr><td colspan=2 align=center>&nbsp;<br>



<input type="submit" value="Submit"></table>


И обработка данных:



elseif ($action=="post_reply") {

if ($validate) {

connect ();

$date=date ( "Y-m-d H:i:s",mktime ());

$message=htmlspecialchars ($message);

$message=nl2br($message);

$message=str_replace ("'"," ",$message);



$query="select id from info where name='$nick' AND password='$passwd'";

$result=mysql_query ($query);



if (mysql_num_rows ($result)) {

if (strlen ($message)!=0) {

print_header ();

$query="insert into replies (name,top_name,reply,reply_date)



values ('$nick','$top_name','$message','$date')";

$result=mysql_query ($query);



$query="update topics set replies=replies+1,last_reply='$date'



where top_name='$top_name'";

$result=mysql_query ($query);



$query="update info set posts=posts+1 where name='$nick'";

$result=mysql_query ($query);



echo "<h3 align=center>Thank you,



<font color='ff0000'>".$nick."!</font></h3>";

echo "<p>Your reply has been submitted.";

?>

<p><center>| <a href="<?php echo $script ?>">Go to topics</a>

|<a href="<?php echo $script ?>?action=add_new_top">



Post new topic</a> |</center><?php

} else {

print_header ();

?>

<h2 align=center>Error!</h2>

<p>You didn't enter message.Please,go back and try again.

<p><center>| <a href="<?php echo $script ?>



?action=post_reply&top_name=



<?php echo $top_name ?>">Go back</a>

| <a href="<?php echo $script ?>?action=remind_pass">



Forgot password?</a> |</center>

<?php

}

}

Категория: php | Добавил: freeone (10.05.2007) | Автор: OlegTr
Просмотров: 3611 | Комментарии: 8 | Рейтинг: 0.0 |

Всего комментариев: 6
6 antinense  
0
Извините за топик. Удалите пожалуйста.

5 SlySpider  
0
Создал блог о туризме
Прошу указать на мои ошибки, может чего добавить нужно
Вот одна из статей:Сайт про http://slyspider.net - путешествие по странам мира. В хорошем качестве для вас фото сюжеты и аудио-передачи.

4 Valeron78  
0
Привет, я хочу сделать дома ремонт и обставить все дизайнерской мебелью, ну или какой нибудь интресно (не как у всех), не подскажите фирму или сайт где можно найти специалистов, но только так что бы они были уже проверены и были гарантии качества? Подскажите пожалуйста.

3 Bartensssss  
0
Интересные обзоры полезных игр Всё таки тема наверняка многим достала, но http://obzormania.ru/ - лучшие игры, всё таки есть. На http://obzormania.ru/igronevs/ - http://obzormania.ru/

2 sellerman  
0
Я использую этот полигон :
http://goo.gl/y018H

1 sellerman  
0
Мой сайт знакомств :
http://goo.gl/9J1lP

Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006