




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南寧職業技術學院《法語語法與寫作Ⅰ》2023-2024學年第一學期期末試卷
- 江西衛生職業學院《綜合英語聽說》2023-2024學年第一學期期末試卷
- 浙江傳媒學院《中國畫語言實踐1》2023-2024學年第二學期期末試卷
- 洛陽師范學院《高級社會工作行政》2023-2024學年第二學期期末試卷
- 鄭州升達經貿管理學院《民族民間音樂概論》2023-2024學年第二學期期末試卷
- 2025特許經銷商合同范本
- 陽臺門窗策劃方案范本
- 2025美容院員工勞動合同模板
- 山東水利職業學院《管理學科專業導論(一)》2023-2024學年第二學期期末試卷
- 2025翡翠玉石畫制作合同范本
- 鐵路基礎知識考試題庫500題(單選、多選、判斷)
- 繼發性高血壓的診斷思路與流程
- 上海市汽車維修結算工時定額(試行)
- 裝配式建筑發展存在的問題及對策分析
- 中國古典文獻學(全套)
- 自身免疫性腦炎
- GB/T 4857.14-1999包裝運輸包裝件傾翻試驗方法
- GB/T 11881-2006羽毛球
- 煤礦從業人員安全培訓考試題庫(附答案)
- 《詩意中國》朗誦稿
- 第十章-國際政治與世界格局-(《政治學概論》課件)
評論
0/150
提交評論