php即时聊天数据库设计入门经典教程_PHP+mysql+ajax轻量级聊天室实现方法详解

本文实例讲述了PHP+mysql+ajax轻量级聊天室实现方法。分享给大家供大家参考,具体如下:

做了一个QQ聊天交友网站,想加个聊天的功能,于是做完用PHP做了简单又强大的聊天室

1. 创建mysql数据库表:

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

2.编写建议连接数据库函数:

dbconnect.php

function db_connect()

{

date_default_timezone_set("Asia/Shanghai");

$link = mysql_connect("xxx.xxx.xxx.xxx", "databasename", "password")

or die('无法连接: ' . mysql_error());

mysql_select_db("databasename") or die('没有你找到指定数据库');

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发送和接收函数:

ajax发送函数chat_send_ajax.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接收函数chat_recv_ajax.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="

while ($line = mysql_fetch_array($result, MYSQL_ASSOC))

{

$msg = $msg . "

" . $line["cdt"] . " " .

"

" . $line["username"] . ": " .

"

" . $line["msg"] . "";

}

$msg=$msg . "

";

echo $msg;

?>

4.聊天室页面:

chat.html

/p>

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

聊天页面

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='无敌战神';

if(i==1)document.getElementById('txtname').value='令狐冲';

if(i==2)document.getElementById('txtname').value='西门吹雪';

if(i==3)document.getElementById('txtname').value='超级玛丽';

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万了';

if(i==9)document.getElementById('txtname').value='神级奇葩';

if(i==10)document.getElementById('txtname').value='爱你不是两三天';

}

聊天窗口--全球最大QQ聊天交友网站

名字:

效果图如下:

希望本文所述对大家PHP程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值