[php] 我的微型論壇的簡(jiǎn)單教程[已完成]第8/8頁(yè)
因?yàn)檎搲旧淼脑O(shè)置是如果該論壇完全開(kāi)放的話,游客可以發(fā)帖子。
<?php
if(!isset($_SESSION["username"])){
$_SESSION["username"]="Guest";
}
?>
那么該論壇的頁(yè)面應(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ù)庫(kù)中提取該論壇版塊是否完全開(kāi)放,如果完全開(kāi)放游客就可以發(fā)帖子了,否則只有注冊(cè)用戶才可以 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ù)。表明添加新帖子要添加到論壇版塊。
添加頁(yè)面如圖所示:
這里的表單里會(huì)有一個(gè)隱藏字段,記錄論壇版面的ID號(hào)。
處理表單非常簡(jiǎn)單,就是INSERT來(lái)實(shí)現(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"]; //下面肯定要再驗(yàn)證一下該論壇版塊用戶是否可以發(fā)帖
if($isguest==0){
if(empty($_SESSION["username"])||empty($_SESSION["islogined"])){
echo "<script>alert('您尚未登陸,請(qǐng)先登陸!');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); //如果不是游客的話就更新用戶表。其實(shí)這里用戶表中開(kāi)始就應(yīng)該存在一個(gè)管理員和一個(gè)游客的信息。游客發(fā)帖子默認(rèn)的值為空,這樣即使更新也更新不了。
}
?>
現(xiàn)在我們來(lái)看thread.php。這個(gè)頁(yè)面和forums.php有很相似的地方,包括分頁(yè)。只是這里提取了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語(yǔ)句是查詢(xún)2個(gè)表,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ā)表帖子,那么每頁(yè)下面將出現(xiàn)快速回復(fù)的表單。
<?php
if($isguest==0){
if($_SESSION["username"] && $_SESSION["islogined"]){
//這里是快速回復(fù)的HTML表單
}
}else{
//這里是快速回復(fù)的HTML表單
} //思路也很簡(jiǎn)單,如果完全開(kāi)放,自然而然就出現(xiàn)回復(fù)表單,允許回復(fù);否則如果用戶登陸,就出現(xiàn)回復(fù)表單。
?>
回復(fù)表單里要有主題帖子的ID編號(hào)。
回復(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('您尚未登陸,請(qǐng)先登陸!');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);
//插入表,同時(shí)記錄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ù)人,最后更新時(shí)間 $sql="update forums set last_post_author='$author',last_post_time=now() where ID='$F'";
$db->mysql_query($sql);
//更新論壇版塊的信息,最后回復(fù),最后更新時(shí)間 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號(hào)提取出該帖子的所有內(nèi)容
?>
處理編輯的帖子就是更新原先數(shù)據(jù)。這里不做多說(shuō)了。
//////////////////////////////////////////////////
下面到了個(gè)人資料管理。control.php,管理“我的資料”
這里比較簡(jiǎn)單,也不再寫(xiě)了。
正如5do8所說(shuō)的,最好要把常用的程序(如連接數(shù)據(jù)庫(kù))寫(xiě)成類(lèi),容易管理,而且速度和性能上也有提高。我是個(gè)菜鳥(niǎo),對(duì)于類(lèi)不甚了解,想了解這個(gè)東西的朋友請(qǐng)參照這里:
http://www.phpchina.com/bbs/viewthread.php?tid=13765&highlight=
這里是按照我的理解來(lái)寫(xiě)的這個(gè)論壇的連接數(shù)據(jù)庫(kù)類(lèi):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();
}
}
在使用的時(shí)候:
$db=new Eastsin; //初始化一個(gè)類(lèi),并把這個(gè)對(duì)象賦給變量$db
$db->db_selsct($dbname); //訪問(wèn)類(lèi)的方法,類(lèi)中定義的函數(shù)即為類(lèi)的方法。 $sql="....";
$db->db_query($sql);
/*
上面兩句等同于:
$sql="....";
mysql_query($sql);
類(lèi)中其他方法的使用同上;
*/
我的論壇還在完善中,還有關(guān)于安全性、容錯(cuò)處理等我也再學(xué)習(xí)中。一個(gè)小論壇從思路上講還是比較簡(jiǎn)單的,但是真正做起來(lái)還是要費(fèi)些力氣和腦筋的。 (源文件請(qǐng)大家允許我稍后發(fā)布)
這樣,這個(gè)小教程算是簡(jiǎn)單的完成了。作者水平有限,也沒(méi)有寫(xiě)過(guò)教程的經(jīng)驗(yàn),所以里面的不足之出大家多包涵指點(diǎn)。在此謝謝大家??!
我的
QQ:278502721;
MSN:fengyuedao#hotmail.com或eastsin.com#hotmail.com;
E-mail:numsix#163.com
以上將#換成@
希望得到您的指導(dǎo)。
相關(guān)文章
Yii2.0使用阿里云OSS的SDK上傳圖片、下載、刪除圖片示例
本篇文章主要介紹了Yii2.0使用阿里云OSS的SDK上傳圖片、下載、刪除圖片示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09ThinkPHP框架實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的方法示例【基于PHPExcel】
這篇文章主要介紹了ThinkPHP框架實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了thinkPHP添加org擴(kuò)展基于PHPExcel進(jìn)行Excel數(shù)據(jù)的導(dǎo)出操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05ThinkPHP實(shí)現(xiàn)將SESSION存入MYSQL的方法
這篇文章主要介紹了ThinkPHP實(shí)現(xiàn)將SESSION存入MYSQL的方法,需要的朋友可以參考下2014-07-07基于PHP的登錄和注冊(cè)的功能的實(shí)現(xiàn)
這篇文章主要介紹了基于PHP的登錄和注冊(cè)的功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08php刪除數(shù)組指定元素實(shí)現(xiàn)代碼
這篇文章主要介紹了php刪除數(shù)組指定元素實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05smarty簡(jiǎn)單分頁(yè)的實(shí)現(xiàn)方法
這篇文章主要介紹了smarty簡(jiǎn)單分頁(yè)的實(shí)現(xiàn)方法,以一個(gè)具體的實(shí)例講述了smarty分頁(yè)的完整實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下2014-10-10淺談Laravel POST,PUT,PATCH 路由的區(qū)別
今天小編就為大家分享一篇淺談Laravel POST,PUT,PATCH 路由的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10php利用單例模式實(shí)現(xiàn)日志處理類(lèi)庫(kù)
該日志類(lèi)利用單例模式,節(jié)省資源。自行判斷文件大小,超出指定大小則按序自行創(chuàng)建文件。2014-02-02PHP用戶驗(yàn)證和標(biāo)簽推薦的簡(jiǎn)單使用
這篇文章主要介紹了PHP用戶驗(yàn)證和標(biāo)簽推薦的簡(jiǎn)單使用,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10