使用PHP制作聊天室
#1?牐犑迪旨际?
?牐犃奶焓移涫凳嵌嗳斯餐褂玫囊欢纬绦颉T贐BS中我们也可以聊天,但Web聊天室和BBS的聊天室不同的地方是聊天室每收到一句话,就马上分送给在聊天室的网络使用者,非常快捷方便,虽然BBS使用Telnet的方式也可以实现即时聊天,但是这样的方式对服务器的配置要求比较高。
?牐犞谱髁奶焓宜枰褂玫降募际踔饕牵?
?牐燬erver Push
?牐燙lient Pull
?牐燬erver Push由Web服务器将资料以多重 MIME编码的方式,送给客户端,目前较少网站使用这种方式;而Client Pull则利用了HTML的META标签,并利用http-equiv=“Refresh”的属性,表示资料要重新载入,至于载入时间,则利用content属性来达成。
?牐犝饫镂颐蔷褪褂肞HP+MySQL来实现一个最简单的聊天室。
#1?牐犑迪植街?
#2?牐?1.熟悉META标签的使用
?牐?<META>标签与其他标签不同,它不是成对出现的,而是只有初始标签,没有结束标签。它通常放在两个<HEAD>标签之间,以便让浏览器可以尽快准备更新用户端的网页。
?牐犓ㄈ鲋匾粜驭?
?牐燦AME
?牐燞TTP-EQUIV
?牐燙ONTENT
?牐燞TTP-EQUIV和CONTENT属性是HTML文档向浏览器传送信息的通道。
?牐?<META HTTP-EQUIV=“refresh” CONTENT=“15;URL=<? echo $PHP_SELF;?>”>
?牐犝飧鲇锞涫歉嫠咪榔鳎扛?15秒重新刷新一次。URL<........>表明刷新时指向自身。
#2?牐?2.编写聊天室的框架
?牐犎绻?15秒刷新一遍屏幕,那么我们输入的信息岂不也被刷新了吗?不要急,我们可以使用FRAME框架的方法来划分用户的输入和服务器的输出。
?牐牫绦虼肴缦拢?
?牐牎?
?牐?<frame src=“display.php”name=list scrolling=auto>//框架的上半部分,载入display.php
?牐?<frame src=“write.php”name=post scrolling=no>//框架的上半部分,载入write.php
?牐牎?
?牐犖颐堑耐潮环殖闪礁瘛I厦婵梢韵允玖奶斓哪谌荩旅嬗没Э梢允淙胄畔ⅰ7直鹩蒬isplay.php和write.php完成。
?牐犛辛丝蚣埽敲丛趺窗衙扛鋈耸淙氲挠锞浯⒋嫫鹄茨兀课颐强梢越?立一个数据库存放聊天的信息。例如可以用MySQL建立一个名为talk的数据表来储存聊天信息。
?牐燾reate table talk(??
?牐爑serid int(5) not null auto_increment
?牐爑sername varchar(20) not null
?牐燿ate varchar(8) not null
?牐爐ext varchar(50) not null
?牐爌rimary key (userid)
?牐牐?;//创建聊天室所使用的数据库表
#2?牐?3.编写将用户输入的信息提交给服务器,并存储在MySQL的talk表中
?牐牫绦虼肴缦拢?
?牐?<? //这是文件write.php
?牐爄f(($username!=“”)and($text!=“”))?牐?
?牐爗
?牐?$connect=Mysql_connect(“yourhost”,“webuser”,“root”);//连接MySQL数据库
?牐?$query=“insert into talk(username,date,text)??
?牐爒alues('$username','$date','$text)”;//插入语句
?牐?$result=Mysql_db_query(“myweb”,$query);}//插入执行
?牐??>
?牐?<html>
?牐?<head>
?牐?<title>用户输入</title>
?牐?<meta http-equiv=“Content-Type”content=“text/html;charset=gb2312”>
?牐?</head>
?牐?<body bgcolor=“#FFFFFF”text=“#000000”>
?牐?<form method=“POST”action=“write.php”><p>
?牐犇愕腎D;<input type=“text”name=“userid”size=“12”>
?牐牱⒀?<input type=“text”name=“text”size=“57”>
?牐?<input type=“submit”value=“提交”></p>
?牐?</form>
?牐?</body>
?牐?</html>
?牐犎绻鹖d和text中的内容不是空的话,程序就连接MySQL并把信息加入talk表中。
?牐燼ction中指向的是write.php,即每次输入以后自动刷新。其余时候该部分不受影响。
#2?牐?4.连接MySQL数据库,显示聊天内容
?牐犜谡庖徊街校颐怯眉虻サ腟QL语言调出talk里的内容。
?牐牫绦虼肴缦拢?
?牐?<!-这是文件display.php>
?牐?<html>>
?牐?<meta http-equiv=“refresh”content=“10;url=<? echo $php_self;?>”>
?牐?<body>
?牐?<?
?牐爀cho“<center><font size='5'>欢迎光临我的聊天室</font>”;
?牐爉sql_connect(“yourhost”,“webuser”,“password”);//连接数据库
?牐?$query=“select username text from talk order by date desc limit 0,20”??
?牐?//查询语句
?牐?$result=Mysql_db_query(“myweb”,$query);//执行
?牐爄f($result){?? ??
?牐爓hile ($r=Mysql_fetch_array($result)){//取出结果
?牐?$username=$r[“username”];//使php变量
?牐?//username可使用表中username。
?牐?$text=$r[“text”];?牔?
?牐爀cho“<tr>”;
?牐爀cho“<td align='left'><font size='1'>$username 说道:$text</font></td>”;
?牐爀cho“</tr>”;//显示结果
?牐爀lse{
?牐爀cho “对不起,系统故障!</body></html>”??
?牐燤ysql_free_result($result);//断开与数据库连接
?牐??>
?牐?</body>
?牐?</html>
?牐牎ぴ趕elect语句中使用order by...desc...语句是让系统按照时间顺序对查询的结果进行降序排列,从而显示最近的聊天内容。
?牐牎び锞鋖imit 0,20用来返回最多20条记录。
?牐犝庋涂焱瓿闪俗罴虻サ牧奶焓蚁低常O伦詈笠徊剑蚜讲糠纸岷掀鹄础S没?每次载入框架网页talk.php就可以使用了(如^45040803a^)。