您当前的位置: 首页 > 网站编程 > ASP教程 > 用PHP+MySql编写聊天室

用PHP+MySql编写聊天室

作者:admin 来源:不详 发布时间: 2008-06-04 08:50 点击:
大家好!好久没有看到大家了,上次写了用PHP的通过文件操作的聊天室,当然是漏洞百出的,而且每一次刷新屏幕都很糟糕的!我想了好久,是不是能有一种方法不要刷新,就能取得发言的信息了?多用一个框架就能实现这个效果了,即多用一个框架我们称为getmsg,我

用PHP+MySql编写聊天室

    大家好!好久没有看到大家了,上次写了用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="发言" > 
    </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+MySql编写聊天室"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4