用PHP+MySql编写聊天室


Posted in PHP onOctober 09, 2006

大家好!好久没有看到大家了,上次写了用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>

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

PHP 相关文章推荐
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php 结果集的分页实现代码
Mar 10 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
如何开发一个虚拟域名系统
Oct 09 #PHP
PHP中对数据库操作的封装
Oct 09 #PHP
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 #PHP
一个简洁的多级别论坛
Oct 09 #PHP
用ODBC的分页显示
Oct 09 #PHP
为查询结果建立向后/向前按钮
Oct 09 #PHP
投票管理程序
Oct 09 #PHP
You might like
PHP 多维数组排序实现代码
2009/08/05 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
php制作文本式留言板
2015/03/18 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
Django实现跨域的2种方法
2019/07/31 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
公司委托书格式范文
2014/04/04 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
工作年限证明模板
2014/11/01 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
走近毛泽东观后感
2015/06/04 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python