用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="发言" 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>

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