|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。聊天室|设计 聊天室可以采取完整自在的体例运转,你可以随便输出呢称,不必暗码,不保留你的聊天形态,长处是:自在,十分合适于旅客!别的一个办法是注册聊天室,每一个进入聊天室的人都要输出本人的用户名和暗码才干进入!长处:充实表现特性,十分合适于老伴侣,他们的呢称不会被人歹意侵犯利用.我的聊天室利用注册办法!
注册凡是采取2种办法:
1、先注册然落后入聊天
2、主动注册
然后在外面修正本人的材料!我采取第2种办法!!每一个新进入的聊友的用户名会被主动保留到注册到数据库内,下次上岸必需输出正确的暗码才干进入!
上面是判别局部!本法式利用文本数据库!
//$useronline为在耳目的数据文件称号
//$useronlinelock为在耳目的锁定标记
//$register为已注册的数据文件称号
//$registerlock为注册文件的锁定标记
//$split为分隔符
//上岸参数 enter
if($action == "enter")
{
//以后工夫秒数
$timecurrent = date("U");
//锁定在耳目数文件,避免同时修正统一个文件
while( file_exists($useronlinelock))
{
if(!file_exists($useronlinelock))
{
break;
}
}
//创立一时文件
fclose(fopen($useronlinelock,"w"));
//读入在线用户和已注册用户的信息:暗码,昵称,更新工夫
$useronline = file($useronline);
$register = file($register);
//用于判别上岸是不是胜利的标记
$namesign=0;
//判别用户名,暗码的毛病,用户名不答应为空,不答应超越10个字符,暗码不答应超越20个字符
if(($name =="") || (strlen($name) > 10) || (strlen($pass) > 20) )
{
print("没有昵称或暗码太长");
//上岸掉败
$namesign=1;
//删除一时文件
unlink($useronlinelock);
}
else
{
//查找是不是已有人注册或暗码毛病
$foundsign=0;
for($i=0;$i<count($register);$i++)
{
//朋分
$tempregister = split($split,$register[$i],99);
//找到已注册的用户名
if( $name == $tempregister[0] )
{
//已找到标记
$foundsign=1;
//暗码准确吗
if($pass != $tempregister[1])
print("暗码错了!");
//上岸掉败
$namesign=1;
unlink($useronlinelock);
break;
}
else
{
//老用户上岸胜利
$namesign=0;
break;
}
}
}
//假如没有找到这个用户名,那末就主动注册
if(!$foundsign)
{
//保留用户名和暗码
$handle = fopen($register,"a");
fputs($handle,"$name$split$pass$splitrn");
fclose($handle);
//新用户上岸胜利
$namesign=0;
}
}
}
if(!$namesign)
{
//更新在耳目的名单
$useronlinehandle = fopen($useronline,"w");
//判别是不是已在外面,只是刷新页面
$updatesign = 0;
for($i=0;$i<count($useronline);$i++)
{
$usertemp=split($split,chop($useronline[$i]),99);
if($name == $usertemp[0])
{
//更新标记
$updatesign = 1;
fputs($useronlinehandle,$useronline[$i]);
}
else
{
fputs($useronlinehandle,$useronline[$i]);
}
}
//假如没有在外面,则增添到外面
if(!$updatesign)
fputs($useronlinehandle,"$name$split$level$split$pass$split$timecurren
trn");
fclose($useronlinehandle);
//去失落缩定
unlink($useronlinelock);
//上岸胜利
}
到这里,用户的验证已完成,聊友已正当的进入了聊天室,携带者呢称和暗码
登录
1、页面上岸的根基要素
你可以在我的竹叶看到上岸的表单,这里供应了最根基的上岸表单项
(1)上岸表单
<form method=POST name=chatform action=chat/login.php?action=enter onSubmit="b1_submit();return true;" target="howtodo">
(a)聊天表单的名字为chatform,我利用action=enter作为进入聊天室的进口,假如没有这个参数,则显示上岸页面.
(b)在表单提交时,先挪用b1_submit()创立聊天的窗口
(c)聊天的方针窗口为b1_submit()创立的howtodo窗口
(2)表单项
昵称:<input type=text name=name size=15 maxlength="10">
暗码:<input type=password name=pass size=15 maxlength="10">
<input type=submit name=submit value=上岸 style="width:100">
<input type=reset name=reset value=重添 style="width:50">
(a)各表单项必定要设定最大答应长度 maxlength
(3)创立聊天窗口的js
<script LANGUAGE="javascript">
function b1_submit(){
chat=window.open(',"howtodo",'Status=no,scrollbars=no,resizable=no');
chat.moveTo(0,0);
chat.resizeTo(screen.availWidth,screen.availHeight);
chat.outerWidth=screen.availWidth;
chat.outerHeight=screen.availHeight;
}
这段代码先翻开一个没有形态栏,转动条,可调剂尺寸的howtodo窗口!然后挪动到屏幕左上角,然后缩小到答应的屏幕巨细.
在耳目数
我依据网易聊天室的在耳目数的办法,显示以后的在耳目数,代码注释以下:
1、上岸时创立在耳目名单的数组,放在body前面
<?
//锁定在耳目数文件
while(file_exists($useronlinelock)){$pppp++;}
fclose(fopen($useronlinelock,"w"));
//读入在耳目名单
$useronline = file($useronline);
unlink($useronlinelock);
//创立数组 list
print("document.writeln("list=new Array(");
$k=count($useronline);
if($k>1)
{
for($i=0;$i<($k-1);$i++)
{
$usercurrent = split($split,$useronline[$i],99);
// 姓名+,
print("'$usercurrent[0]',");
}
$i=$k-1;
// 处置最初一个姓名
$usercurrent = split($split,$useronline[$i],99);
print("'$usercurrent[0]'");
}
// 数组停止
print(")");n");
?>
2、显示在耳目数的js
document.writeln('[在耳目数<font color=red>'+count+'</font>]<br>');
document.writeln("[<a href="javascript:parent.cs('一切人')">一切人</
a>]<br>");
document.writeln("<font class='p9'>");
var j,name,club;
for(var i=0;i<list.length;i=i+1)
{
if(list[i]!=null){
//显示每一个在耳目的名字
document.writeln("<a href="javascript:parent.cs('"+list[i]+"')" titl
e='"+list[i]+"'>"+list[i]+"</a><br>");
}
}
this.r.document.writeln('</font><hr>');
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;i<list.length;i=i+1)
{
if(list[i]==name)
{
//更改发送的说话对象
this.d.document.inputform.talkto.value=list[i];
this.d.document.inputform.msg.focus();
return;
}
}
//毛病
alert('此用户已离线或已改了昵称。');
}
4、删除一个用户
function del(str)
{
for(var i=0;i<list.length;i=i+1)
if(list[i]==str)
{
delete list[i];
count--;
}
}
5、增添一个用户
function add(str1,str2)
{
var l=list.length;
for(var i=0;i<list.length;i=i+1)
//假如已在数组外面则前往
if(list[i]==str1)
return;
//增添一个用户
list[l]=str1;
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;
}
这类办法对照复杂的完成了在耳目数的显示,固然也能够利用读入在耳目文件的办法显示在耳目数,不外在改动聊天对象是会对照费事.
显示
如今的www聊天室根基全体采取框架体例,可以用frame也能够用iframe看团体喜好了,我的采取frame的传统体例
print("<frameset rows="*,110,0,0,0" border=0>n");
print("<frameset cols="660,118" rows="*">n");
//主显示屏幕,担任显示聊天内容
print("<frame name=u src=about:blank frameborder="NO" noresize>n");
//在耳目数屏幕
print("<frame name=r src="about:blank" frameborder="NO">");
print("</frameset>n");
//发送信息的屏幕,信息批示中间,一切指令都要由这里收回
print("<frame name=d src=send.php?name=$name&&pass=$pass scrolling='no
' frameborder="NO" noresize>n");
//主动更新屏幕,处置发送的信息
print("<frame src="about:blank" name="bl">n");
/自动更新屏幕,显示本人和其他聊友的聊天信息
print("<frame src="about:blank" name="flush">n");
//检测是不是在线的屏幕,关于异常分开,如逝世机,失落线等的处置
print("<frame src="about:blank" name="check">n");
print("</frameset>n");
由于各个页面之间的法式有接洽,所以显示按次很主要,可以看到,我这里只要发送页面不是about:blank,其他页面的显示都要先经由过程发送页面的挪用才干入手下手.
批示中间
这里是聊天室的批示中间,一切的指令都要在这里收回
1、上面是根基的发送表单代码
<form name=inputform action='messagesend.php' target='bl' width=6
0 height=60 border=0></font>";
//图片生成胜利标记
$specialsign = 1;
}
}
密谈的完成
每一个聊天室都供应了密谈功效,来为那些需求暗里里停止交换的聊友供应便利,这里把我的聊天室完成私聊的办法引见以下:
1 对发送信息的处置
每句私聊都要显示在本人和私聊对象的屏幕上,而其别人不克不及够看到.这里先对讲话内容停止处置,然后再保留到讲话文件外面!
//$split为分隔符号
messagesend.php
<?
//判别是不是私聊讲话
if($secret == "on")
{
//在讲话后面加上标志<!--+私聊标志+对象+讲话者+--> 个中+代表分隔符
//第一个标志为 secret 暗示为私聊,前面的是聊天对象和本人的名字,包管这两团体能看到
$message = "<!--$splitsecret$split$talkto$split$name$split--><font c
olor=ff0000>密谈</font>$message";
}
else
{
//假如第一个标志为 open 暗示公然,前面一样为对象和本人的名字
$message = "<!--$splitopen$split$talkto$split$name$split-->$message"
;
}
//然后保留到文件中
?>
2 显示私聊的办法
对每一个新的讲话读入后先辈行处置判别,在自动刷新法式外面停止.
messageflush.php
<?
//朋分讲话内容
$tempmessage = split($split,$message[0],99);
//假如讲话不是密谈,或私聊对象是本人,或发送这句私聊的是本人,那就显示这句话,不然不显示
if( ($tempmessage[1] != "secret") || ($tempmessage[2] == $name) || (
$tempmessage[3] == $name) )
{
//显示私聊
print("parent.u.document.writeln("$message[0]");rn");
}
?>
经由过程这类复杂的办法,咱们完成了私聊,
注重:
后面的保留文件处置时,对讲话的判别文字前后有<!-- 和 -->如许在屏幕显示时就能够不必特别处置了!
我先把我自己学习PHP的过程做一下概括: |
|