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

PHP
php 多线程上下文中安全写文件实现代码
PHP类的使用 实例代码讲解
用php实现让页面只能被百度gogole蜘蛛访问的方法
php 学习笔记
PHP编程过程中需要了解的this,self,parent的区别
php 操作excel文件的方法小结
使用PHP获取网络文件的实现代码
PHP 巧用数组降低程序的时间复杂度
php下将XML转换为数组
php 文件上传代码(限制jpg文件)
php 无极分类(递归)实现代码
PHP 采集获取指定网址的内容
PHP 将图片按创建时间进行分类存储的实现代码
PHP 存储文本换行实现方法
PHP 批量更新网页内容实现代码
用PHP查询搜索引擎排名位置的代码
用php实现的获取网页中的图片并保存到本地的代码
php实现首页链接查询 友情链接检查的代码
处理php自动反斜杠的函数代码
php实现的遍历文件夹下所有文件,编辑删除

用PHP+MySql编写聊天室


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 141 ::
收藏到网摘: 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>

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