一个简单QQ群聊案例代码解析(PHP实现)-php教程

资源魔 23 0
成绩:

应用面向工具编程的形式完成如下营业逻辑:

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

0.png

创立表qq_group表 会员组

1.png

创立表qq_msg 音讯表

2.png

创立表qq_user 会员表

3.png

创立表qq_user_group_relation会员以及组的关系表

4.png

创立表 qq_user_login_record 会员登录信息记载表

5.png

初始化数据,哪些是名目的启动数据呢

一、会员有张三,李四,王五,他们辨别有账号明码

二、有2个组 行政部门群组,摰友组

三、张三创立了行政部门群,张三,李四,王五都正在该群里

四、张三还创立了摰友组,外面有李四

接下里咱们把这些数据填入数据库中

一、会员有张三,李四,王五,他们辨别有账号明码(qq_user)

11.png

二、有2个组 行政部门群组,摰友组(qq_group)

22.png

三、张三创立了行政部门群,张三,李四,王五都正在该群里

四、张三还创立了摰友组,外面有李四 (qq_user_group_relation)

33.png

为了让行政群里能有音讯,咱们先试着正在音讯内外增加一笔记录

44.png

二、创立类,完成类

依据剖析,咱们应该至多要创立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【内容】:张三,我是王五


李四发了信息给张三,说“张三,我是李四,你正在干吗”

张三回复了李四,说“我正在想你呀”

咱们再来看数据库里的表有哪些变动

登录信息表数据添加了

2222.png

音讯表数据添加了

1111.png

总结:

一、解说了一个简略的qq会员登录谈天的场景

以上就是一个简略QQ群聊案例代码解析(PHP完成)的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!