




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于php的聊天室程序登陆1 页面登陆的基本要素你可以在我的竹叶看到登陆 的表单,这里提供了最基本的登陆表单项(1)登陆表单(a)聊天表单的名字为chatform,我使用action=enter作为进入聊天室的入口,如果没有这个参数,则显示登陆页 面.(b)在表单提交时,先调用b1_submit()建立聊天的窗口聊天的目标窗口为b1_submit()建立 的howtodo窗口(2)表单项昵称:密码:(a)各表单项一定要设定最大允许长度 maxlength(3)建立聊天窗口的jsfunction b1_submit()chat=window.open(,howtodo,status=no,scr
2、ollbars=no,resizable=no);chat.moveto(0,0);chat.resizeto(screen.availwidth,screen.availheight);chat.outerwidth=screen.availwidth;chat.outerheight=screen.availheight;这段代码先 打开一个没有状态栏,滚动条,可调整尺寸的howtodo窗口!然后移动到屏幕左上角,然后放大到允许的屏幕大小. 聊天室编程思想-大门 - 通行证大门 - 通行证聊天室可以采用完全自由的方式运行,你可以随意 输入呢称,不用密码,不保存你的聊天状态,优点是:自由,非
3、常适合于游客!另外一个方法是注册聊天室,每个进入 聊天室的人都要输入自己的用户名和密码才能进入!优点:充分体现个性,非常适合于老朋友,他们的呢称不会被 人恶意侵占使用.我的聊天室使用注册方法!注册通常采用2种方法:1,先注册然后进入聊天;2,自动注 册,然后在里面修改自己的资料!我采用第2种方法!每个新进入的聊友的用户名会被自动保存到注册到数据库内 ,下次登陆必须输入准确的密码才能进入!下面是判断部分!本程序使用文本数据库 !/$useronline为在线人的数据文件名称/$useronlinelock为在线人的锁定标志 /$register为已经注册的数据文件名称/$registerlock
4、为注册文件的锁定标志/$split为分隔 符/登陆参数 enterif($action = enter)/当前时间秒数$timecurrent = date(u);/锁定在线人数文件,防止同时修改同一个文件while( file_exists($useronlinelock)if(!file_exists($useronlinelock)break;/创建临时文件 fclose(fopen($useronlinelock,w);/读入在线用户和已经注册用户的信息:密码,昵称,更新时间 $useronline = file($useronline);$register = file($regis
5、ter);/用于判断登 陆是否成功的标志$namesign=0;/判断用户名,密码的错误,用户名不允许为空,不允许超过10 个字符,密码不允许超过20个字符if($name =) | (strlen($name) 10) | (strlen($pass) 20) )print(没有昵称或密码过长);/登陆失败$namesign=1;/删除临时文件unlink($useronlinelock); else/查找是否已经有人注册或者密码错误$foundsign=0;for($i=0;$icount($register);$i+)/分割$tempregister = split($split,$re
6、gister$i,99);/找到已经注册的用户名if( $name = $tempregister0 )/已经找到标志$foundsign=1;/密码正确吗if($pass != $tempregister1)print(密码错了!);/登陆失败$namesign=1;unlink($useronlinelock);break;else/老用户登陆成功$namesign=0;break;/如果没有找到这个用户名,那么就自动注册 if(!$foundsign)/保存用户名和密码$handle = fopen($register,a);fputs($handle,$name$split$pass$
7、split );fclose($handle);/新 用户登陆成功$namesign=0;if(!$namesign) /更新在线人的名单$useronlinehandle = fopen($useronline,w);/判断是否已经在里面,只是刷新页面$updatesign = 0;for($i=0;$icount($useronline);$i+)$usertemp=split($split,chop($useronline$i),99);if($name = $usertemp0)/更新标志$updatesign = 1;fputs($useronlinehandle,$useronli
8、ne$i);elsefputs($useronlinehandle,$useronline$i);/如 果没有在里面,则增加到里面if(!$updatesign)fputs($useronlinehandle,$name$split$level$split$pass$split$timecurrent );fclose($useronlinehandle);/去掉缩定unlink($useronlinelock);/登陆成 功到这里,用户的验证已经完成,聊友已经合法的进入了聊天室,携带者呢称和密码 聊天室编程思想-大厅 - 显示界面大厅 - 显示界面2000年09月04现在的www聊天室基本全
9、部采用框架方式,可以用 frame也可以用iframe看个人喜欢了,我的采用frame的传统方式print( );print( );/主显示屏幕,负责显示聊天内容print( );/在线人数屏幕print();print( );/发送信息的屏幕,信息指挥中心,所有指令都要由这里发出print( );/被动更新屏幕,处理发送的信息print( );/主动更新屏幕,显示自己和其他聊友的聊天信息print( );/检测是否在线的屏幕,对于异常 离开,如死机,掉线等的处理print( );print( );因为各个页面之间的程序有 联系,所以显示顺序很重要,可以看到,我这里只有发送页面不是about:
10、blank,其他页面的显示都要先通过发送页 面的调用才能开始.聊天室编程思想-大厅 - 在线人数大厅 - 在线人数我根据网易聊天室的在线人数的方法,显示当前的在 线人数,代码解释如下:1 登陆时建立在线人名单的数组,放在body后面1)for($i=0;$i2显示在 线人数的jsdocument.writeln(在线人数+count+);document.writeln(所有人);document.writeln();var j,name,club;for(var i=0;ilist.length;i=i+1)if(listi!=null)/显示每个在线人的名字 document.writel
11、n(+listi+);this.r.document.writeln();3改变聊天对象function cs(name)if(this.d.document=null)return;if(name=所有人)this.d.add(所有人);this.d.document.inputform.talkto.value=所有人 ;/改变焦点this.d.document.inputform.msg.focus();return;for(var i=0;ilist.length;i=i+1)if(listi=name)/更改发送的谈话对象this.d.document.inputform.talkt
12、o.value=listi;this.d.document.inputform.msg.focus();return;/错误alert(此用户已离线或已改了昵称。);4删除一个用户 function del(str)for(var i=0;ilist.length;i=i+1)if(listi=str)delete listi;count-;5增加一个用户 function add(str1,str2)var l=list.length;for(var i=0;ilist.length;i=i+1)/如果已经在数组里面则返回if(listi=str1)return;/增加一个用户listl=s
13、tr1;count+;6更新聊天人数的方法,定时器的使用var timerid=null;var timerrunning=false;function stop()/停止if(timerrunning)cleartimeout(timerid);timerrunning=false;function start()stop();/调用更新在线人数的程序write1();function write1(). . . ./设定更新时间,timerid=settimeout(start(),30000);timerrunning=true;这种方法比较简单的实现了在线人数的显示,当然也可以使用读入
14、在线 人文件的方法显示在线人数,不过在改变聊天对象是会比较麻烦.聊天室编程思想-指挥中心 - 发送信息指挥中心 - 发送信息这里是聊天室的指挥中心,所有的指令都要在这里发出1下面是基本的发送表单代码?/下面的2个参数用于验证信息的正确性print( );print( );? /聊天对象,注意加上 readonly 属性/上次聊天的发送内容/发送的表单文本框2 检查发送内容的jsvar dx =;function checksay( )/不允许发送空的发言if(document.inputform.msg.value=)document.inputform.msg.focus();return
15、false;/不允许重复发言,内容相同,对象相同if (document.inputform.msg.value=document.inputform.message.value)&(document.inputform.talkto.value=dx)alert(发言不能重复);document.inputform.msg.focus();return false;/两次发言内容的间隔不能小于1秒,或者发言字数大于间隔*3t2=(new date().gettime()/1000;if(t2-t1)1)|(t2-t1)*3document.inputform.msg.value.length
16、)document.inputform.msg.focus();return false;/更新时间t1=t2;document.inputform.showsign.value=1;/保存上次发言内容document.inputform.message.value =document.inputform.msg.value;/清空发言内容document.inputform.msg.value =;/保存发言对象dx=document.inputform.talkto.value;/定位焦点document.inputform.msg.focus();/返回return(true);3调用信
17、息发送程序,发布聊天者已经进入的信息parent.bl.document.open();parent.bl.document.write(meta http-equiv=refresh content=0;url=messagesend.php?name=&action=enter&pass=)parent.bl.document.close();发言由messagesend.php处理完成,注意输出对象为bl,也就是处理发言的框架名称,这样保证发言框架的页面内容的完整聊天室编程思想-主动更新与被动更新主动更新与被动更新聊天的内容如何显示在屏幕上,一种是每隔一段时间刷新一次页面,读入全部聊天内
18、容,然后显示,这里采用的是js的document.write的方法实现不刷新的聊天页面!1 主页面的生成,规定了css类型,显示欢迎词function write2()if(this.u.document=null)return;this.u.document.writeln();this.u.document.writeln();this.u.document.writeln();this.u.document.writeln(.p9 font-size: 11pt; line-height: 15pt);this.u.document.writeln(body font-size: 11p
19、t; line-height: 15pt);this.u.document.writeln(a:visited font-size: 11pt;color: #0000ff; text-decoration: none;);this.u.document.writeln(a:link font-size: 11pt;color: #0000ff; text-decoration: none);this.u.document.writeln(a:hover font-size: 11pt;color: #ff0000);this.u.document.writeln();this.u.docum
20、ent.writeln();this.u.document.writeln(body);/. 这里插入生成在线人数组的程序段this.u.document.writeln();this.u.document.writeln();this.u.document.writeln(欢迎光临playboy聊天室,本聊天室正在测试阶段,如有问题请与我们联系);2 初始化进入信息,第一次进入聊天室if($action = enter)/ 调用显示主屏幕的js程序 /print(parent.write2(); );/发言内容,某某进入聊天室了$message = $name来到聊天室.$message.
21、.date(m月d日 h:i).parent.add($name,$photo);parent.write1();/更新发言内容while(file_exists($lockfile) $pppp+; /发言的锁定fclose(fopen($lockfile,w);/读入发言的总句数,也就是所有人一共发了多少言!我们可以保存每一个发言,但是这样会占用大量的磁盘空间,我们采用了一种取模的方法,循环使用文件来减少文件操作!$talkmessage = file($filename);$number = chop($talkmessage0);/发言数增加一,然后保存$talkhandle = fo
22、pen($filename,w);$number+;fputs($talkhandle,$number);fclose($talkhandle);/去掉锁定unlink($lockfile);/对发言总数对10取模,作为文件名保存发言内容,也就是说第11句和第1句使用同一个文件名,由于不可能同时有10句话没有更新,所以这是数在人不是非常多的情况下很好!当然,考虑到人多的情况,可以设成100.$filehandle = fopen(messageonline.($number%10).php,w);fputs($filehandle,$message);fclose($filehandle);/
23、显示进入信息print(parent.u.document.writeln($message); );/调用主动刷新js程序,传递已经显示的发言数目print(parent.flushwin($number) );/保存最后一次显示的发言$last = $number;3 处理发送表单的请求/不处理空的发言和超过一定数目的发言if( ($message != )&(strlen($message)150)/检查发言者是否在线,防止意外$onlineperson = file(useronline.dbf);$personsign=0;for($i=0;$icount($onlineperson
24、);$i+)$person = split($split,$onlineperson$i,99);if($person0 = $name)$personsign = 1;$person3 = date(u);break;/在线时的处理程序if($personsign = 1)/添加发言时间的部分$message = $message. .date(m月d日 h:i).;/锁定发言总数文件while(file_exists($lockfile) $pppp+; fclose(fopen($lockfile,w);/读入发言总数$talkmessage = file($filename);$num
25、ber = chop($talkmessage0);/总数加1,然后保存$talkhandle = fopen($filename,w);$number+;fputs($talkhandle,$number);fclose($talkhandle);unlink($lockfile);/总数对10取模后以文件形式保存发言内容$filehandle = fopen(messageonline.($number%10).php,w);fputs($filehandle,$message);fclose($filehandle);/这样,表单的处理已经完成,下面的主动更新程序将会把新的发言内容显示在屏幕上/4 主动更新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册土木工程师线上学习试题及答案
- 考初级工的试题及答案
- 基于AI的2025年智能客服情感分析在客服中心的应用
- 2025国企面试题库及答案
- 工业互联网平台SDN在工业互联网平台设备管理中的优化应用报告
- 护士皮瓣移植试题及答案
- 宁波二模语文试题及答案
- 针对2025年市场流动性风险管理的量化投资策略绩效评估报告
- 数字孪生视角下2025年城市规划与建设中的智慧城市安防设施布局与评估优化优化报告
- 现代音乐理论与作曲技巧的结合研究试题及答案
- GB/T 11253-2019碳素结构钢冷轧钢板及钢带
- 商务标评审表
- 2021版《安全生产法》培训课件
- 大连理工大学画法几何自学片段课件
- 相关方需求和期望及风险和机遇措施表
- FIDIC银皮书(中英文对照)
- 家谱电子版模板2
- 一年级美术下册教案-第8课 练笔成图-苏少版
- 农用地分等定级规程
- DB12∕T 822-2018 路用高粘结力环氧乳化沥青技术要求
- 《建设工程监理规范》word版
评论
0/150
提交评论