电脑技术学习

用PHP建立微型论坛的简单教程

dn001

显示结果如下:

分页就是上面代码中体现出来的Show_pages($num,$F,$intpage,$list_rows)。效果就是从1到10,从11-20这样的分页。分页的思路就是这样:
我们得到了所需要的数据:总记录,当前显示页码,每页显示的条数,总记录和每页显示的条数可以得到总页码。如果总页码小于等于10,那么直接输出 1到总页码就可以了。如果大于10,那就根据当前页码显示具体的分页,比如,总页码13页,当前第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>";
}


我上面的代码自己也认为比较烂,有经验的大鸟不要笑我……^@^,帖个好些的分页代码。
分页这里主要利用的就是LIMIT,熟悉了它的用法,简单的分页程序就可以搞定了…… 因为论坛本身的设置是如果该论坛完全开放的话,游客可以发帖子。
<?php
if(!isset($_SESSION["username"])){
$_SESSION["username"]="Guest";
}
?>
那么该论坛的页面应该相应的有添加帖子的按钮:
<?php
$F=$_GET["F"];
$result=mysql_fetch_array(mysql_query("select isguest from forums where ID='$F'"));
$isguest=$result["isguest"]; //从数据库中提取该论坛版块是否完全开放,如果完全开放游客就可以发帖子了,否则只有注册用户才可以 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 这里传递函数。表明添加新帖子要添加到论坛版块。
添加页面如图所示:


点击放大

这里的表单里会有一个隐藏字段,记录论坛版面的ID号。
处理表单非常简单,就是INSERT来实现:
<?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"]; //下面肯定要再验证一下该论坛版块用户是否可以发帖
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()函数可以取出刚才插入操作成功后的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); //如果不是游客的话就更新用户表。其实这里用户表中开始就应该存在一个管理员和一个游客的信息。游客发帖子默认的值为空,这样即使更新也更新不了。
}
?>
现在我们来看thread.php。这个页面和forums.php有很相似的地方,包括分页。只是这里提取了thread表中的所有数据。

标签: