仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2158|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:PHP设计聊天室步步通

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:28:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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的过程做一下概括:
老尸 该用户已被删除
沙发
发表于 2015-2-16 04:30:17 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-3-4 23:47:08 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
谁可相欹 该用户已被删除
地板
发表于 2015-3-19 01:22:06 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
简单生活 该用户已被删除
5#
 楼主| 发表于 2015-3-22 17:08:23 | 只看该作者
爱上php,他也会爱上你。
admin 该用户已被删除
6#
发表于 2015-3-24 17:52:10 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
乐观 该用户已被删除
7#
发表于 2015-3-24 17:56:00 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
变相怪杰 该用户已被删除
8#
发表于 2015-3-26 12:09:32 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
透明 该用户已被删除
9#
发表于 2015-3-27 10:10:11 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
山那边是海 该用户已被删除
10#
发表于 2015-4-1 08:09:29 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
若天明 该用户已被删除
11#
发表于 2015-4-4 18:32:03 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
精灵巫婆 该用户已被删除
12#
发表于 2015-4-11 13:15:54 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
不帅 该用户已被删除
13#
发表于 2015-4-16 21:09:45 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
第二个灵魂 该用户已被删除
14#
发表于 2015-4-21 17:15:03 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
愤怒的大鸟 该用户已被删除
15#
发表于 2015-4-24 04:35:51 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
兰色精灵 该用户已被删除
16#
发表于 2015-4-25 23:40:59 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
海妖 该用户已被删除
17#
发表于 2015-4-26 20:10:47 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
若相依 该用户已被删除
18#
发表于 2015-5-6 21:11:54 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
19#
发表于 2015-6-3 21:05:18 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
因胸联盟 该用户已被删除
20#
发表于 2015-6-12 19:23:14 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 17:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表