Maison >développement back-end >Problème PHP >Comment mettre en œuvre des idées de salon de discussion en php
L'idée deimplémenter une salle de discussion en PHP est la suivante : 1. Créer une table ; 2. Définir "connect.php" pour se connecter à la base de données 3. Créer le fichier d'interface de discussion utilisateur "client.php" ; ; 4. Implémentez la requête pour les informations de réponse du service client ; 5. , définissez la page de discussion du service client "server.php" 6. Envoyez simplement le message à l'utilisateur.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
L'idée d'implémenter un salon de discussion en PHP
Explication détaillée de l'implémentation simple méthode du salon de discussion PHP
Cet article décrit le salon de discussion PHP avec des exemples Méthode d'implémentation simple. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Utilisateur => Service client (stockez d'abord les informations dans la base de données, puis interrogez en continu les données de la base de données et envoyez-les au service client via une connexion ob+ longue )
Service client => Utilisateur (recevez d'abord les informations de l'utilisateur, puis stockez les informations de réponse dans la base de données, et enfin demandez en continu des données via un sondage ajax et affichez-les sur l'interface de discussion de l'utilisateur)
[Remarque :] Si tout les pages sont configurées, d'abord un lien vers la page de discussion du service client (server.php), puis un lien vers la page utilisateur (client.php) : rec : la partie qui reçoit les informations, sender : la partie qui envoie les informations, content : qui envoie le contenu, is_new : en tant que marque, 1 est un nouveau message 2 est un message lu (la valeur par défaut est 1)
CREATE TABLE `chat_log` ( `log_id` int(11) NOT NULL AUTO_INCREMENT, `rec` varchar(10) NOT NULL COMMENT '接受方', `sender` varchar(10) NOT NULL COMMENT '发送方', `content` text NOT NULL COMMENT '发送内容', `is_new` tinyint(4) NOT NULL DEFAULT '1' COMMENT '信息 1新信息 0 已读信息', PRIMARY KEY (`log_id`,`rec`) ) ENGINE=MyISAM AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COMMENT='用户客服聊天轮询表'
Étape 2 : Lien vers le base de données : connect.php
$link = mysql_connect('localhost', 'root', ''); mysql_query("set names utf8"); mysql_select_db("chat");
Étape 3 : Interface de discussion utilisateur : client.php
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>User窗口</title> <style> #user { width: 440px; height: 300px; border: 1px solid blue; } </style> <script src='http://code.jquery.com/jquery-latest.js'></script> <script> $(function () { $("#btn").click(function () { var content = $("textarea").val(); if(content == ''){alert('发送内容不能为空');return;} // 发送给客服 <!-- 把提交数据通过toServer.php存入数据库--> $.post("toServer.php", {'msg':content}, function (res) { var obj = JSON.parse(res); $("#user").append("<b>你向客服发送:</b>" + obj + "<br>"); $("textarea").val(" "); }); }); // 用ajax轮询方式 从数据库获取 客服是否有发送消息给用户 var polling = { "url" : 'fromServer.php', "dataType" : 'json', success : function (res) { //ajax请求返回的数据 var obj = res; //追加到User聊天的页面 $("#user").append("<b style='color:red'>客服回复:" + obj.content + "</b><br>"); $.ajax(polling); } }; $.ajax(polling); //轮询发送ajax请求 }) </script> </head> <body> <iframe src="" width="0" height="0" frameborder="0"></iframe> <h3>与客服聊天窗口</h3> <p contenteditable="true" id="user"></p> <p> <textarea name="msg_list" id="" cols="60" rows="15"></textarea> <button id="btn" type="button">send..</button> </p> </body> </html>Quatrième : L'utilisateur envoie un message dans la bibliothèque + sondage ajax pour demander s'il existe des informations de réponse du service client toServer.php
require('connect.php'); $msg = htmlspecialchars($_POST['msg'], ENT_QUOTES); $sql = "INSERT INTO `chat_log` (rec, sender, content) VALUES('admin', 'user', '$msg' )"; mysql_query($sql, $link); echo json_encode($msg);fromServer.php
require('connect.php'); set_time_limit(0);//永不超时 while (true){ $sql = "SELECT * FROM `chat_log` WHERE rec='user' AND is_new=1 ORDER BY log_id DESC LIMIT 1"; $res = mysql_query($sql, $link); if($row = mysql_fetch_assoc($res)){ $sql = "UPDATE `chat_log` SET is_new=0 WHERE log_id=".$row['log_id']; mysql_query($sql,$link); die(json_encode($row)); } }Étape 5 : Page de discussion du service client server.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>客服窗口</title> <style> #server { width: 440px; height: 300px; border: 1px solid blue; } </style> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- 进行ob缓存输出 --> <script> function showMsg(res) { var obj = eval(res); $("#server").append("<b style='color:red'>User向你发送:" + obj.content + "</b><br/>"); } //回复User信息 $(function () { $("#btn").click(function () { var content = $("textarea").val(); //客服发送的信息通过toClient.php存入数据库 $.post("toClient.php", {'msg':content},function (res) { var obj = JSON.parse(res); $("#server").append("你向User发送:" + obj+ "<br>"); $("textarea").val(""); }) }); }) </script> </head> <body> <iframe src="./fromClient.php" width="0" height="0" frameborder="0"></iframe> <h3>与User聊天窗口</h3> <p contenteditable="true" id="server"></p> <p> <textarea name="msg_list" id="" cols="60" rows="15"></textarea> <button id="btn" type="button">send..</button> </p> </body> </html>Étape 6 : Base de données de requête du service client pour voir si l'utilisateur a envoyé des informations + Envoyer des messages aux utilisateurs fromClient.php
require('connect.php'); ob_start(); //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面 echo str_repeat('', 4096); ob_end_flush(); //发送内部缓冲区到浏览器,删除缓冲区内容,关闭缓冲区 ob_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区 set_time_limit(0);//永不超时 while(true){ $sql = "select * from `chat_log` where rec= 'admin' and is_new= 1 ORDER BY log_id DESC LIMIT 1 "; $res = mysql_query($sql, $link); if($row = mysql_fetch_assoc($res)){ $sql = "UPDATE `chat_log` SET is_new=0 where log_id=".$row['log_id']; mysql_query($sql, $link); echo "<script>parent.showMsg(".json_encode($row).")</script>"; ob_flush(); flush(); //将ob_flush释放出来的内容,以及不在PHP缓冲区中的内容,全部输出至浏览器;刷新内部缓冲区的内容,并输出 sleep(1); } }toClient. php
require('connect.php'); $msg = htmlspecialchars($_POST['msg'], ENT_QUOTES); if(!empty($msg)){ $sql = "insert into chat_log(rec, sender, content) values('user', 'admin', '$msg')"; mysql_query($sql); echo json_encode($msg); }Ici, j'exécute le chat (server.php et client.php) sur mon ordinateur. Il est bloqué au début, mais cela s'améliore après un certain temps. Nous avons discuté, mais je ne sais pas pourquoi. , dites-le-moi, je vous en serais très reconnaissant !
(Je comprends que cela soit dû à de longues connexions)
[Apprentissage recommandé : "
Tutoriel vidéo PHP"]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!