电脑技术学习

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

dn001
先写处理注册信息的部分代码:
<?php
//reg.php
require_once "conn.php";$username=$_POST["username"];
$password=md5(trim($_POST["password"]));
$email=trim($_POST["email"]);$groupID=1; //默认用户等级:1为注册会员,2为管理员
$real_name="未知"//默认真实姓名,登陆后自己修改吧
$no_of_post=0; //刚注册用户发贴量肯定为0
$headimg="head/0.gif"//默认用户头像
$sign="Nothing..."//默认用户的签名$num=mysql_result(mysql_query("select count(*) from member where username='$username'"),0); //检查用户名是否已经被注册
/*上面程序其实就是:
$sql="select count(*) from member where username='$username'";
$result=mysql_query($sql);
$num=mysql_result($result,0);
*/
if($num){ //当用户名已经被注册时
echo "<script>alert('该用户名已经被注册!');location.href='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);
//注意插入当前时间,00:00:00 00:00:00格式时用now(),看起来和ASP一样哦……
//这里要特别注意了,注册后会员就会自动登陆,如下:
$_SESSION["username"]=$username;
$_SESSION["groupID"]='1';
$_SESSION["islogined"]="OK"//我自己加的一个项目,可有可无
echo "<script>alert('注册成功!');location.href='index.php';</script>";
}
这里出现了SESSION,用来标识用户是否登陆。在PHP中的SESSION是怎样用的呢?按照书上说的,注册SESSION时应该这样:
<?php
$username="abc";
session_register("username");
?>
实际上,我们可以这样来用(象ASP那样直接赋值给SESSION变量),使用SESSION时直接拿来用就可以了。
<?php
$username="abc";
$_SESSION["username"]=$username; //下面查看SESSION是否已经生效
if(session_is_registered("username")
echo "SESSION变量已经生效";
//因为它是变量,同样也可以这样来判断
if(isset($_SESSION["username"]))
echo "SESSION变量已经生效";
?>
这里要说明的是,使用SESSION时,必须首先使用session_start()函数。所以,使用SESSION时的每个页面,头部都要有这个函数出现。
这个时候,注册用户已经登陆了,那么,在首页上应该体现出来吧,见下图:

比较一下没登陆前这个位置:

实现起来当然靠上面刚讲的SESSION啦。代码如下:
<?php
session_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>";
}
?>
上面的代码应该很简单,相信大家一看就会懂。值的一提的是,我用SESSION["groupID"]来判断是否管理员,如果是,则出现论坛管理“的连接。
退出的页面loginout.php,逻辑很简单,把所有SESSION释放掉就OK了,PHP中释放全部SESSION的方法是:
<?php
SESSION_DESTROY();//或者使用session_unregister()来注销SESSION
?>
然后登陆其实也很简单了(你明白了注册步骤,登陆就应该很容易了)。部分代码:
<?php
session_start();require_once("conn.php"); //先接收用户登陆表单传来的值,这里略去$sql="select * from member where username='$username'";
$result=mysql_query($sql);
$num=mysql_num_rows($result); //得到记录的数量
if($num){ //如果用户存在,则检查密码是否正确
$rs=mysql_fetch_array($result);
if($rs["password"]!=md5($password)){
echo"<script>alert('密码不正确,请返回检查!');location.href='login.php';</script>";
}else{//用户名、密码都正确,注册SESSION变量,然后跳转到首页
$_SESSION["username"]=$username;
$_SESSION["groupID"]=$rs["groupID"];
$_SESSION["islogined"]="OK";
echo"<script>alert('登陆成功!');location.href='index.php';</script>";
}
}else{//如果没有这个用户
echo"<script>alert('没有这个用户,请返回检查!');location.href='login.php';</script>";
}
?>
今天实现了添加论坛版块,用户注册、登陆的功能了,也知道了SESSION的基本用法。 我们在第一章里已经讲了首页如何显示论坛版块,当然,在第二章节里我们论坛添加了排序功能,那么SQL语句当然也应该改成$sql="select * from forums order by forum_list",默认为ASC,顺序排列数据。
现在我们来讨论显示分论坛显示主题的情况。我命名为forums.php.
利用F作为参数,具体来显示某个论坛的帖子。

现在我们进入“测试版块来显示本论坛下的所有主题。显示结果如图:

具体显示主题列表要解决的主要问提就PHP的分页。PHP分页我们可以使用LIMIT来实现。具体用法:"select clumn field1,...,filedN from table_name limit start_num,end_num";
limit作用是限定结果行数。这里可以提取指定的条数,也可以从查询结果中取出中间值。举个例子来说明:
$sql="select * from [topic] limit 5";
作用是取出topic表中顺序前5条数据;
$sql="select * from [topic] limit 9,10";
提取10条信息,从第9条开始提取。
我们forums.php首先接收F的值:$F=$_GET["F"];注意这里是GET
首先取得当前论坛:
<?php
require_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 "当前论坛为:<a href="index.php">$gb_name</a>-->>$forum_name";
?>
我们这里的分页当然使用"select clumn field1,...,filedN from table_name limit start_num,end_num";这种方式。
end_num当然就是我们global.php我们定义的论坛常用的变量$list_rows,而start_num如何计算呢?依靠的是当前页面intpage,每页显示条数$list_rows和总条数来结算的。代码如下:
<?php
//接上面代码
$result=mysql_query("select count(ID) from topic where forum_id='$F'");
$num=mysql_result($result,0); //获得总条数$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);//这里当然就是表格的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"本版块没有帖子";
}
?>

标签: