PHP+mysql+ajax轻量级聊天室实现方法详解


Posted in PHP onOctober 17, 2016

本文实例讲述了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

<?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

<?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

<?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.聊天室页面:

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>聊天页面</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='无敌战神';
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='爱你不是两三天';
}
</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聊天交友网站</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="发送" 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>

效果图如下:

PHP+mysql+ajax轻量级聊天室实现方法详解

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

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
PHP中的Session对象如何使用
Sep 25 PHP
Yii中表单用法实例详解
Jan 05 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
Yii2框架中一些折磨人的坑
Dec 15 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 #PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 #PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 #PHP
php排序算法实例分析
Oct 17 #PHP
基于thinkPHP框架实现留言板的方法
Oct 17 #PHP
php并发加锁示例
Oct 17 #PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 #PHP
You might like
php更新修改excel中的内容实例代码
2014/02/26 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
Python入门篇之正则表达式
2014/10/20 Python
matplotlib绘制动画代码示例
2018/01/02 Python
Python requests库用法实例详解
2018/08/14 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
零基础学python应该从哪里入手
2020/08/11 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
建筑院校毕业生求职信
2014/06/13 职场文书
工程款申请报告
2015/05/15 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
Python标准库之typing的用法(类型标注)
2021/06/02 Python
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript