在这篇文章中,我们将使用php网络套接字棘轮构建一个简单的php和mysql在线客服系统源码。如果您正在寻找如何在php中创建实时或实时的在线客服系统,那么您已经来到了正确的地方,因为在这篇文章中,我们分享了如何使用网络套接字来创建实时的在线客服系统源码。在此帖子中,我们将创建在线客服系统,其中多个用户可以与其他用户聊天。
从本教程中,您不仅可以学习如何使用在线客服系统应用程序,而且还可以找到一个到一个或一个用户或私人在线客服系统的解决方案。这是因为在此帖子下,我们将合并组聊天系统的源代码和一个到一个在线客服系统教程的源代码。因此,从这个单一的教程,您可以找到解决方案,如何使小组聊天系统和如何建立实时一个到一个在线客服系统。
演示:zxkfym.top
在线客服系统源码技术
Xmpp
VS代码编辑器
Html
PIP
Mysql数据库
通信服务系统
在线客服系统的特点
在本教程下,使用在线客服系统程序可以获得跟踪特性。
一旦单个用户发送了聊天消息,其他连接的其他用户就可以使用在线客服系统接收聊天消息。
用户在线或离线状态将在页面刷新后更改
一至一在线客服系统的特点
在本教程下,您可以找到以下功能:一个或单个用户或使用接口库的私人在线客服系统。
使用网络接口库实时发送一到一条聊天消息
使用网络接口库实时显示或隐藏未读消息通知
使用网络包库实时显示在线或离线用户状态
在线客服系统核心技术
网络接口是一个双向和全双工的,它提供了从网络浏览器到我们的服务器的持久连接。因此,当我们的浏览器中建立了网络连接时,它将打开连接,直到客户机或服务器决定关闭这个连接。因此,通过这个开放的连接,用户或我们的服务器可以在任何给定的时间向对方发送或接收聊天数据,这将使我们的Web程序完全基于事件驱动,而不仅仅是用户启动。这个网络接口的其他好处是,同时在单个运行的服务器上,它将连接所有连接,并允许我们在任何给定时间与任何数量的实时连接进行通信。因此,这就是在这个网络编程中这个网络接口的所有好处。
基于这一优点,我们使用了像棘轮这样的PHP网络接口来在PHP和mysql中构建在线客服系统。在此帖子下,我们将逐步学习如何从零开始使用网络接口在php中构建在线客服系统。在这个php网站开发教程下,您可以学习如何使用php脚本和mysql数据库,在在线客服系统上快速构建。
在线客服系统数据库
在学习在线客服系统之前,首先需要制作用于在mysql数据库中存储在线客服系统数据的表。因此,首先您需要根据SQL脚本运行表,可以在mysql数据库中创建在线客服系统表。
PHP在线客服系统的源代码
下面可以找到PHP在线客服系统的源代码文件.
database/Database_connection.php
我们将使用这个文件在此在线客服系统下进行数据库连接。
代码语言:javascript复制<?php
//Database_connection.php
class Database_connection
{
function connect()
{
$connect = new PDO("mysql:host=localhost; dbname=chat", "root", "");
return $connect;
}
}
?>
数据库/数据库
我们在服务器端的流程用户数据中使用了这个文件。在这个类文件下,我们有了用户数据的设置和获取方法,在此之后,我们有了检查用户是否已经注册的方法,最后,我们有了在mysql表中的插入用户数据。
代码语言:javascript复制<?php
//ChatUser.php
class ChatUser
{
private $user_id;
private $user_name;
private $user_email;
private $user_password;
private $user_profile;
private $user_status;
private $user_created_on;
private $user_verification_code;
private $user_login_status;
public $connect;
public function __construct()
{
require_once('Database_connection.php');
$database_object = new Database_connection;
$this->connect = $database_object->connect();
}
function setUserId($user_id)
{
$this->user_id = $user_id;
}
function getUserId()
{
return $this->user_id;
}
function setUserName($user_name)
{
$this->user_name = $user_name;
}
function getUserName()
{
return $this->user_name;
}
function setUserEmail($user_email)
{
$this->user_email = $user_email;
}
function getUserEmail()
{
return $this->user_email;
}
function setUserPassword($user_password)
{
$this->user_password = $user_password;
}
function getUserPassword()
{
return $this->user_password;
}
function setUserProfile($user_profile)
{
$this->user_profile = $user_profile;
}
function getUserProfile()
{
return $this->user_profile;
}
function setUserStatus($user_status)
{
$this->user_status = $user_status;
}
function getUserStatus()
{
return $this->user_status;
}
function setUserCreatedOn($user_created_on)
{
$this->user_created_on = $user_created_on;
}
function getUserCreatedOn()
{
return $this->user_created_on;
}
function setUserVerificationCode($user_verification_code)
{
$this->user_verification_code = $user_verification_code;
}
function getUserVerificationCode()
{
return $this->user_verification_code;
}
function setUserLoginStatus($user_login_status)
{
$this->user_login_status = $user_login_status;
}
function getUserLoginStatus()
{
return $this->user_login_status;
}
function make_avatar($character)
{
$path = "images/". time() . ".png";
$image = imagecreate(200, 200);
$red = rand(0, 255);
$green = rand(0, 255);
$blue = rand(0, 255);
imagecolorallocate($image, $red, $green, $blue);
$textcolor = imagecolorallocate($image, 255,255,255);
$font = dirname(__FILE__) . '/font/arial.ttf';
imagettftext($image, 100, 0, 55, 150, $textcolor, $font, $character);
imagepng($image, $path);
imagedestroy($image);
return $path;
}
function get_user_data_by_email()
{
$query = "
SELECT * FROM chat_user_table
WHERE user_email = :user_email
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_email', $this->user_email);
if($statement->execute())
{
$user_data = $statement->fetch(PDO::FETCH_ASSOC);
}
return $user_data;
}
function save_data()
{
$query = "
INSERT INTO chat_user_table (user_name, user_email, user_password, user_profile, user_status, user_created_on, user_verification_code)
VALUES (:user_name, :user_email, :user_password, :user_profile, :user_status, :user_created_on, :user_verification_code)
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_name', $this->user_name);
$statement->bindParam(':user_email', $this->user_email);
$statement->bindParam(':user_password', $this->user_password);
$statement->bindParam(':user_profile', $this->user_profile);
$statement->bindParam(':user_status', $this->user_status);
$statement->bindParam(':user_created_on', $this->user_created_on);
$statement->bindParam(':user_verification_code', $this->user_verification_code);
if($statement->execute())
{
return true;
}
else
{
return false;
}
}
function is_valid_email_verification_code()
{
$query = "
SELECT * FROM chat_user_table
WHERE user_verification_code = :user_verification_code
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_verification_code', $this->user_verification_code);
$statement->execute();
if($statement->rowCount() > 0)
{
return true;
}
else
{
return false;
}
}
function enable_user_account()
{
$query = "
UPDATE chat_user_table
SET user_status = :user_status
WHERE user_verification_code = :user_verification_code
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_status', $this->user_status);
$statement->bindParam(':user_verification_code', $this->user_verification_code);
if($statement->execute())
{
return true;
}
else
{
return false;
}
}
function update_user_login_data()
{
$query = "
UPDATE chat_user_table
SET user_login_status = :user_login_status
WHERE user_id = :user_id
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_login_status', $this->user_login_status);
$statement->bindParam(':user_id', $this->user_id);
if($statement->execute())
{
return true;
}
else
{
return false;
}
}
function get_user_data_by_id()
{
$query = "
SELECT * FROM chat_user_table
WHERE user_id = :user_id";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_id', $this->user_id);
try
{
if($statement->execute())
{
$user_data = $statement->fetch(PDO::FETCH_ASSOC);
}
else
{
$user_data = array();
}
}
catch (Exception $error)
{
echo $error->getMessage();
}
return $user_data;
}
function upload_image($user_profile)
{
$extension = explode('.', $user_profile['name']);
$new_name = rand() . '.' . $extension[1];
$destination = 'images/' . $new_name;
move_uploaded_file($user_profile['tmp_name'], $destination);
return $destination;
}
function update_data()
{
$query = "
UPDATE chat_user_table
SET user_name = :user_name,
user_email = :user_email,
user_password = :user_password,
user_profile = :user_profile
WHERE user_id = :user_id
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':user_name', $this->user_name);
$statement->bindParam(':user_email', $this->user_email);
$statement->bindParam(':user_password', $this->user_password);
$statement->bindParam(':user_profile', $this->user_profile);
$statement->bindParam(':user_id', $this->user_id);
if($statement->execute())
{
return true;
}
else
{
return false;
}
}
function get_user_all_data()
{
$query = "
SELECT * FROM chat_user_table
";
$statement = $this->connect->prepare($query);
$statement->execute();
$data = $statement->fetchAll(PDO::FETCH_ASSOC);
return $data;
}
}
?>
数据库
这个类我们将用于聊天消息数据的数据库操作.在这一类下,我们将为流程聊天数据表单数据库的相关操作做设置和获取功能。通过使用这个类,我们将在mysql数据库中插入或存储聊天消息,并从mysql数据库中获取聊天数据,以便在Web页面上显示。
代码语言:javascript复制<?php
class ChatRooms
{
private $chat_id;
private $user_id;
private $message;
private $created_on;
protected $connect;
public function setChatId($chat_id)
{
$this->chat_id = $chat_id;
}
function getChatId()
{
return $this->chat_id;
}
function setUserId($user_id)
{
$this->user_id = $user_id;
}
function getUserId()
{
return $this->user_id;
}
function setMessage($message)
{
$this->message = $message;
}
function getMessage()
{
return $this->message;
}
function setCreatedOn($created_on)
{
$this->created_on = $created_on;
}
function getCreatedOn()
{
return $this->created_on;
}
public function __construct()
{
require_once("Database_connection.php");
$database_object = new Database_connection;
$this->connect = $database_object->connect();
}
function save_chat()
{
$query = "
INSERT INTO chatrooms
(userid, msg, created_on)
VALUES (:userid, :msg, :created_on)
";
$statement = $this->connect->prepare($query);
$statement->bindParam(':userid', $this->user_id);
$statement->bindParam(':msg', $this->message);
$statement->bindParam(':created_on', $this->created_on);
$statement->execute();
}
function get_all_chat_data()
{
$query = "
SELECT * FROM chatrooms
INNER JOIN chat_user_table
ON chat_user_table.user_id = chatrooms.userid
ORDER BY chatrooms.id ASC
";
$statement = $this->connect->prepare($query);
$statement->execute();
return $statement->fetchAll(PDO::FETCH_ASSOC);
}
}
?>
登记册
我们使用这个文件来获得在线客服系统用户注册.用户可以从这个网页注册。
代码语言:javascript复制<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
use PHPMailerPHPMailerException;
require 'vendor/autoload.php';
$error = '';
$success_message = '';
if(isset($_POST["register"]))
{
session_start();
if(isset($_SESSION['user_data']))
{
header('location:chatroom.php');
}
require_once('database/ChatUser.php');
$user_object = new ChatUser;
$user_object->setUserName($_POST['user_name']);
$user_object->setUserEmail($_POST['user_email']);
$user_object->setUserPassword($_POST['user_password']);
$user_object->setUserProfile($user_object->make_avatar(strtoupper($_POST['user_name'][0])));
$user_object->setUserStatus('Disabled');
$user_object->setUserCreatedOn(date('Y-m-d H:i:s'));
$user_object->setUserVerificationCode(md5(uniqid()));
$user_data = $user_object->get_user_data_by_email();
if(is_array($user_data) && count($user_data) > 0)
{
$error = 'This Email Already Register';
}
else
{
if($user_object->save_data())
{
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtpout.secureserver.net';
$mail->SMTPAuth = true;
$mail->Username = 'xxxxx'; // SMTP username
$mail->Password = 'xxxxxx';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 80;
$mail->setFrom('tutorial@webslesson.info', 'Webslesson');
$mail->addAddress($user_object->getUserEmail());
$mail->isHTML(true);
$mail->Subject = 'Registration Verification for Chat Application Demo';
$mail->Body = '
<p>Thank you for registering for Chat Application Demo.</p>
<p>This is a verification email, please click the link to verify your email address.</p>
<p><a href="http://localhost/tutorial/chat_application/verify.php?code='.$user_object->getUserVerificationCode().'">Click to Verify</a></p>
<p>Thank you...</p>
';
$mail->send();
$success_message = 'Verification Email sent to ' . $user_object->getUserEmail() . ', so before login first verify your email';
}
else
{
$error = 'Something went wrong try again';
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Register | PHP Chat Application using Websocket</title>
<!-- Bootstrap core CSS -->
<link href="vendor-front/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="vendor-front/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="vendor-front/parsley/parsley.css"/>
<!-- Bootstrap core JavaScript -->
<script src="vendor-front/jquery/jquery.min.js"></script>
<script src="vendor-front/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor-front/jquery-easing/jquery.easing.min.js"></script>
<script type="text/javascript" src="vendor-front/parsley/dist/parsley.min.js"></script>
</head>
<body>
<div class="containter">
<br />
<br />
<h1 class="text-center">Chat Application in PHP & MySql using WebSocket - Email Verification</h1>
<div class="row justify-content-md-center">
<div class="col col-md-4 mt-5">
<?php
if($error != '')
{
echo '
<div class="alert alert-warning alert-dismissible fade show" role="alert">
'.$error.'
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
';
}
if($success_message != '')
{
echo '
<div class="alert alert-success">
'.$success_message.'
</div>
';
}
?>
<div class="card">
<div class="card-header">Register</div>
<div class="card-body">
<form method="post" id="register_form">
<div class="form-group">
<label>Enter Your Name</label>
<input type="text" name="user_name" id="user_name" class="form-control" data-parsley-pattern="/^[a-zA-Zs] $/" required />
</div>
<div class="form-group">
<label>Enter Your Email</label>
<input type="text" name="user_email" id="user_email" class="form-control" data-parsley-type="email" required />
</div>
<div class="form-group">
<label>Enter Your Password</label>
<input type="password" name="user_password" id="user_password" class="form-control" data-parsley-minlength="6" data-parsley-maxlength="12" data-parsley-pattern="^[a-zA-Z] $" required />
</div>
<div class="form-group text-center">
<input type="submit" name="register" class="btn btn-success" value="Register" />
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<script>
$(document).ready(function(){
$('#register_form').parsley();
});
</script>
使用网络接口在phpmysql中建立实时在线客服系统
将只由登录用户访问,因此一旦用户登录到此在线客服系统,系统将重定向到此页面记录。 文件和这个文件下面我们将建立聊天室,这样每个用户都可以相互聊天。在此页面下,用户也可以通过编辑配置文件和注销按钮链接查看自己的配置文件图片。
代码语言:javascript复制<?php
session_start();
if(!isset($_SESSION['user_data']))
{
header('location:index.php');
}
require('database/ChatUser.php');
require('database/ChatRooms.php');
$chat_object = new ChatRooms;
$chat_data = $chat_object->get_all_chat_data();
$user_object = new ChatUser;
$user_data = $user_object->get_user_all_data();
?>
<!DOCTYPE html>
<html>
<head>
<title>Chat application in php using web scocket programming</title>
<!-- Bootstrap core CSS -->
<link href="vendor-front/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="vendor-front/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="vendor-front/parsley/parsley.css"/>
<!-- Bootstrap core JavaScript -->
<script src="vendor-front/jquery/jquery.min.js"></script>
<script src="vendor-front/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor-front/jquery-easing/jquery.easing.min.js"></script>
<script type="text/javascript" src="vendor-front/parsley/dist/parsley.min.js"></script>
<style type="text/css">
html,
body {
height: 100%;
width: 100%;
margin: 0;
}
#wrapper
{
display: flex;
flex-flow: column;
height: 100%;
}
#remaining
{
flex-grow : 1;
}
#messages {
height: 200px;
background: whitesmoke;
overflow: auto;
}
#chat-room-frm {
margin-top: 10px;
}
#user_list
{
height:450px;
overflow-y: auto;
}
#messages_area
{
height: 650px;
overflow-y: auto;
background-color:#e6e6e6;
}
</style>
</head>
<body>
<div class="container">
<br />
<h3 class="text-center">PHP Chat Application using Websocket - Display User with Online or Offline Status</h3>
<br />
<div class="row">
<div class="col-lg-8">
<div class="card">
<div class="card-header"><h3>Chat Room</h3></div>
<div class="card-body" id="messages_area">
<?php
foreach($chat_data as $chat)
{
if(isset($_SESSION['user_data'][$chat['userid']]))
{
$from = 'Me';
$row_class = 'row justify-content-start';
$background_class = 'text-dark alert-light';
}
else
{
$from = $chat['user_name'];
$row_class = 'row justify-content-end';
$background_class = 'alert-success';
}
echo '
<div class="'.$row_class.'">
<div class="col-sm-10">
<div class="shadow-sm alert '.$background_class.'">
<b>'.$from.' - </b>'.$chat["msg"].'
<br />
<div class="text-right">
<small><i>'.$chat["created_on"].'</i></small>
</div>
</div>
</div>
</div>
';
}
?>
</div>
</div>
<form method="post" id="chat_form" data-parsley-errors-container="#validation_error">
<div class="input-group mb-3">
<textarea class="form-control" id="chat_message" name="chat_message" placeholder="Type Message Here" data-parsley-maxlength="1000" data-parsley-pattern="/^[a-zA-Z0-9s] $/" required></textarea>
<div class="input-group-append">
<button type="submit" name="send" id="send" class="btn btn-primary"><i class="fa fa-paper-plane"></i></button>
</div>
</div>
<div id="validation_error"></div>
</form>
</div>
<div class="col-lg-4">
<?php
$login_user_id = '';
foreach($_SESSION['user_data'] as $key => $value)
{
$login_user_id = $value['id'];
?>
<input type="hidden" name="login_user_id" id="login_user_id" value="<?php echo $login_user_id; ?>" />
<div class="mt-3 mb-3 text-center">
<img src="<?php echo $value['profile']; ?>" width="150" class="img-fluid rounded-circle img-thumbnail" />
<h3 class="mt-2"><?php echo $value['name']; ?></h3>
<a href="profile.php" class="btn btn-secondary mt-2 mb-2">Edit</a>
<input type="button" class="btn btn-primary mt-2 mb-2" name="logout" id="logout" value="Logout" />
</div>
<?php
}
?>
<div class="card mt-3">
<div class="card-header">User List</div>
<div class="card-body" id="user_list">
<div class="list-group list-group-flush">
<?php
if(count($user_data) > 0)
{
foreach($user_data as $key => $user)
{
$icon = '<i class="fa fa-circle text-danger"></i>';
if($user['user_login_status'] == 'Login')
{
$icon = '<i class="fa fa-circle text-success"></i>';
}
if($user['user_id'] != $login_user_id)
{
echo '
<a class="list-group-item list-group-item-action">
<img src="'.$user["user_profile"].'" class="img-fluid rounded-circle img-thumbnail" width="50" />
<span class="ml-1"><strong>'.$user["user_name"].'</strong></span>
<span class="mt-2 float-right">'.$icon.'</span>
</a>
';
}
}
}
?>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript">
$(document).ready(function(){
var conn = new WebSocket('ws://localhost:8080');
conn.onopen = function(e) {
console.log("Connection established!");
};
conn.onmessage = function(e) {
console.log(e.data);
var data = JSON.parse(e.data);
var row_class = '';
var background_class = '';
if(data.from == 'Me')
{
row_class = 'row justify-content-start';
background_class = 'text-dark alert-light';
}
else
{
row_class = 'row justify-content-end';
background_class = 'alert-success';
}
var html_data = "<div class='" row_class "'><div class='col-sm-10'><div class='shadow-sm alert " background_class "'><b>" data.from " - </b>" data.msg "<br /><div class='text-right'><small><i>" data.dt "</i></small></div></div></div></div>";
$('#messages_area').append(html_data);
$("#chat_message").val("");
};
$('#chat_form').parsley();
$('#messages_area').scrollTop($('#messages_area')[0].scrollHeight);
$('#chat_form').on('submit', function(event){
event.preventDefault();
if($('#chat_form').parsley().isValid())
{
var user_id = $('#login_user_id').val();
var message = $('#chat_message').val();
var data = {
userId : user_id,
msg : message
};
conn.send(JSON.stringify(data));
$('#messages_area').scrollTop($('#messages_area')[0].scrollHeight);
}
});
$('#logout').click(function(){
user_id = $('#login_user_id').val();
$.ajax({
url:"action.php",
method:"POST",
data:{user_id:user_id, action:'leave'},
success:function(data)
{
var response = JSON.parse(data);
if(response.status == 1)
{
conn.close();
location = 'index.php';
}
}
})
});
});
</script>
</html>
索引
在这个文件下,我们将为这个在线客服系统创建登录页面。
代码语言:javascript复制<?php
session_start();
$error = '';
if(isset($_SESSION['user_data']))
{
header('location:chatroom.php');
}
if(isset($_POST['login']))
{
require_once('database/ChatUser.php');
$user_object = new ChatUser;
$user_object->setUserEmail($_POST['user_email']);
$user_data = $user_object->get_user_data_by_email();
if(is_array($user_data) && count($user_data) > 0)
{
if($user_data['user_status'] == 'Enable')
{
if($user_data['user_password'] == $_POST['user_password'])
{
$user_object->setUserId($user_data['user_id']);
$user_object->setUserLoginStatus('Login');
if($user_object->update_user_login_data())
{
$_SESSION['user_data'][$user_data['user_id']] = [
'id' => $user_data['user_id'],
'name' => $user_data['user_name'],
'profile' => $user_data['user_profile']
];
header('location:chatroom.php');
}
}
else
{
$error = 'Wrong Password';
}
}
else
{
$error = 'Please Verify Your Email Address';
}
}
else
{
$error = 'Wrong Email Address';
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Login | PHP Chat Application using Websocket</title>
<!-- Bootstrap core CSS -->
<link href="vendor-front/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="vendor-front/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="vendor-front/parsley/parsley.css"/>
<!-- Bootstrap core JavaScript -->
<script src="vendor-front/jquery/jquery.min.js"></script>
<script src="vendor-front/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor-front/jquery-easing/jquery.easing.min.js"></script>
<script type="text/javascript" src="vendor-front/parsley/dist/parsley.min.js"></script>
</head>
<body>
<div class="containter">
<br />
<br />
<h1 class="text-center">Chat Application in PHP & MySql using WebSocket - Login</h1>
<div class="row justify-content-md-center mt-5">
<div class="col-md-4">
<?php
if(isset($_SESSION['success_message']))
{
echo '
<div class="alert alert-success">
'.$_SESSION["success_message"] .'
</div>
';
unset($_SESSION['success_message']);
}
if($error != '')
{
echo '
<div class="alert alert-danger">
'.$error.'
</div>
';
}
?>
<div class="card">
<div class="card-header">Login</div>
<div class="card-body">
<form method="post" id="login_form">
<div class="form-group">
<label>Enter Your Email Address</label>
<input type="text" name="user_email" id="user_email" class="form-control" data-parsley-type="email" required />
</div>
<div class="form-group">
<label>Enter Your Password</label>
<input type="password" name="user_password" id="user_password" class="form-control" required />
</div>
<div class="form-group text-center">
<input type="submit" name="login" id="login" class="btn btn-primary" value="Login" />
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<script>
$(document).ready(function(){
$('#login_form').parsley();
});
</script>
此文件已收到从聊天用户应用程序注销用户的Ajax请求。在此文件下,我们首先删除会话变量值,然后删除所有会话变量,然后以JSON格式向Ajax请求提供状态值。
代码语言:javascript复制<?php
//action.php
session_start();
if(isset($_POST['action']) && $_POST['action'] == 'leave')
{
require('database/ChatUser.php');
$user_object = new ChatUser;
$user_object->setUserId($_POST['user_id']);
$user_object->setUserLoginStatus('Logout');
if($user_object->update_user_login_data())
{
unset($_SESSION['user_data']);
session_destroy();
echo json_encode(['status'=>1]);
}
}
?>
管理员/服务员
代码语言:javascript复制<?php
//server.php
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use MyAppChat;
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8080
);
$server->run();
?>