热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php简略多人聊天界面的设计代码

php简单多人聊天界面的设计代码下面来简单介绍一个最简单的登录多人聊天系统的设计,只有四个文件,分别是登录页面login.php、多人聊天界面chat.php、设计数据库操作的Sql.php文件以及注册页面regester.php,其中注册页面和登录页面的代码有%9
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









用户名:
密码:
请输入验证码: 看不清点击图片换一张

点击注册

checkPassword($user, $pwd)){ //$_SESSION["$user"]=true; header("location:chat.php?name=".urlencode($user)); } else { echo ""; } } } }

下面是注册页面regester.php









用户名:
密码:
请输入验证码: 看不清点击图片换一张
6){ echo "";exit(); } if(preg_match("/^[\x7f-\xff]+$/", $user)==0){ echo "";exit(); } if(isset($_POST['pwd'])){ $pwd=trim($_POST['pwd']); if(preg_match("/^[a-z0-9\-]+$/i", $pwd)==0){ echo "";exit(); } if($pwd==''){ echo "";exit(); }elseif (strlen($pwd)>=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;
	}
?>








注销

    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]."

  • "; } ?>
" method="post"> 想对说:

聊天界面图:





推荐阅读
  • 本文探讨了如何在C#应用程序中有效处理来自两个不同数据库的数据,特别是当需要从一个数据库中选择不在另一个大型集合中的ID时遇到的挑战和解决方案。 ... [详细]
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • SQL注入实验:SqliLabs第38至45关解析
    本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ... [详细]
  • KKCMS代码审计初探
    本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ... [详细]
  • 掌握Python岗位,你需要了解的关键技能
    最近,在社交平台脉脉上,一条关于Python岗位的消息引起了广泛关注。本文将探讨Python岗位的实际价值,并深入解析阿里巴巴等大公司在面试Python开发者时常见的问题。 ... [详细]
  • 通过阅读本文,您将全面了解如何在数据库表中有效利用索引提升查询效率。本文不仅探讨了索引为何能提高查询速度,还深入分析了不同类型的索引结构及其在SQL Server中的实现方式。 ... [详细]
  • 本文探讨了在 MySQL 数据库中使用 LIKE 语句进行模糊查询并结合分页处理时可能遇到的问题,并提出了解决这些潜在陷阱的有效方法。 ... [详细]
  • 应用程序配置详解
    本文介绍了配置文件的关键特性及其在不同场景下的应用,重点探讨了Machine.Config和Web.Config两种主要配置文件的用途和配置方法。文章还详细解释了如何利用XML格式的配置文件来调整应用程序的行为,包括自定义配置、错误处理、身份验证和授权设置。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • 尝试从 MySQL 转向 SQL Server 2008 时遇到了安装错误,提示“系统配置未能初始化”,错误代码为 0x84B10001。怀疑可能是由于之前的 MySQL 安装残留导致的注册表问题。寻求专家建议。 ... [详细]
  • 使用DataGridViewComboBoxColumn实现数据绑定与操作
    本文详细介绍如何在DataGridView中使用DataGridViewComboBoxColumn来加载、选择和保存数据库中的数据,提供具体的实现步骤和示例代码。 ... [详细]
  • 本文详细介绍了如何在SQL查询中使用SAVEPOINT语句进行事务管理,以及如何通过多列排序增强查询结果的组织性。例如,通过在ORDER BY子句中指定多个列,可以实现更加细致和灵活的数据排序。 ... [详细]
  • Web安全入门:MySQL基础操作与SQL注入防范
    本文详细介绍了MySQL数据库的基础操作命令,包括数据库和表的基本管理,以及数据的增删查改等常用操作。同时,针对Web安全领域常见的SQL注入问题,提供了初步的理解和防范措施。 ... [详细]
author-avatar
单莼de笑脸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有