PHP编程:PHP设计聊天室步步通
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。聊天室|设计 聊天室可以采取完整自在的体例运转,你可以随便输出呢称,不必暗码,不保留你的聊天形态,长处是:自在,十分合适于旅客!别的一个办法是注册聊天室,每一个进入聊天室的人都要输出本人的用户名和暗码才干进入!长处:充实表现特性,十分合适于老伴侣,他们的呢称不会被人歹意侵犯利用.我的聊天室利用注册办法!注册凡是采取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 )
{
//已找到标记
$foundsign=1;
//暗码准确吗
if($pass != $tempregister)
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)
{
//更新标记
$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',");
}
$i=$k-1;
// 处置最初一个姓名
$usercurrent = split($split,$useronline[$i],99);
print("'$usercurrent'");
}
// 数组停止
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!=null){
//显示每一个在耳目的名字
document.writeln("<a href="javascript:parent.cs('"+list+"')" titl
e='"+list+"'>"+list+"</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==name)
{
//更改发送的说话对象
this.d.document.inputform.talkto.value=list;
this.d.document.inputform.msg.focus();
return;
}
}
//毛病
alert('此用户已离线或已改了昵称。');
}
4、删除一个用户
function del(str)
{
for(var i=0;i<list.length;i=i+1)
if(list==str)
{
delete list;
count--;
}
}
5、增添一个用户
function add(str1,str2)
{
var l=list.length;
for(var i=0;i<list.length;i=i+1)
//假如已在数组外面则前往
if(list==str1)
return;
//增添一个用户
list=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,99);
//假如讲话不是密谈,或私聊对象是本人,或发送这句私聊的是本人,那就显示这句话,不然不显示
if( ($tempmessage != "secret") || ($tempmessage == $name) || (
$tempmessage == $name) )
{
//显示私聊
print("parent.u.document.writeln("$message");rn");
}
?>
经由过程这类复杂的办法,咱们完成了私聊,
注重:
后面的保留文件处置时,对讲话的判别文字前后有<!-- 和 -->如许在屏幕显示时就能够不必特别处置了!
我先把我自己学习PHP的过程做一下概括: 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 爱上php,他也会爱上你。 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 本文当是我的笔记啦,遇到的问题随时填充 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
页:
[1]