应用面向工具编程的形式完成如下营业逻辑:
1. 张三应用账号a,明码b登录了qq
2. 显示出张三最初的登录的工夫
3. 张三查看了 1小时内的行政部门群的信息(这个群里有张三,李四,王五,此中张三是群主)
4. 输入张三看到的这些信息
5. 忽然张三收到摰友李四的信息:信息叫:张三,我是李四,你正在干吗(张三创立了一个摰友组,外面有摰友李四)
6. 张三回复李四:我正在想你呀
起首咱们来剖析一下
一、流程剖析
1.张三应用账号a,明码b登录了qq
2.显示出张三最初的登录的工夫
3.张三查看了 1个小时内的行政部门群的信息(这个群里有张三,李四,王五,此中张三是群主)
4.输入张三看到的这些信息
5.李四发送音讯给张三,信息为:张三,我是李四,你正在干吗
6.张三发送音讯给李四,信息为:我正在想你呀
二、性能剖析:
1.辨认工具
QQ会员,QQ会员登录信息,QQ会员音讯,QQ会员群, QQ会员以及群的关系(一对多)
2.辨认工具的属性
QQ会员:
属性:id,姓名,账号,明码
QQ会员登录信息:(一个会员能够屡次登录,有多条登录记载)
属性:id,会员id,登录工夫
QQ会员音讯:属性:id,内容,发送工夫,发送人,接纳人,状态(已读,未读),查看工夫
QQ会员群: 属性:id,创立会员,群称号,群的创立工夫
QQ会员以及群的关系:(这类关系也是一个类,也能够孕育发生不少的实例)
属性:id,user_id,group_id,create_time
3.辨认工具的办法
QQ会员:
办法:
1.登录 ,
2.查看音讯
3.发送音讯
QQ会员登录信息:
1.保留会员的登录信息
2.猎取用户最初的登录信息
QQ会员音讯:
办法:修正状态(能够被修正为已读),猎取会员音讯,增加会员音讯
QQ会员群:
办法:1.猎取一切的群 2.创立群(张三查看行政部门群,阐明这个群一定是被某集体创立的)
QQ会员以及群的关系:
办法:1.依据会员查看她一切的群 = 猎取会员一切的群
2.依据一个群,能够查看这个群里的一切成员
三、数据库剖析:
1.QQ会员:此中属性对应的就是表中的字段
2.QQ会员音讯:此中属性对应的就是表中的字段
3.QQ会员群:此中属性对应的就是表中的字段
4.QQ会员以及群的两头表 :由于一个会员能够隶属于多个会员群,以是需求有张这个表
字段:id,会员id,群id,入群工夫
5.QQ会员登录信息列表
剖析实现后,咱们来详细的操作
一、创立数据库,初始化数据
创立数据库,名字咱们只管即便浅显易懂点好,就叫做qq
创立表qq_group表 会员组
创立表qq_msg 音讯表
创立表qq_user 会员表
创立表qq_user_group_relation会员以及组的关系表
创立表 qq_user_login_record 会员登录信息记载表
初始化数据,哪些是名目的启动数据呢
一、会员有张三,李四,王五,他们辨别有账号明码
二、有2个组 行政部门群组,摰友组
三、张三创立了行政部门群,张三,李四,王五都正在该群里
四、张三还创立了摰友组,外面有李四
接下里咱们把这些数据填入数据库中
一、会员有张三,李四,王五,他们辨别有账号明码(qq_user)
二、有2个组 行政部门群组,摰友组(qq_group)
三、张三创立了行政部门群,张三,李四,王五都正在该群里
四、张三还创立了摰友组,外面有李四 (qq_user_group_relation)
为了让行政群里能有音讯,咱们先试着正在音讯内外增加一笔记录
二、创立类,完成类
依据剖析,咱们应该至多要创立5个类,然而一切的类都需求数据库衔接,以是咱们能够独自创立一个数据库类,以是有6个类需求创立
为了不便治理,咱们把这些类都放到model目次中
model/Mysql.class.php
<?php //数据库衔接类 class Mysql{ //属性:id,姓名,账号,明码,登录工夫 public $link = "";//id public function __construct(){ //创立衔接 $this->init(); } public function __destruct(){ //销毁数据库衔接 if( $this->link ){ mysqli_close($this->link); } } //创立衔接,初始化衔接 public function init( ){ //创立衔接 $config = Array( "type"=>'mysql', "hostname"=>"127.0.0.1", "database"=>"qq", "username"=>"root", "password"=>"root" ); $this->link = mysqli_connect($config['hostname'],$config['username'], $config['password'],$config['database']); } } ?>
model/Group.class.php
<?php require_once "MySql.class.php"; class Group{ // 属性:id,创立会员,群称号,群的创立工夫 public $id = ""; public $userid = ""; public $groupName = ""; public $createTime = ""; public $mySql = ""; public $tableName = "qq_user_group"; public function __construct(){ $this->mySql = new MySql(); } //1.猎取一切的群 //假如没有指定详细的创立人,能够猎取一切的群 public function getAll($creatorUserId=''){ //创立衔接 $conn = $this->Mysql->link; //写sql,执行sql $where = ""; if( !empty($userid) ){ $where .= " creator_user_id=".$creatorUserId; } $sql = "select * from {$this->tableName} where 1=1 and {$where}"; //执行sql $result = mysqli_query($conn,$sql); //猎取数据 // $list = mysqli_fetch_all($result); $list = Array(); while( $row=mysqli_fetch_assoc($result) ){ $list[] = $row; } //end //前往数据 return $list; } //2.创立群 留给同窗些,课上就没有写了,由于今朝的终极成果没有需求出现,默许曾经是张三创立好了 public function create(){ echo "创立了群"; } } ?>
Message.class.php
<?php require_once dirname(__FILE__)."/MySql.class.php"; // 会员音讯类 class Message{ //属性:id,内容,发送工夫,发送人,接纳人,状态(已读,未读),查看工夫 public $id = ""; public $content = ""; public $sendTime = ""; public $sendUserId = ""; public $toUserId = ""; public $status = ""; public $readTime = ""; public $mySql = ""; public $tableName = "qq_msg"; public function __construct(){ $this->mySql = new MySql(); } // 办法:修正状态(能够被修正为已读),查看音讯,发送音讯 public function updateStatus($id,$status){ //创立衔接 $conn = $this->mySql->link; //写sql,执行sql $sql = "update {$this->tableName} set status={$status} where id={$id}"; //执行 $result = mysqli_query($conn,$sql); if( $result ){ return true; }else{ return false; } } //查看会员音讯列表 public function getMsgList($userid,$type,$startTime,$endTime,$groupId){ //创立衔接 $conn = $this->mySql->link; //写sql,执行sql $where = " to_user_id={$userid} "; if( $type !=""){//这里特地留意不克不及间接写!empty,会招致0的状况思考没有出去 而0示意未读 $where .= " and status=".$type; } if( !empty($startTime) && !empty($endTime) ){ //判别工夫 $where .= " and create_time between {$startTime} and {$endTime}"; } if( $groupId ){ $where .= " and group_id = ".$groupId; } $sql = "select * from {$this->tableName} where {$where}"; //执行 $result = mysqli_query($conn,$sql); //猎取数据 // return mysqli_fetch_all($result); $list = Array(); while( $row=mysqli_fetch_assoc($result) ){ $list[] = $row; } return $list; } //增加音讯 public function add($userid,$content,$toUserId,$groupId){ //创立衔接 $conn = $this->mySql->link; //写sql,执行sql $sql = "insert into {$this->tableName} (content,create_time,send_user_id, to_user_id,status,read_time,group_id) values ('{$content}',".time().",{$userid}, {$toUserId},0,0,".$groupId.") "; //执行 $result = mysqli_query($conn,$sql); if( $result ){ return true; }else{ return false; } } } ?>
model/User.class.php
<?php //引入UserLoginInfo require_once "MySql.class.php"; require_once "UserLoginInfo.class.php"; require_once "Message.class.php"; class User{ //属性:id,姓名,账号,明码,登录工夫 public $id = "";//id public $name = "";//姓名 public $username = "";//账号 public $password = "";//明码 public $mySql = ""; public $tableName = "qq_msg"; public function __construct($id,$name,$username,$password){ //初始化工具 $this->id = $id; $this->name = $name; $this->username = $username; $this->password = $password; $this->mySql = new MySql(); } public function login( $inputUsername,$inputPassword ){ //登录逻辑 //判别用户名以及明码能否正确 if( $inputUsername != $this->username || $inputPassword !=$this->password){ return array("msg"=>"用户名或许账号谬误"); } //登录胜利 $logintime = time(); // echo $this->name."应用账号:{$inputUsername}以及明码{$inputPassword}登录了, // 登录工夫为:".date('Y-m-d H:i:s',$logintime); //将登录信息保留到数据库 $logininfo = new UserLoginInfo(); $result = $logininfo->save($this->id); return $result; } //查看音讯 public function getMessage($startTime,$endTime,$groupId){ //查看音讯相称于经过查看这个举措以及音讯进行了互动 //以是经过办法的挪用来执行 $messageModel = new Message(); return $messageModel->getMsgList($this->id,'',$startTime,$endTime,$groupId); } //发送音讯相称于经过查看这个举措以及音讯进行了互动 public function sendMessage($content,$toUserId,$groupId){ //以是经过办法的挪用来执行 $messageModel = new Message(); return $messageModel->add($this->id,$content,$toUserId,$groupId); } } ?>
model/UserGroupRelation.class.php
<?php require_once "Mysql.class.php"; class UserGroupRelation{ // 属性:id,创立会员,群称号,群的创立工夫 public $id = ""; public $userid = ""; public $groupName = ""; public $createTime = ""; public $mySql = ""; public $tableName = "qq_user_group_relation"; public function __construct(){ $this->mySql = new MySql(); } //1.猎取一个群里一切的会员 依据群猎取会员 public function getUserList($groupid){ //创立衔接 $conn = $this->mySql->link; //写sql,执行sql $sql = "select * from {$this->tableName } where group_id={$groupid}"; //执行 $result = mysqli_query($conn,$sql); //猎取数据 // return mysqli_fetch_all($result); $list = Array(); while( $row=mysqli_fetch_assoc($result) ){ $list[] = $row; } return $list; } //2.依据某个会员猎取他一切的群 public function getGroupList($userid){ //创立衔接 $conn = $this->mySql->link; //写sql,执行sql $sql = "select * from {$this->tableName } where user_id={$userid}"; //执行 $result = mysqli_query($conn,$sql); //猎取数据 // return mysqli_fetch_all($result); $list = Array(); while( $row=mysqli_fetch_assoc($result) ){ $list[] = $row; } return $list; } } ?>
model/UserLoginInfo.class.php
<?php require_once "Mysql.class.php"; class UserLoginInfo{ //属性:id,会员id,登录工夫 public $id = "";//id public $userid = "";//姓名 public $loginTime = "";//登录工夫 public $mySql = ""; public $tableName = "qq_user_login_record"; public function __construct(){ $this->mySql = new MySql(); } //办法: public function save( $userid ){ //增加用户登录记载 $logintime = time(); //保留到数据库 //创立衔接 $conn = $this->mySql->link; //写sql执行sql $sql = "insert into ".$this->tableName. "(user_id,login_time) values({$userid}, {$logintime} )"; //执行 $result = mysqli_query($conn,$sql); //这类增,删,改的举措前往的后果是一个数字 1示意胜利 if( $result ){ return true; }else{ return false; } } //猎取用户最初登录信息 public function getLastLoginInfo($userid){ //创立衔接 $conn = $this->mySql->link; //写sql执行sql $sql = "select * from ".$this->tableName. " where user_id={$userid} order by id desc limit 2"; //执行 $result = mysqli_query($conn,$sql); //猎取数据 $lastLoginInfo = mysqli_fetch_assoc($result); return $lastLoginInfo; } } ?>
三、写流程
创立index.php
<?php //营业代码 require_once "model/Message.class.php"; require_once "model/User.class.php"; require_once "model/UserGroupRelation.class.php"; require_once "model/UserLoginInfo.class.php"; //张三登录 $zhangsan = new User(1,"张三","a","b"); // //登录 $zhangsan->login("a","b"); echo $zhangsan->name."应用账号a以及明码b 登录了<br/><br/>"; //输入最初登录工夫 $logininfoModel = new UserLoginInfo(); //猎取最初登录信息 $lastLoginInfo = $logininfoModel->getLastLoginInfo($zhangsan->id); $lastLoginTime = date("Y-m-d H:i:s",$lastLoginInfo['login_time']); echo $zhangsan->name."最初登录工夫为".$lastLoginTime."<br/><br/>"; // 2.张三查看了 1个小时内的行政部门群的信息(这个群里有张三,李四,王五,此中张三是群主) $startTime= strtotime("-1 hour"); $endTime = time(); $msglist = $zhangsan->getMessage($startTime,$endTime,1);//查看行为 echo "张三查看了 1小时内的行政部门群的信息<br/><br/>"; echo "<b>张三看到的信息是</b></br/><br/>"; //3.输入张三看到的这些信息 // print_r($msglist); foreach( $msglist as $msg ){ echo "【发送人id】:".$msg["send_user_id"]."【内容】:".$msg["content"]."<br/>"; } echo "<br/><br/>"; //4.忽然张三收到摰友李四的信息:信息叫:张三,你正在干吗 //相称于是李四给张三发送了音讯 $lisi = new User(2,"李四","lisi","123456"); $lisi->sendMessage("张三,我是李四,你正在干吗",$zhangsan->id,2); echo "李四发了信息给张三,说“张三,我是李四,你正在干吗”<br/><br/>"; //5.张三回复李四:我正在想你呀 $zhangsan->sendMessage("我正在想你呀",$lisi->id,2); echo "张三回复了李四,说“我正在想你呀”"; ?>
运转后果以下:
张三应用账号a以及明码b 登录了
张三最初登录工夫为2020-06-01 12:40:20
张三查看了 1小时内的行政部门群的信息
张三看到的信息是
【发送人id】:3【内容】:张三,我是王五
李四发了信息给张三,说“张三,我是李四,你正在干吗”
张三回复了李四,说“我正在想你呀”
咱们再来看数据库里的表有哪些变动
登录信息表数据添加了
音讯表数据添加了
总结:
一、解说了一个简略的qq会员登录谈天的场景
以上就是一个简略QQ群聊案例代码解析(PHP完成)的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学
抱歉,评论功能暂时关闭!