php简单多人聊天界面的设计代码
下面来简单介绍一个最简单的登录多人聊天系统的设计,只有四个文件,分别是登录页面login.php、多人聊天界面chat.php、设计数据库操作的sql.php文件以及注册页面regester.php,其中注册页面和登录页面的代码有%98的代码是雷同的。都是采用同样的结构。难点其实还是在sql.php文件中,因为这个是涉及到数据库操作的文件,所以很多问题基本都是由这个页面引起的,当然还有那个多人聊天界面也是很容易出问题。总体说来其实无非就是从数据库中根据用户名和接收者的名字取出相应的对话内容。这个缺点挺大的,在实际应用中几乎是毫无用武之地的,仅仅是为了学习才会想到这样做的,对话内容放在数据库里,那也是很耗费系统资源的行为。不过保存少量的对话信息应该还是可以的。闲话就不多说了,只要能够看懂sql.php文件的代码基本上就看懂了这整个多人聊天系统,注意我的四个文件全部都是放在一个文件下,所以当你要复制这个系统时,请务必保证这四个文件都是处于同一个文件夹下,并且最好再次确保这四个文件是用utf-8编码,如果不是请修改为utf-8编码。要不然就会出现中文乱码现象。一个汉字在gbk编码下占用2个字符,而在utf-8编码下占用三个字符,这一点可以用strlen()函数检验。这里要建立两个表,两个数据表如下所示:
这个表名叫comm,是专门用于存放用户对话信息的数据表:
下面的表名叫rege,是专门用于存放用户注册信息的:
下面是登录页面login.php
welcom to login page用户名:
密码:
请输入验证码:看不清点击图片换一张
点击注册
checkpassword($user, $pwd)){ //$_session[$user]=true; header(location:chat.php?name=.urlencode($user)); } else { echo ; } } } }
下面是注册页面regester.php
welcom to login page用户名:
密码:
请输入验证码:看不清点击图片换一张
=19){ echo ;exit(); } else { include_once 'sql.php'; $sql = new sql(); $sql->regerster($user, $pwd); } } } ?>
下面是操作数据库的sql.php文件
conn=mysql_connect(localhost,like,admin); mysql_select_db(test); if(!$this->conn) die(fail to connect the mysql database); } public function queryinfor($receiver){ $arr=array(); $receiver=iconv(utf-8,gbk,$receiver); $query=select * from `comm` where recever='$receiver' order by id desc; mysql_query(set names gbk); $result=mysql_query($query,$this->conn) or die(fuck error); while($row=mysql_fetch_row($result)){ $arr[]=$row; } if(count($arr)>5){//保存的信息超过五条,就删除掉多余信息 for($i=count($arr)-1;$i>4;$i--){ mysql_query(delete from `comm` where id={$arr[$i][0]}) or die(fail to delete the extra information); unset($arr[$i]); } } mysql_free_result($result); for($i=0;$iconn) or die(fuck error); while($row=mysql_fetch_row($result)){ $arr[]=$row; } if(count($arr)>5){//保存的信息超过五条,就删除掉多余信息 for($i=count($arr)-1;$i>4;$i--){ mysql_query(delete from `comm` where id={$arr[$i][0]}) or die(fail to delete the extra information); unset($arr[$i]); } } mysql_free_result($result); for($i=0;$iconn); $query=insert into `comm`(sendor,time,recever,content)values('$sender','$timestamp','$receiver','$content'); mysql_query($query,$this->conn) or die(insert error); } public function getsenderall($name){ $arr= array(); $name=iconv(utf-8,gbk,$name); $query=select user from `rege` where 1 order by id desc; mysql_query(set names gbk,$this->conn); $result=mysql_query($query,$this->conn) or die(no data in database); while($row=mysql_fetch_row($result)){ $arr[]=$row[0]; } for($i=0;$iconn) or die(注销失败); } public function checkpassword($name,$password=null){ $name=iconv(utf-8,gbk,$name); $queryp=select * from `rege` where user='$name' and password='$password' limit 1; $queryq=select * from `rege` where user='$name' limit 1; mysql_query(set names gbk,$this->conn); if($password!=null){ mysql_query($queryp,$this->conn) or die(ass error); if(mysql_affected_rows($this->conn)>0){ $result=mysql_query(select status from `rege` where user='$name'); $row=mysql_fetch_row($result); if($row[0]) { $this->infor=该用户已经登录; return false; } $query=update `rege` set status=true where user='$name'; mysql_query($query,$this->conn); return true; }else{ $this->infor=用户名或密码错误; return false; } } else { mysql_query($queryq,$this->conn) or die(sorry error); if(mysql_affected_rows($this->conn)>0){ $this->infor=该用户名已被注册; return false; } return true; } } public function regerster($name,$pwd){ $name=iconv(utf-8,gbk,$name); $query=insert into `rege`(`user`,`password`) values ('$name','$pwd'); mysql_query(set names gbk,$this->conn); mysql_query($query,$this->conn) or die(注册失败); $this->infor=注册成功; } public function close(){ mysql_close($this->conn); }}
下面是用户登录之后的多人聊天界面chat.php,说是多人聊天,其实是很粗糙的界面,就是一个ul标签列出了所有人传达给你的最新五条信息,多余信息会被自动删除,然后你可以选择任意一个人写下对他/她说的话,然后就是刷新显示。其实原理挺简单的。
logout($sess_name); $_session[$sess_name]=false; header(content-type=text/html;charset=utf-8); echo 注销成功; echo 返回到登录页面; exit(); } } if(isset($_get['name'])){ $user=urldecode($_get['name']); $user=$_get['name']; } else{ header(location:login.php); } if(isset($_post['content'])){ $tmp_content=$_post['content']; $tmp_user=$_post['user']; $tmp_receive=$_post['selec']; $tmp=new sql(); $tmp->setdatabase($tmp_user, $tmp_receive, $tmp_content); $tmp=$tmp_content=$tmp_user=$tmp_receive=null; }?>welcom to chat page注销queryinfor($user); for($i=count($arr)-1;$i>=0;$i--){ echo .$arr[$i][1].在 .$arr[$i][2].对你说过:
; echo .$arr[$i][4].
; } $arr=$sql->queryquery($user); for($i=count($arr)-1;$i>=0;$i--){ echo .你在.$arr[$i][2].对 .$arr[$i][3].说过:
; echo .$arr[$i][4].
; }?>
想对getsenderall($user); for($i=0;$i$arr[$i]; }?>说:
聊天界面图: