当前位置: 首页 > 图文教程 > 网络编程 > PHP > 用PHP+MySql编写聊天室

PHP
php面向对象全攻略 (十五) 多态的应用
php面向对象全攻略 (十六) 对象的串行化
php面向对象全攻略 (十七) 自动加载类
PHP parse_url 一个好用的函数
PHP 字符串分割和比较
全世界最小的php网页木马一枚 附PHP木马的防范方法
PHP 日期加减的类,很不错
PHP 日期时间函数的高级应用技巧
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Ha0k 0.3 PHP 网页木马修改版
PHP iconv 函数转gb2312的bug解决方法
关于页面优化和伪静态
使用zend studio for eclipse不能激活代码提示功能的解决办法
PHP 身份验证方面的函数
基于OpenCV的PHP图像人脸识别技术
用mysql触发器自动更新memcache的实现代码
php 数学运算验证码实现代码
PHP网站开发方案实例
PHP教程:挖掘细节提升网站性能
搜索引擎技术核心揭密(PHP)

用PHP+MySql编写聊天室


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 212 ::
收藏到网摘: n/a

大家好!好久没有看到大家了,上次写了用PHP的通过文件操作的聊天室,当然是漏洞百出的,而且每一次刷新屏幕都很糟糕的!我想了好久,是不是能有一种方法不要刷新,就能取得发言的信息了?多用一个框架就能实现这个效果了,即多用一个框架我们称为getmsg,我们让getmeg去取得信息而且保证每一次取得的信息是最新的,就是上次取得的发言就不要了,上次我编的就是每一次取得信息都是重复的,这样效果不好。
我的设计思想是:每一次发言,都把它提交到服务器上,然后保存到一个数据库里,每格几秒钟getmsg就去服务器上取得 最新发言数据,并保证上次取得的发言就不要取下来了,然后把取下来的发言叠加到一个专门显示发言的窗口(listmsg)去。这样我们就感觉listmsg窗口不会有重刷新的感觉而且,只是看到发言信息不断加进去,这样就有很好的效果,
怎样在一个框架把信息加到另个框架去了?用JavaScript就可以实现这个想法的:
<script language="JavaScript">
<!--
var win=parent.frames[0] //第一个框架即在文档中第一次出现的<frame>
var doc=win.document //获取文档
doc.write("发言信息")//这样就可以把信息加到另个frame里去了!
-->
</script>
当然你得在mysql里建两个表,一个表用于保存发言信息,一个表用于保存几个在线的,在列在线人数时,我们让它每个60秒刷新一次,并把一分钟以前的发言删掉,并看某个发言人是不是很长时间没发言了,是的话,就删掉他,
由于表的子段很简单,在这里就不要写出来了,看程序就会知道了。这个程序在网上网下测试的效果都很好!
表的名字是:chat和chat_getmsg
<!--主框架chat.php-->
<?PHP
if(!isset($username))
$username="guest";
$conid=mysql_connect("localhost","yourcounter","password");
mysql_select_db("yourdadabase",$conid);
$dstr=date("YmdHis");
$sql="insert chat_getmsg (username,shijian) values ('$username','$dstr')";
mysql_query($sql,$conid);
$sql="update chat_getmsg set shijian='$dstr' where username='$username'";
mysql_query($sql,$conid);
mysql_close($conid);
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<frameset rows="283,105" frameborder="YES" border="1" framespacing="0" cols="*">
<frameset cols="520,113" frameborder="yes" border="1" framespacing="0" rows="*">
<frame name="topFrame" scrolling="auto" border="1" noresize src="list.html" >
<frame name="rightFrame" scrolling="auto" border="1" noresize src="username.php">
</frameset>
<frameset rows="17,90" frameborder="yes" border="1" framespacing="0" cols="*">
<?PHP echo "<frame name="topFrame1" scrolling="NO" border="1" noresize src="getmsg1.php?username=$username">n"; ?>
<?PHP echo "<frame name="bottomFrame" scrolling="NO" border="1" noresize src="fayan.php?username=$username">n"; ?>
</frameset>
</frameset>
<noframes><body bgcolor="#FFFFFF">
</body></noframes>
</html>
<!--发言fayan.php -->
<?php
if(!isset($username))
$username="guest";
if(!isset($yanse))
$yanse="blue";
if(!isset($objectname))
$objectname="大家";
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.normalfont { font-family: "宋体"; font-size: 10pt; font-weight: 800; color: #99FF33; height: auto; width: auto; left: 0px; top: 0px; clip: rect( )}
-->
</style>
</head>
<body bgcolor="#ff3333">
<form method="post" name="fayanform" action=<?PHP echo ""fayan.php?username=$username&yanse=$yanse&objectname=$objectname "";?> class="normalfont">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="normalfont">
<tr>
<td width="17%" height="22"> 颜色:
<select id=yanse name="yanse">
<option value="blue" <?PHP if($yanse=="blue") echo "SELECTED";?> >Blue
<option value="red" <?PHP if($yanse=="red") echo "SELECTED";?> >red
<option value="green" <?PHP if($yanse=="green") echo "SELECTED";?> >green
<option value="yellow" <?PHP if($yanse=="yellow") echo "SELECTED";?> >yellow
<option value="brown" <?PHP if($yanse=="brown") echo "SELECTED";?> >brown
<option value="#ff00ff" <?PHP if($yanse=="#ff00ff") echo "SELECTED";?> >ff00ff
<option value="#bb00ff" <?PHP if($yanse=="#bb00ff") echo "SELECTED";?> >bb00ff
<option value="#cc00ff" <?PHP if($yanse=="#cc00ff") echo "SELECTED";?> >cc00ff
<option value="#aa00ff" <?PHP if($yanse=="#aa00ff") echo "SELECTED";?> >aa00ff
<option value="#6600ff" <?PHP if($yanse=="#6600ff") echo "SELECTED";?> >6600ff
<option value="#7700ff" <?PHP if($yanse=="#7700ff") echo "SELECTED";?> >7700ff
<option value="#1100ff" <?PHP if($yanse=="#1100ff") echo "SELECTED";?> >1100ff
<option value="#11ffff" <?PHP if($yanse=="#11ffff") echo "SELECTED";?> >11ffff
<option value="#11aaff" <?PHP if($yanse=="#11aaff") echo "SELECTED";?> >11aaff
<option value="#1199ff" <?PHP if($yanse=="#1199ff") echo "SELECTED";?> >1199ff
<option value="#1133ff" <?PHP if($yanse=="#1133ff") echo "SELECTED";?> >1133ff
</select>
</td>
<td width="55%" height="22" class="normalfont">发言:
<input type="text" name="fayan" size=35 >
<input type="hidden" name="username" value=<?PHP echo ""$username""; ?> >
<input type="Button" name="Button" value="发言" onclick="submitfayan()">
</td>
<td width="28%" height="22"> </td>
</tr>
<tr>
<td width="17%" height="20">对象:
<input type="text" name="objectname" size=10 value=<?PHP echo ""$objectname"";?> >
</td>
<td width="55%" height="20" class="normalfont"><a href="http://chenlipan.oso.com.cn">回去</a> </td>
<td width="28%" height="20" class="normalfont" > </td>
</tr>
</table>
</form>
</body>
<Script language="JavaScript">
<!--
fayanform.fayan.focus()
function submitfayan()
{
if(fayanform.fayan.value!="")
fayanform.submit()
else
alert("不能发空信息")
fayanform.fayan.focus()
}
-->
</script>
</html>
<?PHP
if(isset($username)&&isset($fayan)){
$conid=mysql_connect("localhost","yourcount","yourpassword");
mysql_select_db("database",$conid);
$sql="insert chat (username,objectname,action,msg,color) values ("$username","$objectname","NO","$fayan","$yanse")";
mysql_query($sql,$conid);
mysql_close($conid);
}
?>
<!--获取发言信息getmsg.php-->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<?PHP
$conid=mysql_pconnect("localhost","yourcount","password");
mysql_select_db("database",$conid);
if(!isset($username))
$username="getmsg";
$dt=time();
$newdate=date("YmdHis",$dt);
$fromdate=date("YmdHis",$dt-6);;
$sql="select username as name,msg,action,objectname ,shijian,color from chat where shijian>="$fromdate"";
$res=mysql_query($sql,$conid);
echo "<meta http-equiv="Refresh" content="6,url=getmsg.php?username=$username" >n";
echo "</head>n";
echo "<script language="JavaScript">n";
echo "<!--n";
echo "var win=parent.frames[0]n";
echo "var doc=win.documentn";
echo "var divlin=doc.body.all("lin")n";
while(list($name,$msg,$action,$objectname,$shijian,$color)=mysql_fetch_row($res))
{
if($objectname!="大家"||$objectname) $object="对 <a href=JavaScript:selectusername('$objectname')>$objectname</a> ";
echo "divlin.innerHTML=divlin.innerHTML+"<font color=$color size=3><a href=JavaScript:selectusername('$name')>$name</a> $object 说: $msg </font><br>"n";
}
echo "win.scrollBy(6000,6000)n";
echo "-->n";
echo "</script>n";
?>
<body bgcolor="#333333">
</body>
</html>
<!--欢迎词getmsg1.php -->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<?PHP
if(!isset($username))
$username="guest";
echo "<meta http-equiv="Refresh" content="6;url=getmsg.php?username=$username" >n";
echo "</head>n";
echo "<script language="JavaScript">n";
echo "<!--hiden";
echo "var win=parent.frames[0]n";
echo "var doc=win.documentn";
echo "var divlin=doc.body.all("lin")n";
echo "divlin.innerHTML= "<font color=blue><b>欢迎 $username 的光临</b></font><br>"n";
echo "-->n";
echo "</script>n";
?>
<body bgcolor="#333333">
</body>
</html>
<!--显示发言list.html-->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.lin { font-size: 10pt; color: #FF6633}
-->
</style>
</head>
<body bgcolor="#FFFFFF" >
<center>
<div color=blue>
<font color=white size=6><b>
欢迎光临</b>
</marquee>
</div>
</center>
<div id=lin class="lin"></div>
</body>
<Script language="JavaScript">
<!--
function selectusername(str)
{
var win=parent.frames[3]
var doc=win.document
var form1=doc.body.all("fayanform")
form1.objectname.value=str
}
-->
</script>
</html>
<!--罗列在线人数-->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Refresh" content="60">
<style type="text/css">
<!--
.lin { font-size: 10pt; color: #ff0066}
-->
</style>
</head>
<body bgcolor="#33ff00" >
<center class="lin"><b>
在线人数 </b>
<hr>
<?PHP
if(!isset($username))
$username="guest";
$dt=time();
$newdate=date("YmdHis",$dt);
$fromdate=date("YmdHis",$dt-200);
$linkid=mysql_connect("localhost","yourcount","password");
mysql_select_db("yourdatabase",$linkid);
$sql="update chat_getmsg set shijian="$newdate" where username="$username"";
mysql_query($sql,$linkid);
$sql="select username from chat_getmsg where shijian>="$fromdate"";
$res=mysql_query($sql,$linkid);
while(list($username)=mysql_fetch_row($res)){
echo "<a href="JavaScript:selectusername('$username')">$username</a><br>n";
$fromdate=date("YmdHis",$dt-100);
$sql="delete from chat where shijian<="$fromdate"";
mysql_query($sql,$linkid);
mysql_close($linkid);
}
?>
</center>
<Script language="JavaScript">
<!--
function selectusername(str)
{
var win=parent.frames[3]
var doc=win.document
var form1=doc.body.all("fayanform")
form1.objectname.value=str
}
-->
</script>
</body>
</html>

【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】