网站地图    收藏   

主页 > php专栏 > php综合实列 >

PHP设计聊天室步步通(三) - 综合实例

来源:自学PHP网    时间:2014-12-02 13:09 作者: 阅读:

[导读] 4、删除一个用户functiondel(str) { for(vari=0;i<list length;i=i+1) if(list[i]==str) { deletelist[i]; count--; } }5、增加一...

PHP设计聊天室步步通(三)

4、删除一个用户

  1. function del(str)  
  2. {  
  3. for(var i=0;i<list.length;i=i+1)  
  4. if(list[i]==str)  
  5. {  
  6. delete list[i];  
  7. count--;  
  8. }  

5、增加一个用户

  1. function add(str1,str2)  
  2. {  
  3. var l=list.length;  
  4. for(var i=0;i<list.length;i=i+1)  
  5.  
  6. //如果已经在数组里面则返回  
  7. if(list[i]==str1)  
  8. return;  
  9.  
  10. //增加一个用户  
  11. list[l]=str1;  
  12. count++;  

6、更新聊天人数的方法,定时器的使用

  1. var timerID=null;  
  2. var timerRunning=false;  
  3.  
  4. function stop()  
  5. {  
  6. //停止  
  7. if(timerRunning)clearTimeout(timerID);  
  8. timerRunning=false;  
  9. }  
  10. function start()  
  11. {  
  12. stop();  
  13. //调用更新在线人数的程序  
  14. write1();  
  15. }  
  16.  
  17. function write1()  
  18. {  
  19. ... ... ... ...  
  20. //设定更新时间,  
  21. timerID=setTimeout("start()",30000);  
  22. timerRunning=true;  

这种方法比较简单的实现了在线人数的显示,当然也可以使用读入在线人文件的方法显示在线人数,不过在改变聊天对象是会比较麻烦.

显示:现在的www聊天室基本全部采用框架方式,可以用frame也可以用iframe看个人喜欢了,我的采用frame的传统方式

  1. print("<frameset rows="*,110,0,0,0" border=0>n");  
  2. print("<frameset cols="660,118" rows="*">n");  
  3.  
  4. //主显示屏幕,负责显示聊天内容  
  5. print("<frame name=u src=about:blank frameborder="NO" noresize>n");  
  6.  
  7.  
  8. //在线人数屏幕  
  9. print("<frame name=r src="about:blank" frameborder="NO">");  
  10. print("</frameset>n");  
  11.  
  12. //发送信息的屏幕,信息指挥中心,所有指令都要由这里发出  
  13. print("<frame name=d src=send.php?name=$name&&pass=$pass scrolling='no  
  14. ' frameborder="NO" noresize>n");  
  15.  
  16. //被动更新屏幕,处理发送的信息  
  17. print("<frame src="about:blank" name="bl">n");  
  18.  
  19. /主动更新屏幕,显示自己和其他聊友的聊天信息  
  20. print("<frame src="about:blank" name="flush">n");  
  21.  
  22. //检测是否在线的屏幕,对于异常离开,如死机,掉线等的处理  
  23. print("<frame src="about:blank" name="check">n");  
  24. print("</frameset>n"); 

因为各个页面之间的程序有联系,所以显示顺序很重要,可以看到,我这里只有发送页面不是about:blank,其他页面的显示都要先通过发送页面的调用才能开始.

指挥中心

这里是聊天室的指挥中心,所有的指令都要在这里发出

1、下面是基本的发送表单代码

  1. <form name=inputform action='messagesend.php' target='bl' onsubmit='return(checksay());' method=POST>  
  2.  
  3. <?  
  4. //下面的2个参数用于验证信息的正确性  
  5. print("<input type='hidden' name='name' value='$name'>n");  
  6. print("<input type='hidden' name='pass' value='$pass'>n");  
  7. ?>  
  8. //聊天对象,注意加上 readonly 属性  
  9. <input type="text" name="talkto" size="10" maxlength="20" readonly value="所有人">  
  10. //上次聊天的发送内容  
  11. <input type='hidden' name='message' value=''>  
  12. //发送的表单文本框  
  13. <input type="text" name="msg" maxlength="120" size="34">  
  14. <input type="submit" name="Submit" value="发送">  
  15. </form> 

2 检查发送内容的js

  1. var dx ='';  
  2. function checksay( )  
  3. {  
  4.  
  5. //不允许发送空的发言  
  6. if(document.inputform.msg.value=='')  
  7. {  
  8. document.inputform.msg.focus();  
  9. return false;  
  10. }  
  11.  
  12. //不允许重复发言,内容相同,对象相同  
  13. if ((document.inputform.msg.value==document.inputform.message.value)  
  14. &&(document.inputform.talkto.value==dx))  
  15. {  
  16. alert('发言不能重复');  
  17. document.inputform.msg.focus();  
  18. return false;  
  19. }  
  20.  
  21. //两次发言内容的间隔不能小于1秒,或者发言字数大于间隔*3  
  22. t2=(new Date()).getTime()/1000;  
  23. if(((t2-t1)<1)||((t2-t1)*3<document.inputform.msg.value.length))  
  24. {  
  25. document.inputform.msg.focus();  
  26. return false;  
  27. }  
  28.  
  29. //更新时间  
  30. t1=t2;  
  31.  
  32. document.inputform.showsign.value=1;  
  33.  
  34. //保存上次发言内容  
  35. document.inputform.message.value =document.inputform.msg.value;  
  36.  
  37. //清空发言内容  
  38. document.inputform.msg.value ='';  
  39.  
  40. //保存发言对象  
  41. dx=document.inputform.talkto.value;  
  42.  
  43. //定位焦点  
  44. document.inputform.msg.focus();  
  45.  
  46. //返回  
  47. return(true);  

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论