用PHP+MySql编写聊天室

  •   2009-08-01/08:16
  • 大家好!好久没有看到大家了,上次写了用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>


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

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多