|
Автор: Емил Атанасов
За работата на форума е небходим web-сървър 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 (). 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> <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> <b>Message:</b><p> <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> <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> <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> <b>Message:</b><p> <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> <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 } } С това мисля, че всичко е ясно, както и в предишния пример. Четене на Темата Това е доста обемен скрипт, затова ще давам подробни пояснения. elseif ($action=="read_topic") { if ($top_name) { connect (); // В този случай данните се избират от от двете таблици-topics и info. $query="select message,post_date,info.posts,info.email from topics,info where topics.name=info.name and topics.top_name='$top_name' and topics.name='$name'"; $result=mysql_query ($query); $row=mysql_fetch_array ($result); $message=$row["message"]; $post_date=$row["post_date"]; $posts=$row["posts"]; $email=$row["email"]; // Изрязваме таговете <br>, за да не се показват на страницата.. $message=str_replace ("<br>","",$message); $char=$message; //Тези преобразувания позволяват да се поставят //в съобщенията смайлове и да се извеждат на страницата като картинки. $char=str_replace (":)","<img src='./images/smile.gif'>",$char); $char=str_replace (":(","<img src='./images/frown.gif'>",$char); $char=str_replace (":o","<img src='./images/redface.gif'>",$char); $char=str_replace (":D","<img src='./images/biggrin.gif'>",$char); $char=str_replace (";)","<img src='./images/wink.gif'>",$char); $char=str_replace (":p","<img src='./images/tongue.gif'>",$char); $char=str_replace (":cool:","<img src='./images/cool.gif'>",$char); $char=str_replace (":rolleyes:","<img src='./images/rolleyes.gif'>",$char); $char=str_replace (":mad:","<img src='./images/mad.gif'>",$char); $char=str_replace (":eek:","<img src='./images/eek.gif'>",$char); $char=str_replace (":confused:","<img src='./images/confused.gif'>",$char); print_header (); ?> // Сега всички избрани данни ги поставяме в html-таблица и ги извеждаме на екрана. <p align=right>| <a href="<?php echo $script ?>">Go to topics</a> |<a href="<?php echo $script ?>?action=add_new_top"> Post new topic</a> | <a href="<?php echo $script ?>?action=post_reply&top_name=<?php echo $top_name ?>"> Post reply</a> | <p><table cellspacing=0 cellpadding=5 border=1 width=100%> <tr><td align=center width=150 bgcolor="D5E6E1"><font face="Arial" size=2 color="808080">Author</font> <td bgcolor="D5E6E1"><font face="serif" size=2 color="0000ff">Topic:</font><font face="serif" size=2 color="ff0000"><?php echo $top_name ?></font></td></tr> <tr><td rowspan=2 bgcolor="D5E6E1" align=center><font face="serif" size=3 color="ff0000"><?php echo $name ?></font> <br><font face="serif" size=2 color="0000ff">Posts:<?php echo $posts ?></font></td> <td bgcolor="e6e8fa" height=30><font face="serif" size=1 color="000080">Posted:<?php echo $post_date ?></font> <a href="mailto:<?php echo $email ?>"><img src="email.gif" border=0></a> <font face="serif" size=1 color="000080">E-mail </font><font face="serif" size=1 color="0000ff"><?php echo $name ?></font> <a href="<?php echo $script ?>?action=edit&top_name=<?php echo $top_name ?>&nick=<?php echo $name ?>&type=message"> <img src="edit.gif" border=0></a> <font face="serif" size=1 color="000080">Edit message</font></td></tr> <tr><td bgcolor="f7f7f7"><font face="serif" size=2 color="000080"><?php echo $char ?></font></td></tr></table> <?php // Ограничиваме количеството записи на страница до 20 съобщения. $lines=20; $begin=$page*$lines; if (empty ($page)) { $page=0; } // Правим ново запитване за извеждане на отговорите по темата. $query="select replies.name,reply,reply_date,info.posts,info.email from replies,info where replies.name=info.name and replies.top_name='$top_name' order by reply_date limit $begin,$lines"; $result=mysql_query ($query); // Нататък всичко е както преди. while ($row=mysql_fetch_array ($result)) { $nick=$row["name"]; $reply=$row["reply"]; $reply_date=$row["reply_date"]; $posts=$row["posts"]; $mail=$row["email"]; $reply=str_replace ("<br>","",$reply); $char=$reply; $char=str_replace (":)","<img src='./images/smile.gif'>",$char); $char=str_replace (":(","<img src='./images/frown.gif'>",$char); $char=str_replace (":o","<img src='./images/redface.gif'>",$char); $char=str_replace (":D","<img src='./images/biggrin.gif'>",$char); $char=str_replace (";)","<img src='./images/wink.gif'>",$char); $char=str_replace (":p","<img src='./images/tongue.gif'>",$char); $char=str_replace (":cool:","<img src='./images/cool.gif'>",$char); $char=str_replace (":rolleyes:","<img src='./images/rolleyes.gif'>",$char); $char=str_replace (":mad:","<img src='./images/mad.gif'>",$char); $char=str_replace (":eek:","<img src='./images/eek.gif'>",$char); $char=str_replace (":confused:","<img src='./images/confused.gif'>",$char); if (mysql_num_rows ($result)) { ?> <table cellspacing=0 cellpadding=5 border=1 width=100%> <tr><td rowspan=2 bgcolor="e6e8fa" align=center width=150><font face="serif" size=2 color="0000ff"> <?php echo $nick ?></font><br><font face="serif" size=2 color="333300">Posts:<?php echo $posts ?></font></td> <td bgcolor="e6e8fa" height=30><font face="serif" size=1 color="000080">Posted:<?php echo $reply_date ?></font> <a href="mailto:<?php echo $mail ?>"><img src="email.gif" border=0></a> </font><font face="serif" size=1 color="000080">E-mail </font><font face="serif" size=1 color="0000ff"><?php echo $nick ?></font> <a href="<?php echo $script ?>?action=edit&top_name=<?php echo $top_name ?>&nick=<?php echo $nick ?>&type=reply&reply_date=<?php echo $reply_date ?>"> <img src="edit.gif" border=0></a> <font face="serif" size=1 color="000080">Edit message</font></td></tr> <tr><td bgcolor="f7f7f7"><font face="serif" size=2><?php echo $char ?></td></tr></table> <?php } } // Формираме линкове за навигация по// страниците в случай, че количеството на записите е повече от 20. // За целта броим количеството на записи //в таблицата replies за нова тема. $query="select COUNT(*) as count from replies where top_name='$top_name'"; $result=mysql_query ($query); $items=mysql_fetch_array ($result); $count=$items["count"]; $pages=ceil ($count/$lines); // В случай, че количеството на записите е повече от 20,//формираме линкове с номера на страниците. if ($count>$lines) { echo "<p align=right>"; for ($i=0;$i<$pages;$i++) { ?> |<a href="<?php echo $script ?>?action=read_topic&top_name=<?php echo $top_name ?>&name=<?php echo $name ?>&page=<?php echo $i ?>"><?php echo ($i+1) ?></a><?php } } } } Това е всичко.Сега виждате колко просто може да се работи с БД с помощта на PHP,и как това може да ни облекчи живота. Всичко това остава зад кадър, а посетителите на форума виждат обичайна html страница. Нататък ще разгледаме как може да редактирате съобщенията. Редактиране на съобщения Редактирането на съобщение може да се наложи, ако потребителят допусне грешка, или иска да промени нещо в текста. Може да се редактират само собствени съобщения, това се контролира от скрипт и БД. В зависимост от това, дали се явява съобщение по тема или отговор на тема, се извеждат 2 различни форми. connect (); // Ако това е тема, намираме я в таблицата topics. if ($type=="message") { $query="select message from topics where name='$nick' and top_name='$top_name'"; $result=mysql_query ($query); $row=mysql_fetch_array ($result); $message=$row["message"]; $message=str_replace ("<br>","",$message); print_header (); // Поместваме съобщението във формата за редактиране. ?> <h3 align=center><font color="0000ff">Edit message.</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="editmsg" method="GET"> <table width=60% align=center bgcolor="aaaaaa"> <tr><td> <tr><td><b>Your nick:</b><td> <input type="text" name="name" size=20> <tr><td><b>Your password:</b><td><input type="password" name="passwd" size=20> <tr><td colspan=2> <b>Message:</b><p> <textarea cols=40 rows=15 WRAP 80="virtual" name="post"> <?php echo $message ?><br></textarea> <tr><td colspan=2><input type="hidden" name="action" value="edit"> <tr><td colspan=2><input type="hidden" name="submit" value="1"> <tr><td colspan=2><input type="hidden" name="top_name" value="<?php echo $top_name ?>"> <tr><td colspan=2><input type="hidden" name="nick" value="<?php echo $nick ?>"> <tr><td colspan=2><input type="hidden" name="type" value="<?php echo $type ?>"> <tr><td colspan=2><input type="hidden" name="reply_date" value="<?php echo $reply_date ?>"> <tr><td colspan=2 align=center> <br><input type="submit" value="Submit"></table> <?php } elseif ($type=="reply") { // Ако това е отговор по тема, намираме го в //таблицата replies по името на темата. $query="select reply from replies where name='$nick' and top_name='$top_name' and reply_date='$reply_date'"; $result=mysql_query ($query); $row=mysql_fetch_array ($result); $reply=$row["reply"]; $reply=str_replace ("<br>","",$reply); print_header (); ?> <h3 align=center><font color="0000ff">Edit 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="editmsg" method="GET"> <table width=60% align=center bgcolor="aaaaaa"> <tr><td> <tr><td><b>Your nick:</b><td><input type="text" name="name" size=20> <tr><td><b>Your password:</b><td><input type="password" name="passwd" size=20> <tr><td colspan=2> <b>Message:</b><p> <textarea cols=40 rows=15 WRAP 80="virtual" name="post"> <?php echo $reply ?><br></textarea> <tr><td colspan=2><input type="hidden" name="action" value="edit"> <tr><td colspan=2><input type="hidden" name="submit" value="1"> <tr><td colspan=2><input type="hidden" name="top_name" value="<?php echo $top_name ?>"> <tr><td colspan=2><input type="hidden" name="nick" value="<?php echo $nick ?>"> <tr><td colspan=2><input type="hidden" name="type" value="<?php echo $type ?>"> <tr><td colspan=2><input type="hidden" name="reply_date" value="<?php echo $reply_date ?>"> <tr><td colspan=2 align=center> <br><input type="submit" value="Submit"></table> <?php } } Нататък се обработват данните. elseif ($action=="edit") { if ($submit) { connect (); // Правим всичко както си е обичайно.Променливата //$end- се добавя в края на редактируемото съобщение. $date=date ( "Y-m-d H:i:s",mktime ()); $end=" ---------------------------------------------------------- This message was edited by $nick $date."; $post=str_replace ("'"," ",$post); $post.=$end; $post=htmlspecialchars ($post); $post=nl2br ($post); // Проверяваме името и паролата. if ($type=="message") { $query="select id from info where name='$name' and password='$passwd'"; $result=mysql_query ($query); // Ако всичко е ОК и ако това е темат-обновяваме таблицата topics. if (mysql_num_rows ($result) && $name==$nick) { $query="update topics set message='$post' where top_name='$top_name'"; $result=mysql_query ($query); print_header (); ?> // Изказваме благодарности на посетителя. <h3 align=center>Thank you,<font color='ff0000'><?php echo $nick ?></font>!</h3> <p>Your message was changed. <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 (); ?> // Ако името и паролата не са намерени или потребителя //не се явява автор на съобщението се извежда грешка. <h3 align=center>Error!</h3> <p>This message cannot be edited.May be you entered incorrect nick or password, or you are not an author of this message. <p>Please,go back and try again. <p><center>| <a href='javascript:history.back ()'> Go back</a>| <a href="<?php echo $script ?>">Go to topics</a> |</center> <?php } } elseif ($type=="reply") { // Ако това е отговор на тема, изменяме таблицата replies. $query="select id from info where name='$name' and password='$passwd'"; $result=mysql_query ($query); if (mysql_num_rows ($result) && $name==$nick) { $query="update replies set reply='$post' where top_name='$top_name' and name='$nick' and reply_date='$reply_date'"; $result=mysql_query ($query); print_header (); ?> <h3 align=center>Thank you,<font color='ff0000'><?php echo $nick ?></font>!</h3> <p>Your message was changed. <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 (); ?> <h3 align=center>Error!</h3> <p>This message cannot be edited.May be you entered incorrect nick or password, or you are not an author of this message. <p>Please,go back and try again. <p><center>| <a href='javascript:history.back ()'> Go back</a>| <a href="<?php echo $script ?>">Go to topics</a> |</center> <?php } } } Както виждате, няма нищо ново. Същите SQL-запитвания свързани с PHP-функции. Ако потребителят е забравил паролата си Ако потребителят е забравил паролата си, достатъчно е да въведе своя e-mail, който е указал при регистрацията, и паролата ще му бъде изпратена на този e-mail. Форма за въвеждане: <p><h4 align=center>Please,enter your e-mail address,you provided while registered.</h4> <p><FORM ACTION="<?php echo $script ?>" METHOD="POST"> <p align=right><a href="forum.php3">Home</a> <center><TABLE BGCOLOR="bfbfbf"> <tr><td colspan=2> <TR><td><b>E-mail:</b><TD><INPUT TYPE="text" NAME="email" SIZE="20"> <tr><td colspan=2><input type="hidden" name="action" value="remind_pass"> <TR><TD colspan=3><p><center><INPUT TYPE="submit" VALUE="Submit"></center> Обработка на данните: elseif ($action=="remind_pass") { if ($email) { connect (); // Проверяваме има ли такъв e-mail в БД. $query="select name,password from info where email='$email'"; $result=mysql_query ($query); $row=mysql_fetch_array ($result); $name=$row["name"]; $password=$row["password"]; // Ако има, изпращаме съобщение с паролата. if (mysql_num_rows ($result)) { $to=$email; $subject="Password reminder"; $mes="Your password:".$password."."; mail ("$to","$subject","$mes"); print_header (); ?> <h3 align=center>Hello,<?php echo $name ?>!</h3> <p>You entered valid e-mail! <p>Your password sent to your e-mail address. <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 (); ?> // Ако e-mail не е намерен излиза съобщение за грешка. <h3 align=center>Sorry!</h3> <p>This e-mail address hasn't been found in our database.<br> Please,verify your e-mail address an try again,or go to our registration page and register. <p><center>| <a href="<?php echo $script ?>?action=remind_pass">Go back</a> |<a href="<?php echo $script ?>?action=register"> Register</a> |</center> <?php } } Главна страница на форума Ето че стигнахме до края, по точно до началната страница на форума, на който се показва списък на темите, техните автори, количество на отговорите, дати на създаване на темите и дати на последните отговори. По принцип няма нищо ново. Количеството записи на страницата също е ограничено до 20. print_header (); ?> <h2 align=center><font color="0000ff">Webboard.</font></h2> <p align=right>| <a href="<?php echo $script ?>?action=add_new_top">Post new topic</a> | <a href="<?php echo $script ?>?action=register">Registration</a> | <a href="<?php echo $script ?>?action=remind_pass"> Forgot password?</a> | <a href="<?php echo $script ?>?action=search">Search</a> | <p><table cellspacing=0 cellpadding=5 border=1> <tr bgcolor="D5E6E1"><td align=center width=300 height=50><font face="arial" size=2 color="0000ff">Topic name</font></td> <td align=center width=120 height=50><font face="arial" size=2 color="0000ff">Topic starter</font></td> <td align=center width=50 height=50><font face="arial" size=2 color="0000ff">Replies</font></td> <td align=center width=120 height=50><font face="arial" size=2 color="0000ff">Posted</font></td> <td align=center width=120 height=50><font face="arial" size=2 color="0000ff">Last reply</font></td> <?php connect (); $lines=20; $begin=$page*$lines; if (empty ($page)) { $page=0; } $query="select top_name,name,replies,post_date,last_reply from topics order by last_reply desc limit $begin,$lines"; $result=mysql_query ($query); while ($row=mysql_fetch_array ($result)) { $name=$row["name"]; $top_name=$row["top_name"]; $replies=$row["replies"]; $post_date=$row["post_date"]; $last_reply=$row["last_reply"]; ?> <tr bgcolor='e6f8fa'><td><a href="<?php echo $script ?>?action=read_topic&top_name=<?php echo $top_name ?>&name=<?php echo $name ?>"><?php echo $top_name ?></a> <?php echo "</td><td>".$name."</td><td align=center>".$replies."</td><td>".$post_date."</td><td>".$last_reply."</td></tr>"; } echo "</table>"; $query="select COUNT(*) as count from topics"; $result=mysql_query ($query); $items=mysql_fetch_array ($result); $count=$items["count"]; $pages=ceil ("$count/$lines"); if ($count>$lines) { echo "<p align=right>"; for ($i=0;$i<$pages;$i++) { ?> |<a href="<?php echo $script ?>?page=<?php echo $i ?>"><?php echo ($i+1) ?></a><?php } } } ?> Разбира се даденият форум не е пример за подражание. Всеки си има собствен стил на програмиране. Някой друг може да го напише по своему. Но представеният материал може да послужи като основа. Автор: Емил Атанасов
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||








