ホームページ バックエンド開発 PHPチュートリアル php实现简易聊天室应用代码_PHP

php实现简易聊天室应用代码_PHP

May 29, 2016 am 11:48 AM
PHPチャットルーム

核心逻辑

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

通过聊天窗口底部的输入框输入聊天文本。点击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 . "<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; 
 
数据准备就绪的同时,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聊天应用程序,创建该应用程序的逻辑也非常简单,即使是初学者理解起来也不会有任何困难,希望这篇文章对大家的学习有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles