溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用PHP實現(xiàn)簡單的聊天室應(yīng)用

發(fā)布時間:2021-08-03 18:42:25 來源:億速云 閱讀:142 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“怎么用PHP實現(xiàn)簡單的聊天室應(yīng)用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

介紹

聊天應(yīng)用程序在網(wǎng)上非常常見。開發(fā)人員在構(gòu)建這類應(yīng)用程序時的選擇也很多。這篇文章介紹了如何實現(xiàn)基于PHP-AJAX的聊天應(yīng)用程序,并且不需要刷新頁面就可以發(fā)送和接收消息。

核心邏輯

在定義應(yīng)用程序的核心功能之前,先來看一看聊天應(yīng)用程序的基本外觀,如以下截圖所示:

怎么用PHP實現(xiàn)簡單的聊天室應(yīng)用

通過聊天窗口底部的輸入框輸入聊天文本。點擊Send按鈕,就開始執(zhí)行函數(shù)set_chat_msg。這是一個基于Ajax的函數(shù),因此無需刷新頁面就可以將聊天文本發(fā)送到服務(wù)器。程序在服務(wù)器中執(zhí)行chat_send_ajax.php以及用戶名和聊天文本。

// // Set Chat Message //  function set_chat_msg() {     if(typeof XMLHttpRequest != "undefined")     {         oxmlHttpSend = new XMLHttpRequest();     }     else if (window.ActiveXObject)     {        oxmlHttpSend = new ActiveXObject("Microsoft.XMLHttp");     }     if(oxmlHttpSend == null)     {        alert("Browser does not support XML Http Request");        return;     }      var url = "chat_send_ajax.php";     var strname="noname";     var strmsg="";     if (document.getElementById("txtname") != null)     {         strname = document.getElementById("txtname").value;         document.getElementById("txtname").readOnly=true;     }     if (document.getElementById("txtmsg") != null)     {         strmsg = document.getElementById("txtmsg").value;         document.getElementById("txtmsg").value = "";     }      url += "?name=" + strname + "&msg=" + strmsg;     oxmlHttpSend.open("GET",url,true);     oxmlHttpSend.send(null); }

PHP模塊從Query String(查詢字符串)中接收表單數(shù)據(jù),更新到命名為chat的數(shù)據(jù)庫表中。chat數(shù)據(jù)庫表有命名為ID、USERNAME、CHATDATEMSG的列。ID字段是自動遞增字段,所以這個ID字段的賦值將自動遞增。當(dāng)前的日期和時間,會更新到CHATDATE列。

require_once('dbconnect.php');  db_connect();  $msg = $_GET["msg"]; $dt = date("Y-m-d H:i:s"); $user = $_GET["name"];  $sql="INSERT INTO chat(USERNAME,CHATDATE,MSG) " .       "values(" . quote($user) . "," .       quote($dt) . "," . quote($msg) . ");";        echo $sql;  $result = mysql_query($sql); if(!$result) {     throw new Exception('Query failed: ' . mysql_error());     exit(); }

為了接收來自數(shù)據(jù)庫表中所有用戶的聊天消息,timer函數(shù)被設(shè)置為循環(huán)5秒調(diào)用以下的JavaScript命令,即每隔5秒時間執(zhí)行g(shù)et_chat_msg函數(shù)。

var t = setInterval(function(){get_chat_msg()},5000);

get_chat_msg是一個基于Ajax的函數(shù)。它執(zhí)行chat_recv_ajax.php程序以獲得來自于數(shù)據(jù)庫表的聊天信息。在 onreadystatechange屬性中,另一個JavaScript  函數(shù)get_chat_msg_result被連接起來。在返回來自于數(shù)據(jù)庫表中的聊天消息的同時,程序控制進(jìn)入到 get_chat_msg_result函數(shù)。

// // General Ajax Call //  var oxmlHttp; var oxmlHttpSend;  function get_chat_msg() {     if(typeof XMLHttpRequest != "undefined")     {         oxmlHttp = new XMLHttpRequest();     }     else if (window.ActiveXObject)     {        oxmlHttp = new ActiveXObject("Microsoft.XMLHttp");     }     if(oxmlHttp == null)     {         alert("Browser does not support XML Http Request");        return;     }      oxmlHttp.onreadystatechange = get_chat_msg_result;     oxmlHttp.open("GET","chat_recv_ajax.php",true);     oxmlHttp.send(null); }

在chat_recv_ajax.php程序中,來自于用戶的聊天消息會通過SQL select命令進(jìn)行收集。為了限制行數(shù),在SQL查詢中還給出了限制子句(limit 200),即要求聊天數(shù)據(jù)庫表中的***200行。所獲得的消息再返回給Ajax函數(shù),用于在聊天窗口中顯示內(nèi)容。

require_once('dbconnect.php');  db_connect();  $sql = "SELECT *, date_format(chatdate,'%d-%m-%Y %r') as cdt from chat order by ID desc limit 200"; $sql = "SELECT * FROM (" . $sql . ") as ch order by ID"; $result = mysql_query($sql) or die('Query failed: ' . mysql_error());  // Update Row Information $msg=""; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {    $msg = $msg . "" .         "" .         ""; } $msg=$msg . "<table style="color: blue; font-family: verdana, arial; " .   "font-size: 10pt;" border="0">   <tbody><tr><td>" . $line["cdt"] .   " </td><td>" . $line["username"] .   ": </td><td>" . $line["msg"] .   "</td></tr></tbody></table>";  echo $msg;  數(shù)據(jù)準(zhǔn)備就緒的同時,JavaScript函數(shù)會收集來自于PHP接收到的數(shù)據(jù)。這些數(shù)據(jù)將被安排置于DIV標(biāo)簽內(nèi)。oxmlHttp.responseText會保留從PHP程序接收到的聊天消息,并復(fù)制到DIV標(biāo)簽的document.getElementById(“DIV_CHAT”).innerHTML屬性。  function get_chat_msg_result(t) {     if(oxmlHttp.readyState==4 || oxmlHttp.readyState=="complete")     {         if (document.getElementById("DIV_CHAT") != null)         {             document.getElementById("DIV_CHAT").innerHTML =  oxmlHttp.responseText;             oxmlHttp = null;         }         var scrollDiv = document.getElementById("DIV_CHAT");         scrollDiv.scrollTop = scrollDiv.scrollHeight;     } }

下面的SQL CREATE TABLE命令可用于創(chuàng)建名為chat的數(shù)據(jù)庫表。所有由用戶輸入的信息都會進(jìn)入到數(shù)據(jù)庫表中。

create table chat( id bigint AUTO_INCREMENT,username varchar(20),
chatdate datetime,msg varchar(500), primary key(id));

“怎么用PHP實現(xiàn)簡單的聊天室應(yīng)用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI