一、系统目标
聊天室使用数据库汇集每个人的发言,然后反过来将数据库中的发言显示在页面上,让每一位用户都能看到,这就是本例的目标。具体来说让每一位用户都能看到,这就是本例的目标。具体来说,简易聊天室功能包括如下:
用户登录:在用户发言时,将显示其登录名。
用户发言:用户输入要说的话。
显示发言信息:用户浏览所有发言信息。
设计思路:
1建立聊天室的数据库及相关数据表
2实现用户登录界面(login.php)
3实现发言页面(speak.php)
4实现发言显示页面(chat_display.php)
5实现主页面(main.php)
关键技术:
1、自动刷新页面
由于用户不停地发表言论,自然需要页面自动刷新,以显示最新的发言信息。这可以通过浏览器的Client Pull技术来实现。Client Pull利用HTML的meta标记,结合使用“http-equiv=Refresh”属性控制页面自动刷新,间隔时间content的属性决定。
具体来说如果想要使页面每隔一段时间就自动刷新,其实现方法是在HTML的<HEAD>与</HEAD>之间加上以下语句:
<meta http-equiv="Refresh" content="秒数;url=跳转的文件或地址“>
例如,想要每隔20秒页面刷新一次,需要把如下代码加入<head>区域中,其中20指每隔20秒刷新一次页面。
<meta http-equiv="Refresh" content="20" />
而如果要实现页面的自动跳转,如用户来到页面20秒后自动转向另一个页面new.php页面
<meta http-equiv="Refresh" content="20;url=new.php" />
2.传递用户名
在用户通过登入页面进入聊天室之后,系统应当一直保留其登入名信息,以便在其发言是使用,这可以通过使用session来实现。session是一种常用的信息存储机制,这里不做详细介绍,只简单说民在本例中的应用。
(1)在用户登录系统时,需要注册一个session变量来存储其登录名信息:
<?php
session_start();//装载session库。一定要放在首行
$user_name=$_POST["nick"];
session_register("user_name");//注册$user_name变量
?>
其中,在第二行打开Session功能,在第三行得到页面表单上用户输入的昵称信息:第四行注册Session变量 user_name.
(2)在用户发言的页面上,在其发言时,获取Session变量username,并将其值连同其发言内容存入数据库中:
<?php
...
$author=$_SESSEN["user_name"];
...//把$author信息存入数据库
3显示最新发言
简易聊天室另外一个需要解决的问题是在现实发言信息时,由于发言信息很多,不能将其全不显示出来,系统将一直利用Session来保存登录名信息,而只能显示最新的一定数量的发言信息。这可以通过发言信息按发言顺序递增,并选择最后的部分实现。
本例在页面上显示最新的15条发言信息:
@mysql_data_seek($result,$rows-15);//移动记录指针到前15条记录
if($rows<15)
$1=rows;
else
$l=15;
for($i=1;$i<=$1;$i++)
{
list($cid,$author,$create_time,$text)=mysql_fretch_row($result);
echo $crete_time;echo " ";echo "【".$author. "】" ;echo "说道:"
//输出作者留言时间
echo $text;echo "<BR>" //输出留言时间
}
其中,第一行的$result为查询所有留言得到的记录集,通过mysql_data_seek()命令来移动其记录游标到倒数第15条记录上;然后6~11行输出至多15条发言。
另外,数据库也没有必要保留全部用户发言信息,否则会使数据库迅速膨胀。可以使用一个策略:只保留最近的一定数量的发言,而把其他过期的发言及时删除。