国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

用PHP建立微型論壇的簡單教程

瀏覽:30日期:2024-07-09 15:05:16
最好手邊能有一本PHP基礎(chǔ)的書,我用的書一本是人民郵電的《精通PHP+MYSQL應(yīng)用開發(fā)》(很多人都反映它不怎么樣);另一本是北京理工大學(xué)出版社的《PHP基礎(chǔ)教程》,書比較老了,但是介紹的PHP函數(shù)比較細(xì)致。我文字表達(dá)能力有限,希望看不明白的同學(xué)表罵我…… 另:我利用下班時間寫這篇東西,打算一邊完善這個小論壇一邊寫。因為時間有限,作者水平更有限,所以我準(zhǔn)備每天更新一點(diǎn)直到寫完為止,要一下子全部寫完我估計很有難度,希望大家見諒) 下面開始吧: 我的論壇的功能: 用戶分三個級別:游客;注冊用戶;管理員 用戶:用戶注冊;登陸;發(fā)帖;回復(fù);編輯自己的帖子; 管理員:管理(包括添加、修改、刪除)論壇版塊;管理帖子(置頂、精華、移動、刪除); 如果版塊完全開放則游客也可以發(fā)帖子。 1、PHP環(huán)境搭建及MYSQL安裝我不在說了,經(jīng)典原來有詳細(xì)說明的帖子。你還可以參照:http://bbs.blueidea.com/viewthread.php?tid=1645815或者h(yuǎn)ttp://www.phpe.net/articles/363.shtml這里來在你的電腦上搭建PHP運(yùn)行環(huán)境。我的環(huán)境:WIN2000+APACHE 2.23+MYSQL 5.02、建立數(shù)據(jù)庫。PHPMYADMIN是個不錯的管理MYSQL的東東,大家可以使用它來建立數(shù)據(jù)庫。我用的是MYSQL-FRONT,也很好用。其實(shí)一個軟件,順手就好,用不著跟風(fēng)。呵呵。或者你也可以使用MYSQL本身提供的MySQL Command Line Client來操作數(shù)據(jù)庫:輸入登陸密碼,登陸成功后顯示如下:建立mybbs數(shù)據(jù)庫,代碼如下:mysql> CREATE DATABASE mybbs;成功后顯示Query OK, 1 row affected。以下論壇建表同理:建立論壇版塊表forums,結(jié)構(gòu)如下:mysql>CREATE TABLE `forums` (->`ID` int(11) NOT NULL auto_increment,->`forum_name` varchar(50) NOT NULL default '',->`forum_description` varchar(200) NOT NULL default '',->`last_post_author` varchar(50) NOT NULL default '',->`last_post_time` datetime NOT NULL default '0000-00-00 00:00:00',->`forum_order` tinyint(3) NOT NULL default '0',->`isguest` tinyint(3) NOT NULL default '0',->PRIMARY KEY (`ID`)->);運(yùn)行成功后圖如下所示:建立用戶表member,結(jié)構(gòu)如下mysql>CREATE TABLE `member` (->`ID` int(11) NOT NULL auto_increment,->`groupID` tinyint(3) NOT NULL default '0',->`username` varchar(50) NOT NULL default '',->`real_name` varchar(50) NOT NULL default '',->`password` varchar(50) NOT NULL default '',->`email` varchar(50) NOT NULL default '',->`headimg` varchar(50) NOT NULL default '',->`homepage` varchar(50) default NULL,->`qq` varchar(10) default NULL,->`MSN` varchar(50) default NULL,->`jointime` datetime NOT NULL default '0000-00-00 00:00:00',->`no_of_post` smallint(6) default NULL,->`sign` varchar(200) default NULL,->PRIMARY KEY (`ID`)->);建立主題表tioic,如下:mysql>CREATE TABLE `topic` (->`ID` int(11) NOT NULL auto_increment,->`title` varchar(100) NOT NULL default '',->`author` varchar(50) NOT NULL default '',->`last_post_author` varchar(50) default NULL,->`last_post_time` datetime NOT NULL default '0000-00-00 00:00:00',->`no_of_hit` smallint(6) NOT NULL default '0',->`no_of_reply` mediumint(9) NOT NULL default '0',->`locked` tinyint(3) NOT NULL default '0',->`face` varchar(50) default NULL,->`topic` tinyint(3) NOT NULL default '0',->`good` tinyint(3) NOT NULL default '0',->`forum_id` mediumint(9) NOT NULL default '0',->PRIMARY KEY (`ID`)->);建立帖子表thread,結(jié)構(gòu)如下:mysql>CREATE TABLE `thread` (->`ID` int(11) NOT NULL auto_increment,->`topicID` smallint(6) NOT NULL default '0',->`face` varchar(50) default NULL,->`title` varchar(100) default NULL,->`author` varchar(50) NOT NULL default '',->`post_time` datetime NOT NULL default '0000-00-00 00:00:00',->`subject` mediumtext NOT NULL,->PRIMARY KEY (`ID`)->);3、連接數(shù)據(jù)庫 (1)連接數(shù)據(jù)庫:mysql_connect(string hostname,string username ,string password); hostname:服務(wù)器名。本機(jī)"localhost"username:登陸用戶名。我這里是"root"password:登陸密碼。我這里也是"root"(2)選擇數(shù)據(jù)庫:mysql_select_db(string database_name,int[link_identifier]); database_name就是數(shù)據(jù)庫名,這里就是剛剛建立的mybbs了。 link_identifier:連接標(biāo)識,不寫就默認(rèn)是上次使用的連接,具體見下面。 完整的寫法如下: <?php mysql_connect("localhost","root","root");//千萬不要漏了分號,唉,我自己就經(jīng)常漏掉…… mysql_select_db("mybbs"); /*或者你可以這樣寫: $connect_db=mysql_connect("localhost","root","root"); mysql_select_db("mybbs",$connect_db); */ ?> 就象ASP里的conn一樣,把這個連接單獨(dú)放到一個文件里,方便以后調(diào)用。不過ASP用的include,PHP中使用require()或者include()而已,如下: ASP中:<!--#include file="conn.asp"--> php中: <?php require("conn.php"); %> 或者: <?php include("conn.php"); ?> 如果你希望測試下剛才連接數(shù)據(jù)庫是否成功,就輸出mysql_error()來看: <?php mysql_connect("localhost","root","root"); mysql_select_db("mybbs"); echo mysql_error(); ?> 連接正常的話不會輸出輸出任何錯誤的。 (3)關(guān)閉數(shù)據(jù)庫連接,可以釋放系統(tǒng)資源。 mysql_close(); 我們把連接和關(guān)閉數(shù)據(jù)庫的程序都寫在一個文件conn.php中吧: CODE: <?php mysql_connect("localhost","root","root"); mysql_select_db("mybbs"); Function close_db(){ mysql_close(); } //注意:函數(shù)一種是帶返回值的,一種沒有值。 ?> 既然require()可以調(diào)用外部文件,我們不妨將常用的數(shù)據(jù)寫進(jìn)變量里然后也單獨(dú)放在一個文件里,這和ASP道理一樣的。我命名了一個文件global.php,用來初始化這些數(shù)據(jù)。 <?php $gb_name="東訊科技PHP微型論壇"//微型論壇的名字,用在網(wǎng)頁的title標(biāo)簽里 $gb_version=" Version 1.0"//版本號 $gb_copyright="Powered by <a target="_blank">Eastsin-東訊科技 2006</a>"//版權(quán)及連接 //其他的常用的數(shù)據(jù)可以在做程序的過程中不斷的加到這個文件中來。 ?> 現(xiàn)在已經(jīng)存在兩個文件了,一個conn.php,一個global.php。前一個是記錄和MYSQL連接的文件,后一個是記錄常用數(shù)據(jù)的文件。4、好了,上面數(shù)據(jù)庫也建立了,PHP連接數(shù)據(jù)庫我們也做好了。那么,我們該學(xué)習(xí)對MYSQL數(shù)據(jù)庫進(jìn)行操作了吧: select 查詢; update 更新; insert 插入; delete 刪除; 如果你有ASP或其他語言基礎(chǔ)的話,我想理解應(yīng)該很easy吧! 那么第一步,從首頁開始:讀取數(shù)據(jù)庫中的信息。首頁主要是循環(huán)顯示forums中的所有論壇版塊。對于有基礎(chǔ)的人來說,查詢語句很容易: <?php $sql="select * from forums"?> 那么,如何來執(zhí)行這個查詢語句呢?PHP中用mysql_query()函數(shù)來執(zhí)行SQL語句。這里要注意的是:mysql_query()函數(shù)來執(zhí)行SQL語句時,如果執(zhí)行的是一個SELECT語句,執(zhí)行后返回一個INT型的標(biāo)識,如果是非SELECT語句(INSERT,UPDATE等)返回的是boolean型的數(shù)據(jù)。所以有ASP基礎(chǔ)的同學(xué)不要把這里認(rèn)為成已經(jīng)成功得到記錄集。我們可以先來看看ASP: <!--#include file="conn.asp"--> <% sql="select * from forums" rs.open sql,conn,1,1 do while not rs.eof response.write rs("***") rs.movenext loop %> 如果得到了數(shù)據(jù),直接rs("***")就可以得到想要的數(shù)據(jù)了。但是PHP中這里,執(zhí)行完mysql_query()函數(shù),并沒有得到最終我們想要的數(shù)據(jù)。還需要使用其他函數(shù)來獲取最終數(shù)據(jù),我經(jīng)常使用mysql_fetch_array()和mysql_fetch_row()來獲取查詢結(jié)果。這兩個函數(shù)操作的對象都是剛才mysql_query()執(zhí)行后的結(jié)果。所以,我這樣寫: <?php require("conn.php"); //先把conn.php引入,目的就是打開數(shù)據(jù)庫連接 $sql="select * from forums"$result=mysql_query($sql); while($rs=mysql_fetch_array($result)){ echo "論壇:".$rs["forum_name"]."</br>"} ?>這樣運(yùn)行,頁面沒有任何輸出,因為我們剛建立的數(shù)據(jù)庫中沒有任何數(shù)據(jù)!那么,我希望讓論壇更加人性化,假如沒有論壇版塊應(yīng)該輸出“對不起,論壇尚在建設(shè)中……的字樣應(yīng)該怎么辦??mysql_num_rows()可以得到結(jié)果數(shù)目,mysql_result()也可以。 mysql_num_rows(int result)用來獲取查詢結(jié)果數(shù)目。參數(shù)result是mysql_query()等返回的結(jié)果標(biāo)識; mysql_result(int resule,int row)用來獲取查詢記錄集,參數(shù)result是mysql_query()等返回的結(jié)果標(biāo)識,row是要獲取記錄的行號; 代碼如下: <?php require("conn.php"); $sql="select * from forums"$result=mysql_query($sql); $num=mysql_num_rows($result); if($num>0){ while($rs=mysql_fetch_array($result)){ echo "論壇:".$rs["forum_name"]."</br>"} }else{ echo "對不起,論壇尚在建設(shè)中……"} /* 或者你可以這樣寫 $sql="select count(*) from forums"$num=mysql_result(mysql_query($sql),0); $sql="select * from forums"$result=mysql_query($sql); 或者這樣寫 $sql="select count(*) as num from forums"$result=mysql_query($sql); $num=mysql_fetch_array["num"]; */ ?> 運(yùn)行結(jié)果如下圖: HOHO~~~~~,能夠讀取數(shù)據(jù)了,那下面我們該美化一下我們的首頁了吧,用DW吧^@^。下面是首頁論壇列表的表格在DW中(我美工不匝地,望大家先不要扔磚頭……):代碼如下:<?phprequire("conn.php");……?><table width="90%" border="0" align="center" cellpadding="5" cellspacing="1"><tr><td colspan="3">論壇列表</td></tr><tr><td width="6%"><strong>狀態(tài)</strong></td><td width="70%"><strong>論壇</strong></td><td width="24%"><strong>最后更新</strong></td></tr><?php$sql="select * from forums";$result=mysql_query($sql);$num=mysql_num_rows($result);if($num>0){while($row=$db->db_fetch_array($result)){?><tr><td></td><td><?php echo "<div class="bold"><a class="forum" href="forums.php?F=".$row["ID"]."">".$row["forum_name"]."</a></div>".$row["forum_description"] ?></td><td><div><?php echo $row["last_post_time"]." By ".$row["last_post_author"]?></div></td></tr><?php}}else{echo "<tr><td colspan=3>對不起,論壇尚在建設(shè)中……</td></tr>";}close_db(); //調(diào)用close_db()函數(shù),關(guān)閉連接,釋放系統(tǒng)資源?></table>運(yùn)行結(jié)果如下圖:現(xiàn)在數(shù)據(jù)庫中還沒有數(shù)據(jù),所以,我們運(yùn)行首頁,只顯示“對不起,論壇尚在建設(shè)中……。既然我們很希望看到結(jié)果,就往數(shù)據(jù)庫中加幾條數(shù)據(jù)吧!!當(dāng)然,直接在MySQL客戶端運(yùn)行查詢語句"insert into forums (field1,field2,...fieldN) values (value1,value2,...valueN)"是可行的,但是,作為WEB程序,這樣做顯然沒啥意義。我們靠表單來插入數(shù)據(jù)。建立一個新文件:add_forum.php。首先說明的是,這個頁面是管理員用來添加版塊的,開始肯定要判斷當(dāng)前用戶有沒有管理權(quán)限。現(xiàn)在我們只為了首頁顯示數(shù)據(jù)而已,所以,可以先不加驗證程序。我用DW做的添加論壇版塊的表單如下圖:其中排序指論壇排列順序,SQL語句"order by forum_list asc";完全開放的話游客可以發(fā)表、回復(fù)帖子,否則只注冊會員才可以發(fā)帖。表單的HTML部分如下:<form name="form" action="save_forum.php" method="post"><table width="400" border="0" align="center" cellpadding="5" cellspacing="1" class="mrg-top maintable"><tr id="title"><td colspan="2">論壇管理</td></tr><tr><td width="23%"><strong>論壇名稱</strong></td><td width="77%"><input name="forum_name" type="text" class="input" id="forum_name" /></td></tr><tr><td><strong>論壇簡介</strong></td><td><textarea name="forum_description" cols="30" rows="5"></textarea></td></tr><tr><td><strong>論壇排序</strong></td><td><input name="forum_order" type="text" class="input" id="forum_order" /><input name="isguest" type="checkbox" id="isguest" value="1" />完全開放</td></tr><tr><td></td><td><input name="Submit" type="submit" class="btn" value="添加" /><input name="Submit2" type="reset" class="btn" value="重置" /></td></tr></table></form>表單可以用JS或VBS進(jìn)行驗證,也可以提交到save_forum.php后進(jìn)行必要的驗證。我這里對字符串檢驗不多說了,只研究插入數(shù)據(jù)的部分。首先接收表單的值,要區(qū)分POST和GET方式,分別使用$_POST["**"]和$_GET["**"]來接受數(shù)據(jù)。<?php$forum_name=$_POST["forum_name"];$forum_description=$_POST["forum_description"];$forum_order=$_POST["forum_order"];$isguest=$_POST["isguest"];//這里注意isguest是復(fù)選框,在MYSQL里用0和1來表示是否選中$isguest=isset($isguest)?1:0; //選中的話就是1,不選中的話就是0;?>寫入數(shù)據(jù)庫數(shù)據(jù)的SQL語句大家都很熟悉了,用insert來實(shí)現(xiàn):<?phprequire_once("conn.php");//剛才接收值的程序$sql="insert into forums (forum_name,forum_description,forum_order,isguest)values('$forum_name','$forum_description','$forum_order','$isguest')";mysql_query($sql); //到這里,數(shù)據(jù)已經(jīng)插入了數(shù)據(jù)庫header("location:index.php"); //執(zhí)行完插入則跳轉(zhuǎn)到首頁?>看看我添加頁面和顯示頁面吧:最終顯示效果:OK,現(xiàn)在已經(jīng)實(shí)現(xiàn)了基本的數(shù)據(jù)插入和讀取了。嘿嘿……下一步,和上面道理一樣,注冊和登陸界面,同樣是用DW做表單,HTML代碼我不在贅述,抓個圖吧!會員注冊就填寫四個條件可以了(現(xiàn)在都講究用戶體驗,能少填就少填吧^@^必要的驗證自己研究去)會員登陸見圖先寫處理注冊信息的部分代碼:<?php//reg.phprequire_once "conn.php";$username=$_POST["username"];$password=md5(trim($_POST["password"]));$email=trim($_POST["email"]);$groupID=1; //默認(rèn)用戶等級:1為注冊會員,2為管理員$real_name="未知"//默認(rèn)真實(shí)姓名,登陸后自己修改吧$no_of_post=0; //剛注冊用戶發(fā)貼量肯定為0$headimg="head/0.gif"//默認(rèn)用戶頭像$sign="Nothing..."//默認(rèn)用戶的簽名$num=mysql_result(mysql_query("select count(*) from member where username='$username'"),0); //檢查用戶名是否已經(jīng)被注冊/*上面程序其實(shí)就是:$sql="select count(*) from member where username='$username'";$result=mysql_query($sql);$num=mysql_result($result,0);*/if($num){ //當(dāng)用戶名已經(jīng)被注冊時echo "<script>alert('該用戶名已經(jīng)被注冊!');location.href='http://www.cgvv.com.cn/bcjs/register.php';</script>";}else{$sql="insert into member (groupID,username,password,real_name,jointime,no_of_post,headimg,email,sign) values ('$groupID','$username','$password','$real_name',now(),'$no_of_post','$headimg','$email','$sign')";$db->db_query($sql);//注意插入當(dāng)前時間,00:00:00 00:00:00格式時用now(),看起來和ASP一樣哦……//這里要特別注意了,注冊后會員就會自動登陸,如下:$_SESSION["username"]=$username;$_SESSION["groupID"]='1';$_SESSION["islogined"]="OK"//我自己加的一個項目,可有可無echo "<script>alert('注冊成功!');location.href='http://www.cgvv.com.cn/bcjs/index.php';</script>";}這里出現(xiàn)了SESSION,用來標(biāo)識用戶是否登陸。在PHP中的SESSION是怎樣用的呢?按照書上說的,注冊SESSION時應(yīng)該這樣:<?php$username="abc";session_register("username");?>實(shí)際上,我們可以這樣來用(象ASP那樣直接賦值給SESSION變量),使用SESSION時直接拿來用就可以了。<?php$username="abc";$_SESSION["username"]=$username; //下面查看SESSION是否已經(jīng)生效if(session_is_registered("username")echo "SESSION變量已經(jīng)生效";//因為它是變量,同樣也可以這樣來判斷if(isset($_SESSION["username"]))echo "SESSION變量已經(jīng)生效";?>這里要說明的是,使用SESSION時,必須首先使用session_start()函數(shù)。所以,使用SESSION時的每個頁面,頭部都要有這個函數(shù)出現(xiàn)。這個時候,注冊用戶已經(jīng)登陸了,那么,在首頁上應(yīng)該體現(xiàn)出來吧,見下圖:比較一下沒登陸前這個位置:實(shí)現(xiàn)起來當(dāng)然靠上面剛講的SESSION啦。代碼如下:<?phpsession_start(); if(!isset($_SESSION["username"])||!isset($_SESSION["islogined"])){echo"<a href="login.php">登陸</a> <a href="register.php">注冊</a>";}else{echo $_SESSION["username"].",<a href="control.php">我的資料</a> <a href="loginout.php">注銷</a>";if($_SESSION["groupID"]=="2") echo " <a href="admin_forums.php">論壇管理</a>";}?>上面的代碼應(yīng)該很簡單,相信大家一看就會懂。值的一提的是,我用SESSION["groupID"]來判斷是否管理員,如果是,則出現(xiàn)論壇管理“的連接。退出的頁面loginout.php,邏輯很簡單,把所有SESSION釋放掉就OK了,PHP中釋放全部SESSION的方法是:<?phpSESSION_DESTROY();//或者使用session_unregister()來注銷SESSION?>然后登陸其實(shí)也很簡單了(你明白了注冊步驟,登陸就應(yīng)該很容易了)。部分代碼:<?phpsession_start();require_once("conn.php"); //先接收用戶登陸表單傳來的值,這里略去$sql="select * from member where username='$username'";$result=mysql_query($sql);$num=mysql_num_rows($result); //得到記錄的數(shù)量if($num){ //如果用戶存在,則檢查密碼是否正確$rs=mysql_fetch_array($result);if($rs["password"]!=md5($password)){echo"<script>alert('密碼不正確,請返回檢查!');location.href='http://www.cgvv.com.cn/bcjs/login.php';</script>";}else{//用戶名、密碼都正確,注冊SESSION變量,然后跳轉(zhuǎn)到首頁$_SESSION["username"]=$username;$_SESSION["groupID"]=$rs["groupID"];$_SESSION["islogined"]="OK";echo"<script>alert('登陸成功!');location.href='http://www.cgvv.com.cn/bcjs/index.php';</script>";}}else{//如果沒有這個用戶echo"<script>alert('沒有這個用戶,請返回檢查!');location.href='http://www.cgvv.com.cn/bcjs/login.php';</script>";}?>今天實(shí)現(xiàn)了添加論壇版塊,用戶注冊、登陸的功能了,也知道了SESSION的基本用法。我們在第一章里已經(jīng)講了首頁如何顯示論壇版塊,當(dāng)然,在第二章節(jié)里我們論壇添加了排序功能,那么SQL語句當(dāng)然也應(yīng)該改成$sql="select * from forums order by forum_list",默認(rèn)為ASC,順序排列數(shù)據(jù)。現(xiàn)在我們來討論顯示分論壇顯示主題的情況。我命名為forums.php.利用F作為參數(shù),具體來顯示某個論壇的帖子。現(xiàn)在我們進(jìn)入“測試版塊來顯示本論壇下的所有主題。顯示結(jié)果如圖:具體顯示主題列表要解決的主要問提就PHP的分頁。PHP分頁我們可以使用LIMIT來實(shí)現(xiàn)。具體用法:"select clumn field1,...,filedN from table_name limit start_num,end_num";limit作用是限定結(jié)果行數(shù)。這里可以提取指定的條數(shù),也可以從查詢結(jié)果中取出中間值。舉個例子來說明:$sql="select * from [topic] limit 5";作用是取出topic表中順序前5條數(shù)據(jù);$sql="select * from [topic] limit 9,10";提取10條信息,從第9條開始提取。我們forums.php首先接收F的值:$F=$_GET["F"];注意這里是GET首先取得當(dāng)前論壇:<?phprequire_once("conn.php");require_once("global.php");$F=$_GET["F"];$sql="select forum_name from forums where ID='$F'";$result=mysql_query($sql);$rs=mysql_fetch_array($result);$forum_name=$rs["forum_name"];echo "當(dāng)前論壇為:<a href="index.php">$gb_name</a>-->>$forum_name";?>我們這里的分頁當(dāng)然使用"select clumn field1,...,filedN from table_name limit start_num,end_num";這種方式。end_num當(dāng)然就是我們global.php我們定義的論壇常用的變量$list_rows,而start_num如何計算呢?依靠的是當(dāng)前頁面intpage,每頁顯示條數(shù)$list_rows和總條數(shù)來結(jié)算的。代碼如下:<?php//接上面代碼$result=mysql_query("select count(ID) from topic where forum_id='$F'");$num=mysql_result($result,0); //獲得總條數(shù)$intpage=$_GET["intpage"];if($intpage) $intpage=1;$start_num=($intpage-1)*$list_rows; //獲取limit開始位置$sql="select ID,title,author,last_post_author as la,last_post_time as lt,no_of_hit,no_of_reply,locked,face,topic,good from topic where forum_id='$F' order by topic desc,last_post_time desc limit $start_num,$list_rows";$result=mysql_query($sql);//這里當(dāng)然就是表格的HTML代碼啦,自己寫吧if($num>0){while($rs=mysql_fetch_array($result)){$FID=$row["ID"];$author=$row["author"];$title=$row["title"];$no_of_reply=$row["no_of_reply"];$no_of_hit=$row["no_of_hit"];$lt=$row["lt"];$la=$row["la"];$topic=$row["topic"];$good=$row["good"];$locked=$row["locked"];$face=$row["face"];?><tr><td><?php echo "<img src="$face">" ?></td><td><?php echo "<div class="bold"><a class="forum" href="thread.php?T=".$FID."&F=".$F."">".$title."</a></div>" ?></td><td><?php echo $author ?></td><td><?php echo $no_of_reply." / ".$no_of_hit ?></td><td><div class="lastupdate"><?php echo $lt." By ".$la ?></div></td></tr><?php}Show_pages($num,$F,$intpage,$list_rows);}else{echo"本版塊沒有帖子";}?>顯示結(jié)果如下:分頁就是上面代碼中體現(xiàn)出來的Show_pages($num,$F,$intpage,$list_rows)。效果就是從1到10,從11-20這樣的分頁。分頁的思路就是這樣:我們得到了所需要的數(shù)據(jù):總記錄,當(dāng)前顯示頁碼,每頁顯示的條數(shù),總記錄和每頁顯示的條數(shù)可以得到總頁碼。如果總頁碼小于等于10,那么直接輸出 1到總頁碼就可以了。如果大于10,那就根據(jù)當(dāng)前頁碼顯示具體的分頁,比如,總頁碼13頁,當(dāng)前第11頁,那么將按照11-13的顯示方式輸出。同時還會有上一頁,下一頁等輔助翻頁按鈕。圖示如下:代碼如下:Function Show_pages($number,$F,$intpage,$list_rows){$pageno=ceil($number/$list_rows);echo "n<table width=90% border=0 align=center cellpadding=0 cellspacing=0 class=mrg-top>";echo " <tr>n <td align=right>n <table border=0 cellpadding=0 cellspacing=0>n <tr>";echo "<td id=pagetop>第".$intpage."頁/共".$pageno."頁</td>";if($pageno>1)echo "n <td><div class=pagefirst><a href=?intpage=1&F=".$F.$IsT."><<</a></div></td>";if($intpage>1)echo "n <td><div class=pagefirst><a href=?intpage=".($intpage-1)."&F=".$F.$IsT."><</a></div></td>";if($pageno>10){$a=Floor($pageno/10);$b=Floor($intpage/10);$c=$b*10+1;$d=$b*10+10;$e=$intpage%10;$g=($b-1)*10+1;if($intpage>10){if($b<$a){for($i=$c;$i<=$d;$i++) echo "n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";}elseif($e==0){for($i=$g;$i<=$intpage;$i++) echo "n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";}else{for($i=$c;$i<=$pageno;$i++) echo "n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";}}else{for($i=1;$i<=10;$i++)echo "n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";}}else{for($i=1;$i<=$pageno;$i++)echo "n <td><div class=pagefirst><a href=?intpage=".$i."&F=".$F.">".$i."</a></div></td>";}if($pageno>$intpage)echo "n <td><div class=pagefirst><a href=?intpage=".($intpage+1)."&F=".$F.">></a></div></td>";if($pageno>1)echo "n <td><div class=pagefirst><a href=?intpage=".$pageno."&F=".$F.">>></a></div></td>";echo "</td>n </tr>";echo "n</table></td></tr></table>";}我上面的代碼自己也認(rèn)為比較爛,有經(jīng)驗的大鳥不要笑我……^@^,帖個好些的分頁代碼。分頁這里主要利用的就是LIMIT,熟悉了它的用法,簡單的分頁程序就可以搞定了……因為論壇本身的設(shè)置是如果該論壇完全開放的話,游客可以發(fā)帖子。<?phpif(!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ù)。表明添加新帖子要添加到論壇版塊。添加頁面如圖所示:

點(diǎn)擊放大

這里的表單里會有一個隱藏字段,記錄論壇版面的ID號。處理表單非常簡單,就是INSERT來實(shí)現(xiàn):<?phprequire_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); //如果不是游客的話就更新用戶表。其實(shí)這里用戶表中開始就應(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ù)的表單。

點(diǎn)擊放大

<?phpif($isguest==0){if($_SESSION["username"] && $_SESSION["islogined"]){//這里是快速回復(fù)的HTML表單}}else{//這里是快速回復(fù)的HTML表單} //思路也很簡單,如果完全開放,自然而然就出現(xiàn)回復(fù)表單,允許回復(fù);否則如果用戶登陸,就出現(xiàn)回復(fù)表單。?>回復(fù)表單里要有主題帖子的ID編號。回復(fù)的代碼同樣是插入,然后更新相關(guān)表。<?phprequire_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)限。必須登陸;用戶必須是帖子的作者;管理員可以管理所有的帖子<?phpif($_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>";}?>

點(diǎn)擊放大

<?phprequire_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. 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.phpclass 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èi)些力氣和腦筋的。 (源文件請大家允許我稍后發(fā)布)這樣,這個小教程算是簡單的完成了。作者水平有限,也沒有寫過教程的經(jīng)驗,所以里面的不足之出大家多包涵指點(diǎn)。在此謝謝大家!!我的QQ:278502721;MSN:fengyuedao#hotmail.com或eastsin.com#hotmail.com;E-mail:numsix#163.com以上將#換成@希望得到您的指導(dǎo)。
標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 日本草草视频在线观看 | 2020国产成人免费视频 | 亚洲欧美不卡中文字幕 | 日本在线加勒比 | 欧美黄成人免费网站大全 | 国产主播精品福利19禁vip | 亚洲天堂视频在线观看免费 | 99久久免费中文字幕精品 | 成人高清视频免费观看 | 亚洲人成在线影院 | 国产成人免费高清激情视频 | 亚洲国产精品国产自在在线 | 综合精品 | 国产精品成人久久久久久久 | 欧美激情综合亚洲一二区 | 日本三级特黄 | 成人网18免费下 | 久久91精品国产91久久小草 | 天堂影院jav成人天堂免费观看 | 日韩午夜精品 | 91精品亚洲| 午夜性爽快免费视频播放 | 黄色网址亚洲 | 久久久久国产成人精品 | 人成午夜性刺激免费 | 天天澡天天碰天天狠伊人五月 | 美女与男人对肌免费网站 | caoporen国产91在线 | 欧美在线视频看看 | 久久国产精品-久久精品 | 一级做a爰片欧美一区 | 夜色毛片永久免费 | 久久成人18 | 免费国产成人高清在线观看视频 | 色视频在线观看视频 | 亚州免费视频 | 国产91在线 | 亚洲 | 国产欧美专区在线观看 | 日韩国产欧美在线观看一区二区 | 久久精品视频3 | 99久久精品免费观看区一 |