核心逻辑

在定义应用程序的核心功能之前,先来看一看聊天应用程序的基本外观,如以下截图所示:

通过聊天窗口底部的输入框输入聊天文本。点击Send按钮,就开始执行函数set_chat_msg。这是一个基于Ajax的函数,因此无需刷新页面就可以将聊天文本发送到服务器。程序在服务器中执行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(查询字符串)中接收表单数据,更新到命名为chat的数据库表中。chat数据库表有命名为ID、USERNAME、CHATDATE和MSG的列。ID字段是自动递增字段,所以这个ID字段的赋值将自动递增。当前的日期和时间,会更新到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();

}

为了接收来自数据库表中所有用户的聊天消息,timer函数被设置为循环5秒调用以下的JavaScript命令,即每隔5秒时间执行get_chat_msg函数。

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

get_chat_msg是一个基于Ajax的函数。它执行chat_recv_ajax.php程序以获得来自于数据库表的聊天信息。在 onreadystatechange属性中,另一个JavaScript 函数get_chat_msg_result被连接起来。在返回来自于数据库表中的聊天消息的同时,程序控制进入到 get_chat_msg_result函数。

//

// 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命令进行收集。为了限制行数,在SQL查询中还给出了限制子句(limit 200),即要求聊天数据库表中的最后200行。所获得的消息再返回给Ajax函数,用于在聊天窗口中显示内容。

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 . "

"font-size: 10pt;" border="0">

" . $line["cdt"] .

"

" . $line["username"] .

":

" . $line["msg"] .

"

";

echo $msg;

数据准备就绪的同时,JavaScript函数会收集来自于PHP接收到的数据。这些数据将被安排置于DIV标签内。oxmlHttp.responseText会保留从PHP程序接收到的聊天消息,并复制到DIV标签的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命令可用于创建名为chat的数据库表。所有由用户输入的信息都会进入到数据库表中。

create table chat( id bigint AUTO_INCREMENT,username varchar(20),

chatdate datetime,msg varchar(500), primary key(id));

这段用于实现聊天应用程序的代码非常有意思,它可以改进成为一个完全成熟的HTTP聊天应用程序,创建该应用程序的逻辑也非常简单,即使是初学者理解起来也不会有任何困难,希望这篇文章对大家的学习有所帮助。

php 写聊天室源码,php实现简易聊天室应用代码相关推荐

  1. 一对一视频聊天app源码,归并排序模板

    一对一视频聊天app源码,归并排序模板实现的相关代码 #include<iostream> using namespace std; const int N=1e5+10; int a[N ...

  2. 使用 Redis 实现语音社交聊天室源码中的排行榜功能

    在语音社交聊天室源码中,排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择. 一般语音社交聊天室源码的排行榜都是有实效性的,比如"用户积分榜&quo ...

  3. 语音聊天室源码开发点赞功能,用 MySQL 还是 Redis ?

    为了提升用户在语音聊天室源码中的互动性,一般在开发动态广场功能时会支持用户间对动态进行点赞,所以点赞功能可以说是语音聊天室源码开发的基础性功能,今天我们就来聊聊点赞.评论.收藏等这些场景的db数据库设 ...

  4. YShout一款PHP+TXT+Ajax嵌入式在线聊天室源码

    简介: YShout是一款PHP+TXT+AJAX开发嵌入式在线聊天室源码,UTF-8编码. 可以非常方便的嵌入到的你的网站中,无需数据库,采用TXT存储数据,小巧灵活,移植方便.采用AJAX技术,增 ...

  5. 聊天室平台搭建【免费下载 无需积分/C币】java、Android、php多平台聊天室源码打包下载

    关键词:多款聊天平台源码合集免费下载 #聊天源码,#聊天工具,#源码下载,#仿QQ,#聊天室源码 聊天室平台搭建 搭建自己的聊天交流平台 [点击此处]下载源码 原网址:https://download ...

  6. 仿9158 VC++视频聊天室源码

    视频聊天室源码简介: 成熟产品可提供全套系统源代码(包服务端,客户端,网站平台) 采用C++语言开发系统速度快,稳定.H264视频编解码视频清晰,流畅,同时3路视频

  7. 高清视频会议 视频聊天室源码下载

    高清视频会议.视频聊天室源码简介: "SDK即时通讯平台"是一套跨平台的即时通讯解决方案,基于先进的H.264视频编码标准.AAC音频编码标准与P2P技术,支持高清视频,整合了佰锐 ...

  8. 语音聊天室源码中的变声,应用了哪些算法?

    导读:2021开年以来,语音聊天室源码伴随着Clubhouse的爆火再获资本的关注,国内相关产品都迎来了股价的大幅上涨,预计未来音频化在社交领域还会有长期且广泛的需求. 在移动互联网技术加持下,语音聊 ...

  9. Android聊天室源码开发,悬浮窗的实现及封装思路

    为了实现语音聊天室源码的多场景应用,悬浮小窗口在语音聊天室源码开发中还是比较常见的需求,主要是指用户在语音连麦过程中打开其它界面或者退到桌面时语音连麦不会中断且会有一个悬浮小窗口位于最上层,接下来我们 ...

最新文章

  1. tf.keras.losses.MeanSquaredLogarithmicError 损失函数 的用法
  2. Linux中iptraf命令详解(IP局域网监控工具)
  3. 初中参观机器人博物馆的作文_2021考研英语二大作文模板整理
  4. 荣品瑞星微RK3399-RP3399开发板
  5. scanf函数和cin的区别、类的数组、C++排序函数
  6. Php7 mongodb explain,【代码片-1】 php7 mongoDB 简单封装
  7. 设计模式学习笔记——观察者(Observer)模式
  8. 编程语言流行指数:Python 稳居宝座,Java 滑坡!
  9. redis课程视频 黄建宏_Redis从入门到精通 视频教程 下载
  10. linux cat命令查找文件内容
  11. 【PE】PE文件结构学习
  12. 学习linux杂七杂八——关于shell中的变量
  13. 关于反馈:误码与DTX
  14. 在tomcat集群下利用redis实现单点登陆
  15. luogu P2634 [国家集训队]聪聪可可 点分治
  16. 一天测血压的最佳时间_测量血压的最佳时间是几点?
  17. spring源码之supplier方法
  18. c语言狗脸字符画,小学一年级语文《十二生肖》教学教案
  19. pdf中的四色字 改为单黑
  20. 前端、程序员面试技巧——完美回答

热门文章

  1. eclipse中如何导入本地xsd文件
  2. 音响开关机POP声/爆破声最新解决消除方法(D类音频功放IC应用实例)
  3. linux svn web管理,CentOS 6.x 部署Subversion 集成 SvnAdmin Web管理界面
  4. 如何做好技术管理的思考
  5. 《怦然心动》经典记录
  6. DM7 常用动态性能视图及使用方法
  7. SSHelper: 在ubuntu 和安卓手机之间无线传输文件
  8. Java基础篇——三大特性(多态)
  9. 读后感《00后杀入职场:浅做一下,不行再说》
  10. 《代码整洁之道 clean code》学习笔记