学院首页>冲浪宝典>联络聊天>用PHP+MySql编写聊天室

用PHP+MySql编写聊天室

作者:情升网站 来源:情升网站 添加时间:2006-5-21 12:59:45
大家好!好久没有看到大家了,上次写了用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_sellect_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> 

<ffffffffframeset 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>
"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>
"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>
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> 

站内搜索