PHP+mysql+ajax輕量級(jí)聊天室實(shí)現(xiàn)方法詳解
本文實(shí)例講述了PHP+mysql+ajax輕量級(jí)聊天室實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
做了一個(gè)QQ聊天交友網(wǎng)站,想加個(gè)聊天的功能,于是做完用PHP做了簡(jiǎn)單又強(qiáng)大的聊天室
1. 創(chuàng)建mysql數(shù)據(jù)庫(kù)表:
2.編寫建議連接數(shù)據(jù)庫(kù)函數(shù):
dbconnect.php
<?php function db_connect() { date_default_timezone_set("Asia/Shanghai"); $link = mysql_connect("xxx.xxx.xxx.xxx", "databasename", "password") or die('無(wú)法連接: ' . mysql_error()); mysql_select_db("databasename") or die('沒(méi)有你找到指定數(shù)據(jù)庫(kù)'); return true; } function quote($strText) { $Mstr = addslashes($strText); return "'" . $Mstr . "'"; } function isdate($d) { $ret = true; try { $x = date("d",$d); } catch (Exception $e) { $ret = false; } echo $x; return $ret; } ?>
3. 編寫ajax發(fā)送和接收函數(shù):
ajax發(fā)送函數(shù)chat_send_ajax.php
<?php require_once('dbconnect.php'); db_connect(); $msg = iconv("UTF-8","GB2312",$_GET["msg"]); $dt = date("Y-m-d H:i:s"); $user = iconv("UTF-8","GB2312",$_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(); } ?>
ajax接收函數(shù)chat_recv_ajax.php
<?php header("Content-Type:text/html;charset=gb2312"); header("Expires: Thu, 01 Jan 1970 00:00:01 GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); require_once('dbconnect.php'); db_connect(); $sql = "SELECT *, date_format(chatdate,'%Y年%m月%d日 %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="<table border='0' style='font-size: 10pt; color: white; font-family: verdana, arial;'>"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $msg = $msg . "<tr><td>" . $line["cdt"] . " </td>" . "<td>" . $line["username"] . ": </td>" . "<td>" . $line["msg"] . "</td></tr>"; } $msg=$msg . "</table>"; echo $msg; ?>
4.聊天室頁(yè)面:
chat.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>聊天頁(yè)面</title> <script type="text/javascript"> var t = setInterval(function(){get_chat_msg()},5000); // // 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("瀏覽器不支持XML Http Request!"); return; } oxmlHttp.onreadystatechange = get_chat_msg_result; oxmlHttp.open("GET",encodeURI("chat_recv_ajax.php"),true); oxmlHttp.send(null); } function get_chat_msg_result() { 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; } } function set_chat_msg() { if(typeof XMLHttpRequest != "undefined") { oxmlHttpSend = new XMLHttpRequest(); } else if (window.ActiveXObject) { oxmlHttpSend = new ActiveXObject("Microsoft.XMLHttp"); } if(oxmlHttpSend == null) { alert("瀏覽器不支持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",encodeURI(url),true); oxmlHttpSend.send(null); } function clickBtn(e) { if(window.event.keyCode==13) { var id=e.id; switch(id) { case "txtmsg": document.getElementById("Submit2").click(); window.event.returnValue=false; break; } } } function fRandomBy(under, over){ switch(arguments.length){ case 1: return parseInt(Math.random()*under+1); case 2: return parseInt(Math.random()*(over-under+1) + under); default: return 0; } } function SetTxtName(){ var i=fRandomBy(10); if(i==0)document.getElementById('txtname').value='無(wú)敵戰(zhàn)神'; if(i==1)document.getElementById('txtname').value='令狐沖'; if(i==2)document.getElementById('txtname').value='西門吹雪'; if(i==3)document.getElementById('txtname').value='超級(jí)瑪麗'; if(i==4)document.getElementById('txtname').value='奧巴馬'; if(i==5)document.getElementById('txtname').value='恐怖分子'; if(i==6)document.getElementById('txtname').value='聊齋奇女子'; if(i==7)document.getElementById('txtname').value='天朝?潘?; if(i==8)document.getElementById('txtname').value='中500萬(wàn)了'; if(i==9)document.getElementById('txtname').value='神級(jí)奇葩'; if(i==10)document.getElementById('txtname').value='愛(ài)你不是兩三天'; } </script> </head> <body onload="SetTxtName();"> <div style="border-right: black thin solid; border-top: black thin solid; border-left: black thin solid; border-bottom: black thin solid; background:#fff url('http://www.ihaonet.com/chat/blue.jpg') repeat-x left top; height: 450px;width: 500px; "> <table style="width:100%; height:100%"> <tr> <td colspan="2" style="font-weight: bold; font-size: 16pt; color: white; font-family: verdana, arial; text-align: center"> 聊天窗口--全球最大QQ聊天交友網(wǎng)站</td> </tr> <tr> <td colspan="2" style="font-weight: bold; font-size: 16pt; color: white; font-family: verdana, arial; text-align: left"> <table style="font-size: 12pt; color: white; font-family: Verdana, Arial;border: white thin solid; "> <tr> <td style="width: 100px"> 名字:</td> <td style="width: 100px"><input id="txtname" style="width: 150px" type="text" name="name" maxlength="15" value="匿名" /></td> </tr> </table> </td> </tr> <tr> <td style="vertical-align: middle;" valign="middle" colspan="2"> <div style="width: 480px; height: 300px; border-right: white thin solid; border-top: white thin solid; font-size: 10pt; border-left: white thin solid; border-bottom: white thin solid; font-family: verdana, arial; overflow:scroll; text-align: left;" id="DIV_CHAT"> </div> </td> </tr> <tr> <td style="width: 310px"> <input id="txtmsg" style="width: 350px" type="text" name="msg" onkeydown="return clickBtn(this)"/></td> <td style="width: 85px"> <input id="Submit2" style="font-family: verdana, arial" type="button" value="發(fā)送" onclick="set_chat_msg()"/></td> </tr> <tr> <td colspan="1" style="font-family: verdana, arial; text-align: center; width: 350px;"> </td> <td colspan="1" style="width: 85px; font-family: verdana, arial; text-align: center"> </td> </tr> </table> </div> </body> </html>
效果圖如下:
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP+MySQL留言板開發(fā)專題》、《PHP+ajax技巧與應(yīng)用小結(jié)》、《php文件操作總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php基于websocket搭建簡(jiǎn)易聊天室實(shí)踐
- 基于Swoole實(shí)現(xiàn)PHP與websocket聊天室
- php+html5基于websocket實(shí)現(xiàn)聊天室的方法
- php socket實(shí)現(xiàn)的聊天室代碼分享
- PHP實(shí)現(xiàn)簡(jiǎn)單聊天室(附源碼)
- 簡(jiǎn)單的php+mysql聊天室實(shí)現(xiàn)方法(附源碼)
- 用PHP+MySQL搭建聊天室功能實(shí)例代碼
- php+webSoket實(shí)現(xiàn)聊天室示例代碼(附源碼)
- 基于PHP+MySQL的聊天室設(shè)計(jì)
- php+websocket 實(shí)現(xiàn)的聊天室功能詳解
相關(guān)文章
淺談php中fopen不能創(chuàng)建中文文件名文件的問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談php中fopen不能創(chuàng)建中文文件名文件的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02JavaScript實(shí)現(xiàn)滾動(dòng)欄效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)滾動(dòng)欄效果的方法,涉及javascript操作html元素實(shí)現(xiàn)滾動(dòng)的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04php實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查
本文給大家介紹的是PHP連接數(shù)據(jù)庫(kù)以及實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查功能的方法及示例代碼,希望對(duì)大家學(xué)習(xí)php能夠有所幫助2017-02-02淺析php-fpm靜態(tài)和動(dòng)態(tài)執(zhí)行方式的比較
這篇文章主要介紹了php-fpm靜態(tài)和動(dòng)態(tài)執(zhí)行方式的比較,較為詳細(xì)的分析了php-fpm靜態(tài)和動(dòng)態(tài)執(zhí)行方式的原理、參數(shù)功能與相關(guān)使用技巧,需要的朋友可以參考下2016-11-11Uncaught exception com_exception with message Failed to crea
Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `InternetExplorer.Application': 拒絕訪問(wèn)2012-01-01在同一窗體中使用PHP來(lái)處理多個(gè)提交任務(wù)
在PHP中的處理窗體數(shù)據(jù)比其它網(wǎng)頁(yè)程序語(yǔ)言更簡(jiǎn)單——如果你使用這種語(yǔ)言一段時(shí)間后,你會(huì)發(fā)現(xiàn)這是一個(gè)不可爭(zhēng)辯的事實(shí)。這種操作的簡(jiǎn)易性使它可以容易地處理更為復(fù)雜的窗體事件,包括今天討論的主題,即在同一個(gè)窗體中通過(guò)多個(gè)按鈕來(lái)處理不同的任務(wù)。2008-05-05