因為論壇本身的設(shè)置是如果該論壇完全開放的話,游客可以發(fā)帖子。
<?php if(!isset($_SESSION["username"])){ $_SESSION["username"]="Guest"; } ?>
那么該論壇的頁面應(yīng)該相應(yīng)的有添加帖子的按鈕:
<?php $F=$_GET["F"]; $result=mysql_fetch_array(mysql_query("select isguest from forums where ID='$F'")); $isguest=$result["isguest"]; //從數(shù)據(jù)庫中提取該論壇版塊是否完全開放,如果完全開放游客就可以發(fā)帖子了,否則只有注冊用戶才可以 if($isguest==0){ if($_SESSION["username"] && $_SESSION["islogined"]) echo"<a href=addnew.php?F=$F><img src=\"images/add.gif\" /></a>"; }else{ echo"<a href=addnew.php?F=$F><img src=\"images/add.gif\" /></a>"; } ?>
addnew.php?F=N 這里傳遞函數(shù)。表明添加新帖子要添加到論壇版塊。 添加頁面如圖所示:
點擊放大
這里的表單里會有一個隱藏字段,記錄論壇版面的ID號。
處理表單非常簡單,就是INSERT來實現(xiàn):
<?php require_once "global.php"; require_once "conn.php"; $F=$_POST["F"]; $title=$_POST["title"]; $content=$_POST["Content"]; $author=$_POST["username"]; $face=$_POST["face"]; $result=mysql_fetch_array(mysql_query("select isguest from forums where ID='$F'")); $isguest=$result["isguest"]; //下面肯定要再驗證一下該論壇版塊用戶是否可以發(fā)帖 if($isguest==0){ if(empty($_SESSION["username"])||empty($_SESSION["islogined"])){ echo "<script>alert('您尚未登陸,請先登陸!');location='login.php';</script>"; exit(); } } $sql="insert into topic (title,author,last_post_author,last_post_time,no_of_hit,no_of_reply, locked,face,topic,good,forum_id) values ('$title','$author','$author',now(),0,0,0,'$face',0,0,'$F')"; mysql_query($sql); $topicID=mysql_insert_id(); //這里:mysql_insert_id()函數(shù)可以取出剛才插入操作成功后的ID值; //插入到主題表是第一步 $sql="insert into thread (topicID,face,title,author,post_time,subject) values ('$topicID','$face','$title','$author',now(),'$content')"; mysql_query($sql); //插入到帖子表是第二步 if($author!="Guest"){ $sql="update member set no_of_post = no_of_post + 1 where username='$author'"; mysql_query($sql); //如果不是游客的話就更新用戶表。其實這里用戶表中開始就應(yīng)該存在一個管理員和一個游客的信息。游客發(fā)帖子默認(rèn)的值為空,這樣即使更新也更新不了。 } ?>
現(xiàn)在我們來看thread.php。這個頁面和forums.php有很相似的地方,包括分頁。只是這里提取了thread表中的所有數(shù)據(jù)。
如下:
<?php $sql="select A.ID,A.title,A.author,A.post_time,A.subject,A.face,B.groupID,B.email, B.headimg,B.homepage,B.qq,B.MSN,B.jointime,B.no_of_post,B.sign from thread A,member B where A.topicID=$T and A.author = B.username order by A.post_time asc limit $p_start,$tread_list_rows"; $result=mysql_query($sql); //這里的SQL語句是查詢2個表,MEMBER和THREAD表。 $sqlno="select * from thread where topicID='$T'"; $number=mysql_num_rows(mysql_query($sqlno)); while($row=mysql_fetch_array($result)){ //這里是HTML代碼 } ?> 果當(dāng)前用戶有權(quán)限發(fā)表帖子,那么每頁下面將出現(xiàn)快速回復(fù)的表單。
點擊放大
<?php if($isguest==0){ if($_SESSION["username"] && $_SESSION["islogined"]){ //這里是快速回復(fù)的HTML表單 } }else{ //這里是快速回復(fù)的HTML表單 } //思路也很簡單,如果完全開放,自然而然就出現(xiàn)回復(fù)表單,允許回復(fù);否則如果用戶登陸,就出現(xiàn)回復(fù)表單。 ?>
回復(fù)表單里要有主題帖子的ID編號。
回復(fù)的代碼同樣是插入,然后更新相關(guān)表。
<?php require_once "global.php"; require_once "conn.php"; $F=$_POST["F"]; $T=$_POST["T"]; $title=$_POST["title"]; $content=$_POST["Content"]; $author=$_POST["username"]; $face=$_POST["face"];$result=mysql_fetch_array($db->db_query("select isguest from forums where ID='$F'")); $isguest=$result["isguest"];
if($isguest==0){ if(empty($_SESSION["username"])||empty($_SESSION["islogined"])){ echo "<script>alert('您尚未登陸,請先登陸!');location='login.php';</script>"; exit(); } }
$sql="insert into thread (topicID,face,title,author,post_time,subject) values ('$T','$face','$title','$author',now(),'$content')"; $db->mysql_query($sql); //插入表,同時記錄TOPIC的主鍵 $sql="update topic set last_post_author ='$author',last_post_time=now(),no_of_reply = no_of_reply + 1 where ID = '$T'"; $db->mysql_query($sql); //更新主題表,最后回復(fù)人,最后更新時間 $sql="update forums set last_post_author='$author',last_post_time=now() where ID='$F'"; $db->mysql_query($sql); //更新論壇版塊的信息,最后回復(fù),最后更新時間 if($author!="Guest"){ $sql="update member set no_of_post = no_of_post + 1 where username='$author'"; mysql_query($sql); //更新發(fā)帖人的發(fā)帖數(shù)量 } ?>
編輯帖子,同樣要求權(quán)限。必須登陸;用戶必須是帖子的作者;管理員可以管理所有的帖子
<?php if($_SESSION["groupID"]=="2"){ echo" <a href=\"editor.php?F=$F&T=$T&ID=$ID\" class=\"forum\">編輯</a>"; }elseif($_SESSION["username"] && $_SESSION["islogined"]){ if($_SESSION["username"]==$author) echo " <a href=\"editor.php?F=$F&T=$T&ID=$ID\" class=\"forum\">編輯</a>"; } ?>
點擊放大
<?php require_once "global.php"; require_once "conn.php"; $F=$_GET["F"]; $T=$_GET["T"]; $ID=$_GET["ID"]; if(empty($F)||empty($T)||empty($ID)) echo "<script>history.back;</script>"; $sql="select A.author,A.title,A.face,A.subject,B.title as topictitle from thread A,topic B where A.ID='$ID' and A.topicID=B.ID"; $rs=mysql_fetch_array($db->db_query($sql)); $rename=$rs["author"]; $title=$rs["title"]; $face=$rs["face"]; $topictitle=$rs["topictitle"]; $resubject=$rs["subject"]; if($_SESSION["groupID"]!="2"){ if(($_SESSION["username"]!=$rename)||empty($_SESSION["islogined"])) echo "<script>history.go(-1);</script>"; } $sresult=mysql_fetch_array(mysql_query("select forum_name,isguest from forums where ID='$F'")); $forum_name=$sresult["forum_name"]; //這里檢查當(dāng)前用戶是否有編輯帖子的權(quán)限,并且按照ID號提取出該帖子的所有內(nèi)容 ?>
處理編輯的帖子就是更新原先數(shù)據(jù)。這里不做多說了。
////////////////////////////////////////////////// 下面到了個人資料管理。control.php,管理“我的資料”
這里比較簡單,也不再寫了。
正如5do8所說的,最好要把常用的程序(如連接數(shù)據(jù)庫)寫成類,容易管理,而且速度和性能上也有提高。我是個菜鳥,對于類不甚了解,想了解這個東西的朋友請參照這里: http://www.phpchina.com/bbs/viewthread.php?tid=13765&highlight=
這里是按照我的理解來寫的這個論壇的連接數(shù)據(jù)庫類:dbclass.php
class Eastsin { function db_connect($db_host_ip,$db_login_name,$db_login_password){ mysql_connect($db_host_ip,$db_login_name,$db_login_password); } function db_select($db_name){ mysql_select_db($db_name); } function db_query($sql){ return mysql_query($sql); } function db_fetch_array($result){ return mysql_fetch_array($result); } function db_result($query,$row){ return mysql_result($query,$row); } function db_rows($query){ return mysql_num_rows($query); } function db_ID(){ return mysql_insert_id(); } function db_close(){ mysql_close(); } }
在使用的時候:
$db=new Eastsin; //初始化一個類,并把這個對象賦給變量$db $db->db_selsct($dbname); //訪問類的方法,類中定義的函數(shù)即為類的方法。 $sql="...."; $db->db_query($sql); /* 上面兩句等同于: $sql="...."; mysql_query($sql); 類中其他方法的使用同上; */
我的論壇還在完善中,還有關(guān)于安全性、容錯處理等我也再學(xué)習(xí)中。一個小論壇從思路上講還是比較簡單的,但是真正做起來還是要費些力氣和腦筋的。 (源文件請大家允許我稍后發(fā)布)
這樣,這個小教程算是簡單的完成了。作者水平有限,也沒有寫過教程的經(jīng)驗,所以里面的不足之出大家多包涵指點。在此謝謝大家。 我的 QQ:278502721; MSN:fengyuedao#hotmail.com或eastsin.com#hotmail.com; E-mail:numsix#163.com 以上將#換成@ 希望得到您的指導(dǎo)。
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2703251-1-1.html
本文鏈接:http://www.95time.cn/tech/program/2006/4352.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 我的微型論壇的簡單教程 [8] 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|