Ajax PHP JavaScript MySQL は、更新不要のシンプルなオンライン チャット ルームを実装します。
この記事では主に、シンプルな更新不要のオンライン チャット ルームを実装するための Ajax PHP JavaScript MySQL を紹介します。興味のある方は参考にしてください。
過去 2 日間で学んだ Ajax 関連の知識をより良く活用するために。知識をもとに、簡単なオンラインチャットルームを作りました。
アイデア
チャット ルームを実装するには、基本的に Ajax 経由でデータを渡し、PHP にデータ入力と検索を実装させ、それをフロントエンド JavaScript に渡してページを更新します。インスタントチャットの機能を実現します。
メッセージ表示領域
メッセージ表示領域は、Ajaxを使用してサーバー側の情報を取得した後、JavaScriptを使用してページを更新します。
<h3 id="消息显示区">消息显示区</h3> <p id="up"> </p> <hr />
メッセージを送信
メッセージモジュールは、端的に言えば、データをサーバーに挿入するプロセスであり、これも比較的単純です。
<h3 id="发言栏">发言栏</h3> <p id="bottom"> <form action="./chatroom_insert.php"> <p id="chat_up"> <span>颜色</span> <input type="color" name="color"/> <span>表情</span> <select name="biaoqing"> <option value="微笑地">微笑地</option> <option value="猥琐地">猥琐地</option> <option value="和蔼地">和蔼地</option> <option value="目不转睛地">目不转睛地</option> <option value="傻傻地">傻傻地</option> </select> <span>聊天对象</span> <select name="receiver"> <option value="">所有的人</option> <option value="老郭">老郭</option> <option value="小郭">小郭</option> <option value="大郭">大郭</option> </select> </p> <p id="chat_bottom"> <textarea id="msg" name="msg" style="width:380px;height:auto;"></textarea> <input type="button" value="发言" onclick="send()" /> 发言:<span id="result"></span> </p> </form> </p>
セクション
コードの使用を開始して、関連するビジネス ロジックを実装します。
メッセージ表示
私たちの考え方は、クライアントが時々サーバーにリクエストを送信し、最新のデータを取得するためにポーリングするというものです。
<script> function showmessage(){ var ajax = new XMLHttpRequest(); // 从服务器获取并处理数据 ajax.onreadystatechange = function(){ if(ajax.readyState==4) { //alert(ajax.responseText); // 将获取到的字符串转换成实体 eval('var data = '+ajax.responseText); // 遍历data数组,把内部的信息一个个的显示到页面上 var s = ""; for(var i = 0 ; i < data.length;i++){ data[i]; s += "("+data[i].add_time+") >>>"; s += "<p style='color:"+data[i].color+";'>"; s += data[i].sender +" 对 " + data[i].receiver +" "+ data[i].biaoqing+"说:" + data[i].msg; s += "</p>"; } // 开始向页面时追加信息 var showmessage = document.getElementById("up"); showmessage.innerHTML += s; } } ajax.open('get','./chatroom.php'); ajax.send(null); } // 更新信息的执行时机 window.onload = function(){ //showmessage(); // 制作轮询,实现自动的页面更新 setInterval("showmessage()",3000); } </script>
より重要なことは、setInterval 関数を使用してリクエスト イベントの間隔トリガーを実現することです。
メッセージ送信
メッセージ送信に関しては、フォームを通じてサーバーに送信するだけです。ここでは Html5 の最新テクノロジである FormData を使用します。一般的に、現在主流の最新ブラウザはこのテクノロジをサポートしています。 FormData を使用すると、フォームのデータを簡単に取得できます。
注: FormData はキーと値のペアの形式でフォーム データを収集するため、対応するフォーム項目には name 属性が必要です。そうでない場合、フォームは項目のデータ値を収集できません。
<script> function send(){ // 向服务器差入相关的数据 var form = document.getElementsByTagName('form')[0]; var formdata = new FormData(form); var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState==4) { //alert(xhr.resposneText); document.getElementById("result").innerHTML = xhr.responseText; setTimeout("hideresult()",2000); } } xhr.open('post','./chatroom_insert.php'); xhr.send(formdata); document.getElementById("msg").value=""; //return false; } // 2秒后实现提示信息的消失 function hideresult(){ document.getElementById('result').innerHTML = ""; } </script>
熟考する価値があるのは、setTimeout 関数によって実装される関数です。サーバーからフィードバック情報を取得した後、ユーザーに優れたエクスペリエンスを提供するために、送信ボタンの背後で情報が更新されます。
最適化
これが完了すると、基本的にチャットを実装できるようになります。しかし、主に以下の点により、得られる効果は非常に悪いものになります。
•スクロール表示がないため、最新ニュースを毎回手動で確認する必要があります。
•取得したデータには重複データが多く含まれているため、通信量が無駄になり、情報の閲覧が不便になります。
非繰り返しデータの表示
繰り返しデータの表示では、where文を使っていないためですが、毎回全データを取得しているように見えます。考えてみてください。最新のデータを取得するにはどうすればよいでしょうか?
そしてさまざまなクライアントに配慮する必要があります。
ハリウッド原則: 私のところに来ないでください、私があなたのところに行きます
これは多くのソフトウェア開発概念の現れでもあり、顧客がデータを打ち負かすのではなく、どのデータを取得するかを決定できるようにします。サーバーを棒で殺します。したがって、データリクエストを送信する際にクライアントを最適化する必要があります。
<script> // 记录当前获取到的id的最大值,防止获取到重复的信息 var maxId = 0; function showmessage(){ var ajax = new XMLHttpRequest(); // 从服务器获取并处理数据 ajax.onreadystatechange = function(){ if(ajax.readyState==4) { //alert(ajax.responseText); // 将获取到的字符串转换成实体 eval('var data = '+ajax.responseText); // 遍历data数组,把内部的信息一个个的显示到页面上 var s = ""; for(var i = 0 ; i < data.length;i++){ data[i]; s += "("+data[i].add_time+") >>>"; s += "<p style='color:"+data[i].color+";'>"; s += data[i].sender +" 对 " + data[i].receiver +" "+ data[i].biaoqing+"说:" + data[i].msg; s += "</p>"; // 把已经获得的最大的记录id更新 maxId = data[i].id; } // 开始向页面时追加信息 var showmessage = document.getElementById("up"); showmessage.innerHTML += s; //showmessage.scrollTop 可以实现p底部最先展示 // pnode.scrollHeight而已获得p的高度包括滚动条的高度 showmessage.scrollTop = showmessage.scrollHeight-showmessage.style.height; } } ajax.open('get','./chatroom.php?maxId='+maxId); ajax.send(null); } // 更新信息的执行时机 window.onload = function(){ //showmessage(); // 制作轮询,实现自动的页面更新 setInterval("showmessage()",3000); } </script>
表示の最適化
表示インターフェースの最適化は、データを送信した後に最新のメッセージを手動で確認しなければならないことを容認できる人はいません。したがって、表示領域の p を設定する必要があります。
スクロールバーを追加
<style> #up { height:320px; width:100%; overflow:auto; } </style>
毎回最新ニュースを表示
端的に言うと、一番下のpが常に最初に表示されます。
//showmessage.scrollTop 可以实现p底部最先展示 // pnode.scrollHeight而已获得p的高度包括滚动条的高度 showmessage.scrollTop = showmessage.scrollHeight-showmessage.style.height;
完全なコード
フロントエンドコード
Ajax 聊天室 <script> // 记录当前获取到的id的最大值,防止获取到重复的信息 var maxId = 0; function showmessage(){ var ajax = new XMLHttpRequest(); // 从服务器获取并处理数据 ajax.onreadystatechange = function(){ if(ajax.readyState==4) { //alert(ajax.responseText); // 将获取到的字符串转换成实体 eval('var data = '+ajax.responseText); // 遍历data数组,把内部的信息一个个的显示到页面上 var s = ""; for(var i = 0 ; i < data.length;i++){ data[i]; s += "("+data[i].add_time+") >>>"; s += "<p style='color:"+data[i].color+";'>"; s += data[i].sender +" 对 " + data[i].receiver +" "+ data[i].biaoqing+"说:" + data[i].msg; s += "</p>"; // 把已经获得的最大的记录id更新 maxId = data[i].id; } // 开始向页面时追加信息 var showmessage = document.getElementById("up"); showmessage.innerHTML += s; //showmessage.scrollTop 可以实现p底部最先展示 // pnode.scrollHeight而已获得p的高度包括滚动条的高度 showmessage.scrollTop = showmessage.scrollHeight-showmessage.style.height; } } ajax.open('get','./chatroom.php?maxId='+maxId); ajax.send(null); } // 更新信息的执行时机 window.onload = function(){ //showmessage(); // 制作轮询,实现自动的页面更新 setInterval("showmessage()",3000); } </script>
消息显示区
发言栏
データベーステーブル構造
mysql> desc message; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(100) | NO | PRI | NULL | auto_increment | | msg | varchar(255) | NO | | NULL | | | sender | varchar(30) | NO | | NULL | | | receiver | varchar(30) | NO | | NULL | | | color | varchar(10) | YES | | NULL | | | biaoqing | varchar(10) | YES | | NULL | | | add_time | datetime | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
サーバーサイドコード
<?php // 获得最新的聊天信息 $conn = mysql_connect('localhost','root','mysql'); mysql_select_db('test'); mysql_query('set names utf8'); $maxId = $_GET['maxId']; // 防止获取重复数据,本次请求的记录结果id要大鱼上次获得的id $sql = "select * from message where id >"."'$maxId'"; $qry = mysql_query($sql); $info = array(); while($rst = mysql_fetch_assoc($qry)){ $info[] = $rst; } // 通过json格式给客户端提供数据 echo json_encode($info); ?>
概要と展望
概要
完了 小さな例は以上です。復習すると、今日の利点は次のとおりです。
• setInterval 関数を使用して、ポーリングしてデータを取得する方法
• setTimeout 関数を使用して、プロンプト データがタイムリーに消失する
• 最新のデータを取得する方法: maxId パラメータはクライアントの制御下で送信されます。
•表示を最適化する方法: オーバーフローはスクロール効果を実装し、pnode.scrollTop は表示の下部効果を制御します
Outlook
•おそらく、クライアントの送信者が固定されていないことがわかります。ユーザーログイン。ユーザーがログインすると、送信者をセッションから動的に取得できます。これは、人々の主観的な感情とより一致する可能性もあります。
•インターフェースの作りが悪く、美化効果がありません。 Bootstrap を追加した後の効果は大きいはずです。
•携帯電話の適応効果が悪く、Windows Phoneではカラーコントロールが正常に表示されません。
関連する推奨事項:
チャット ルームのサンプル コードの php+webSoket 実装 (ソース コードが添付されています)
Python+Slack APIを使用してチャットボットを実装する方法の詳細な例
以上がAjax PHP JavaScript MySQL は、更新不要のシンプルなオンライン チャット ルームを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









