基于PHP+MySQL的聊天室设计


Posted in PHP onOctober 09, 2006

笔者在网站开发中,采用PHP4.0+MySQL3.23.38建立了多种应用。下面,以一个简单的聊天室设计为例,介绍PHP+MySQL在网页开发中的应用。

1、总体设计

1. 1 构思与规划:

聊天室的基本原理,就是把每个连上同一网页的用户传送的发言数据储存起来,然后将所有的发言数据传给每一用户。也就是说,用数据库汇集每个人的发言,并将数据库中的数据传给每一个人就实现了聊天室的功能。

1.2 表设计

首先使用MySQL建立表chat用来储存用户的发言:

mysql> CREATE TABLE chat 
-> (chtime DATATIME, 
-> nick CHAR(10) NOT NULL, 
->words CHAR(150));

表中只设定了三个域,chtime是发言的时间,nick为发言者的昵称,words是发言的内容,发言最多150个字符

1.3 网页设计

一个最简单的聊天室通常需要两个页框:一个页框是用户输入发言的表单,另一个用来显示大家的发言。所以代码段通常至少需要如下几段:

建立页框的结构(main.php)

显示大家发言的程序段(cdisplay.php)

传送用户发言的程序段(speak.php)

用户登录进入聊天室程序段(login.php)

2 、代码设计

以上规划完成后,就可以着手代码设计了,采用php可以非常简明实现以上的功能。

2.1 用户登录login.php,本段代码是一个完全HTML网页

<html> 
<head> 
<title>用户登录</title> 
</head> 
<body>请输入您的昵称<br> 
<form action="main.php" method="post" target="_self"> 
<input type="text" name="nick" cols="20"> 
<input type="submit" value="登录"> 
</body> 
</html>

用户提交自己的昵称后,就进入到聊天室,以下的处理交由main.php处理。

2.2 页框主体代码段main.php:

<? 
setcookie("nick",$nick) //用cookie记录用户昵称,是常用的传递变量方法 
?> 
<html> 
<title>山西铝厂聊天室试用版ver1.0</title> 
<frameset rows="80%,*"> 
<frame src=" cdisplay.php" name="chatdisplay"> 
<frame src="speak.php" name="speak"> 
</frameset> 
</html>

2.3 显示发言cdisplay.php

本代码段的任务是将表chat中的数据取出,显示在页框中。每次刷新时,取数据库中最近的15条发言。同时,为防止数据库无限增大,需设计删除陈旧数据的功能。代码如下

<html> 
<head> 
<title>显示用户发言</title> 
<meta http-equiv="refresh" content="5;url=cdisplay.php"> 
</head> 
<body> 
<? 
$link_ID=mysql_connect("main","root"); 
//链接Mysql服务器 服务器名为main,管理员名为root 
mysql_select_db("abc"); //选择数据库 
$str="select * from chat ORDER BY chtime;" ; //查询字符串 
$result=mysql_query($str, $link_ID); //送出查询 
$rows=mysql_num_rows($result); //取得查询结果的记录笔数 
//取得最后15笔发言,并显示 
@mysql_data_seek($resut,$rows-15); //移动记录指针到前15笔记录 
if ($rows<15) $l=$rows; else $l=15; //记录总数小于15,则最多为该记录数 
for ($i=1;$i<=$l;$i++) { 
list($chtime,$nick,$words)=mysql_fetch_row($result); 
echo $chtime; echo " ";echo $nick; echo":" ; echo $words; echo "<BR>"; 
} 
//清除库中过时的数据 
@mysql_data_seek($result,$rows-20); //移动记录指针到前20笔记录 
list($limtime)=mysql_fetch_row($result); 
$str="DELETE FROM chat WHERE chtime<'$limtime' ;" ; 
$result=mysql_query($str,$link_ID); //送出查询字符串,库中只留前20个记录 
mysql_close($link_ID); 
?> 
</body> 
</html>

2.4 送出发言到数据库speak.php

<html> 
<head> 
<title>发言</title> 
</head> 
<body> 
<? 
If ($words) 
{ $link_ID=mysql_connect("main","root"); 
mysql_select_db("abc"); //数据库名为abc 
$time=date(y).date(m).date(d).date(h).date(i).(date(s); //取得当前时间 
$str="INSERT INTO chat(chtime,nick,words) values 
('$time','$nick','$words');" ; 
mysql_query($str,$link_ID); //送出发言到数据库 
mysql_close($link_ID); 
} 
?> 
//输入发言的表单 
<form action="speak.php" method="post" target=" _self"> 
<input type="text" name="words" cols="20"> 
<input type="submit" value="发言"> 
</form> 
</body> 
</html>

完成以上工作后,一个简单的聊天室制作就完成了。当然,设计者可以根据个人爱好做一些个性化设计,如增加一个页框,显示当前聊天室人员名单、增加发言表情、取得发言者IP、进一步美化页面等等。

PHP 相关文章推荐
php下使用strpos需要注意 === 运算符
Jul 17 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
浅谈php自定义错误日志
Feb 13 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
PHP pear安装配置教程
May 14 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 PHP
Win9x/ME下Apache+PHP安装配置
Oct 09 #PHP
关于PHP中的Class的几点个人看法
Oct 09 #PHP
PHP自动生成月历代码
Oct 09 #PHP
十天学会php(3)
Oct 09 #PHP
十天学会php(1)
Oct 09 #PHP
十天学会php(2)
Oct 09 #PHP
论坛头像随机变换代码
Oct 09 #PHP
You might like
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
javascript新手语法小结
2008/06/15 Javascript
jquery 笔记 事件
2011/11/02 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Angular8基础应用之表单及其验证
2019/08/11 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
python Pexpect模块的使用
2020/12/25 Python
颁奖典礼主持词
2014/03/25 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
统招统分证明
2015/06/23 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
python数字类型和占位符详情
2022/03/13 Python
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android