PHP+mysql+ajax简单实现低负载多人聊天室

作者: pengpeng 分类: 所有文章 发布时间: 2017-10-29 16:32

对于PHP聊天室一直很好奇,今天自己也写一个简单的php+mysql聊天室ajax主要是用于定时请求数据用的。由于代码简陋,并且定时访问数据库请求数据,mysql负载非常大,只是写着玩玩,并不能拿出来用。也没有敢把源码上传到空间里,免费空间也懒得没有去搞他。本来在写之前打算一起写个人中心有个人资料,和好友私聊功能的。但是由于懒嘛,就没写,之写了这个公众聊天室。也没有什么特色功能。下面贴图贴代码,有兴趣的朋友可以玩一下。

不好意思各位,今天下班回去翻了一下数据库,没有了,好像是上次重装系统弄掉了,没有数据库文件,抱歉
登录界面:
登录界面
首页聊天界面:
首页聊天界面
主要文件:

index.php   //聊天界面
login.php   //登录界面
class.chat.php    //类
config.db.php    //存放数据库信息
goout.php    //登出界面
publicContent.php  //ajax访问的数据信息文件
style.css   //美化样式表

开始代码:
index.php

<?php
session_start();
if(!isset($_SESSION['chatname'])){
echo "<script>location.href='login.php'</script>";
die();
}
require_once 'config/class.chat.php';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>公众聊天室</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<link rel="icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" />
</head>
<body>
<div class="public_chat_box">
<div class="public_chat_nav">
<ul>
<li><img src="img/logo.png"></li>
<li><a href='javascript:volid(0)'>个人中心</a></li>
<li><a href='javascript:volid(0)'>好友面板</a></li>
<li><a href='goout.php'>退出登录</a></li>
</ul>
</div>
<div class="public_chat_show">
<?php
include 'publicContent.php';
?>
</div>
<div class="public_chat_say">
<form action="" method="post">
<label>我要说:</label>
<input type="text" name="public_say" class="public_say_inp1">
<input type="submit" name="public_sub" value="发言" class="public_say_inp2">
</form>
</div>
</div>
<?php
if(isset($_POST['public_sub'])){
$saycontent = $_POST['public_say'];
$sayname = $_SESSION['chatname'];
$saytime = date("Y-m-d H:i:s");
$insert = new con();
$insert_sql = "insert into public(sayname,saycontent,saytime)values('{$sayname}','{$saycontent}','{$saytime}')";
$insert_qurey = $insert->query($insert_sql);
if(!$insert_qurey){
echo "<script>alert('发言失败')</script>";
}else {
echo "<script>getnr()</script>";
}
}
?>
<script type="text/javascript">
$(function(){
function getnr(){
$.ajax({
url:'publicContent.php',
async:'true',
cache:'false',
success:function(data){
$('.public_chat_show').html(data);
}
});
}
function IsPC() {
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"];
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
//定时获取数据
setInterval(getnr,1000);
if(!IsPC()){
//根据显示屏来设置对话框的高度
var lw = $(window).height();
$('.public_chat_show').css('height',lw*0.5);
}
//设置滚动栏一直在底部
$('.public_chat_show').scrollTop( $('.public_chat_show')[0].scrollHeight);
})
</script>
</body>
</html>

login.php

<?php
session_start();
if(isset($_SESSION['chatname'])){
echo "<script>location.href='index.php'</script>";
die();
}
require_once 'config/class.chat.php';
?>
<!DOCTYPE html>
<html>
<head>
<title>登录 - 聊天室</title>
<link href="style.css" rel="stylesheet" type="text/css">
<meta charset="utf-8">
<link rel="icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" />
</head>
<body>
<div class="login_box">
<div class="login_title">登录</div>
<div class="login_tip"></div>
<div class="login_form">
<form action="" method="post">
<label>起一个好听的名字吧:</label><br>
<input type="text" name="login_name" class="login_inp1">
<input type="submit" name="login_sub" value="确定" class="login_inp2"><br >
(提示:不能包含空格或者大于10个字符)
</form>
</div>
</div>
<?php
if(isset($_POST['login_sub'])){
$chatname = $_POST['login_name'];
$login_yz = new chat();
$login_results = $login_yz->yz_chatname($chatname);
if($login_results){
//可以使用  * 开始设置session  *  插入数据库
//准备数据
$time = date("Y-m-d");
$reg_user = new con();
$reg_user_sql = "insert into user(username,time)values('{$chatname}','{$time}')";
$reg_user_query = $reg_user->query($reg_user_sql);
if(!$reg_user_query){
die("未知错误!");
}
$sz_session = $_SESSION['chatname'] = $chatname;
if(!$sz_session){
die("未知错误");
}
echo "<script>location.href='index.php'</script>";
}else {
echo "<script>alert('可能此用户名已经被占用或者不符合规范哦!请重新输入')</script>";
}
}
?>
</body>
</html>

publicContent.php

<?php
require_once 'config/class.chat.php';
$out = new con();
$out_sql = "select * from public order by id asc limit 50";
$out_query = $out->query($out_sql);
echo "<ul>";
while($out_arr = mysql_fetch_assoc($out_query)){
echo "<li><b>{$out_arr['sayname']}</b>  <small>{$out_arr['saytime']}</small><br><span class='say_con'>{$out_arr['saycontent']}</span></li>";
}	
echo "</ul>";
?>

class.chat.php

<?php
/*
*类文件
*/
error_reporting(0);
//简单封装数据库类
class con{
private $sql_host;
private $sql_lname;
private $sql_lpass;
private $sql_dbname;
private $sql_charset;
public $connect;
public $select_db;
public $sql_arr;
public $query_sql;
public $query_results;
//连接数据库
public function __construct(){
//引入文件赋值给$this->sql_arr
$this->sql_arr = require 'config.db.php';
//判断是否引入成功
if(!$this->sql_arr){
die('获取数据库信息失败');
}
//引入成功后开始赋值
$this->sql_host = $this->sql_arr['sql_host'];
$this->sql_lname = $this->sql_arr['sql_lname'];
$this->sql_lpass = $this->sql_arr['sql_lpass'];
$this->sql_dbname = $this->sql_arr['sql_dbname'];
$this->sql_charset  = $this->sql_arr['sql_charset'];
$this->connect = mysql_connect($this->sql_host,$this->sql_lname,$this->sql_lpass);
if(!$this->connect){
die('数据库连接失败');
} 
$this->select_db = mysql_select_db($this->sql_dbname);
if(!$this->select_db){
die('数据库选择失败');
}
mysql_query("set names {$this->sql_charset}");
}
//简单操作类
public function query($query_sql){
$this->query_sql = $query_sql;
if(empty($this->query_sql)){
die('没有传入值');
}
$this->query_results = mysql_query($this->query_sql);
if(!$this->query_results){
die('执行失败');
}
return $this->query_results;
}
public function __destruct(){
if($this->connect){
mysql_close($this->connect);
}
}
}
//开始聊天室操作类
class chat{
public $chatname;
public $yz_chatname;
//验证session用户名是否存在
public function yz_chatname($chatname){
$this->chatname = $chatname;
if(empty($this->chatname)){
return false;
}
if(strlen($this->chatname) > 30){
return false;
}
if(preg_match("/\s/", $this->chatname)){
return false;
}
$sql_jc = new con();
$sql_sql = "select * from user where username = '{$this->chatname}'";
$sql_result = $sql_jc->query($sql_sql);
if(mysql_num_rows($sql_result) >= 1){
return false;
}else {
return true;
}
}
//取出公众发言记录
}
?>

config.db.php

<?php
//数据库配置文件
return array(
'sql_host'=>'localhost',
'sql_lname'=>'root',
'sql_lpass'=>'root',
'sql_dbname'=>'chat',
'sql_charset'=>'utf8'
);
?>

goout.php

<?php
session_start();
unset($_SESSION['chatname']);
echo "<script>location.href='login.php'</script>";
?>

文全部件压缩包下载:

  chat.zip (15.2 KB, 59 次)

本文由“帅阿猪”发布,最后修改时间2017年11月3日

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

13条评论
  • Wilfred

    2018年5月10日 上午1:13

    insert your data

  • Break

    2017年12月20日 下午11:27

    你好,下载地址打不开了,不能下载,能否私发一份mail:17599244@qq.com

    1. pengpeng

      2017年12月25日 下午3:54

      可以下载的哦!

      1. Leo

        2018年1月3日 下午10:48

        请问sql文件在哪里

  • 宁静致远

    2017年12月10日 下午7:50

    你好,下载了代码,没有SQL,请分享一下,谢谢

  • mdy

    2017年12月9日 上午11:05

    无法下载

  • 盐湖凉开水

    2017年11月16日 下午7:39

    能否给下sql

    1. pengpeng

      2017年11月20日 下午12:56

      才看到,不好意思。下班回去之后更新上去。

      1. 辣辣

        2017年12月2日 下午3:29

        能否有mysql+eclipse编写的有图形界面的多人聊天室?我已经做出了完成登陆验证,我现在做不出来聊天室聊天内容,和获得用户登陆这一部分??

        1. pengpeng

          2017年12月2日 下午3:56

          没有也(◍´꒳`◍)

          1. 辣辣

            2017年12月3日 下午9:53

            那如果我想要在聊天室界面获刚登陆的账号,该如何实现呢?求教???

          2. pengpeng

            2017年12月4日 上午9:29

            就是如果有人登录之后提示xxx已登录吗?写一个系统方法,用户登录之后调用此方法,给此方法一个值,可以是用户id,然后系统方法去搜索数据库此id的用户名,并聊天数据库内插入一条消息为xxx已经登录,配合PHP判断与css就可以实现

        2. 可乐不加冰

          2017年12月4日 下午10:53

          可以看看我的
          qun.shenchenglin.cn
          测试账号:lin747604
          密码:747604

发表评论

电子邮件地址不会被公开。 必填项已用*标注