您的位置:首页 > 编程语言 > PHP开发

php在线非注册聊天系统的开发-初

2015-03-25 22:14 411 查看
杨老板的勿忘初衷页面开了(http://www.shenmegui.wang),看到杨老板的页面中GoChat部分没有做,那么就由我这种廉价劳动力来解决吧:

首先来数据表的建立:



然后在配置文件config.php中写入全局变量,为了可移植性, 移植时只需改变此php内容:


那么我就可以方便地写发送新消息的say.php了:


当然这里存在严重的SQL注入漏洞,我会在中篇或者下篇处理掉,这个文件接收POST过来的参数,然后将它插入数据库。

那么就到另一个重要页面了,list.php,提供消息列表的显示,这里,我为了前端开发的便利,采用了类似printf的格式控制字符串,两个list函数对输入的格式控制字符串进行处理,仅替换其中的%username% %time% %text%,例如前端开发者可以传入他们想要的标签,用漂亮的css定义过的类来实现聊天气泡等等,当然还可以加入各种表情符号,者得定义一些转义字符,然后前端用JavaScript处理用img显示出来即可。本文件中,listbynum是通过条目来列举,listbylast是通过与今天相隔几天来获取消息,方便前端人员使用。

<?php

//list.php

/*

chat_list Function Params

from:The Index To List From

num:The Max Num To List

format:The Format Contorl String

line:Returned String Between Lines

*/

require_once 'config.php';

function chat_listbynum($from,$num,$format)

{

global $mysql_address,$mysql_username,$mysql_password,$mysql_database;

$mysqli=new mysqli($mysql_address,$mysql_username,$mysql_password,$mysql_database);

/* check connection */

if (mysqli_connect_errno()) {

printf("Connect failed: %s\n", mysqli_connect_error());

exit();

}

$result=$mysqli->query("SELECT * FROM msg LIMIT $from,$num");

if(!$result)die('List Error!');

$mysqli->close();

$row=$result->fetch_array(MYSQLI_ASSOC);

while($row){

$t=$format;

$t=str_replace('%username%',$row['uname'],$t);

$t=str_replace('%text%',$row['text'],$t);

$t=str_replace('%time%',$row['time'],$t);

echo $t;

$row = $result->fetch_array(MYSQLI_ASSOC);

}

}

function chat_listbylast($days,$format)

{

global $mysql_address,$mysql_username,$mysql_password,$mysql_database;

$mysqli=new mysqli($mysql_address,$mysql_username,$mysql_password,$mysql_database);

/* check connection */

if (mysqli_connect_errno()) {

printf("Connect failed: %s\n", mysqli_connect_error());

exit();

}

$now=date('Y-m-d H:i:s');

$result=$mysqli->query("SELECT * FROM msg WHERE DateDiff(time,'$now')=$days");

if(!$result)die('List Error!');

$mysqli->close();

$row=$result->fetch_array(MYSQLI_ASSOC);

while($row){

$t=$format;

$t=str_replace('%username%',$row['uname'],$t);

$t=str_replace('%text%',$row['text'],$t);

$t=str_replace('%time%',$row['time'],$t);

echo $t;

$row = $result->fetch_array(MYSQLI_ASSOC);

}

}

?>

那么既然消息有时效性,太久远的,过时的消息堆积在服务器中,不仅占用空间,还影响速度,clear.php中有clear函数,用于清除超过n天的消息:



当然这个项目还不够完善,需要修补一些漏洞,而且需要提供更多支持,例如好友系统,头像系统等等,我会在后续篇目更新这些内容,敬请期待!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: