PHP菜鸟之简易聊天室

时间:2021-07-11 10:10:12

一、系统目标

聊天室使用数据库汇集每个人的发言,然后反过来将数据库中的发言显示在页面上,让每一位用户都能看到,这就是本例的目标。具体来说让每一位用户都能看到,这就是本例的目标。具体来说,简易聊天室功能包括如下:

用户登录:在用户发言时,将显示其登录名。

用户发言:用户输入要说的话。

显示发言信息:用户浏览所有发言信息。

设计思路:

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条发言。

另外,数据库也没有必要保留全部用户发言信息,否则会使数据库迅速膨胀。可以使用一个策略:只保留最近的一定数量的发言,而把其他过期的发言及时删除。