A-A+

夏日简单的php+mysql聊天室V.01程序制作原理

2012年04月23日 PHP技术文章 暂无评论 阅读 438 views 次

本程序共有 8 个文件,而主页 index.php 文件是由 show.php(显示发言),login.php(用户登陆),speak.php(用户发言) 这三个文件通过框架页组成的,这样设计也符合聊天室的一个体验,先看一下 index.php 原框架源码:

<frameset rows="*,80" cols="*" framespacing="0" bordercolor="#E1D1AE">
<frameset rows="*" cols="*,284">
<frame src="show.php" name="mainFrame"/>
<frame src="login.php" name="rightFrame"/>
</frameset>
<frame src="speak.php" name="bottomFrame"/>
</frameset>
<noframes>

这就是一个普通的左右下的一个框架页源码,在用dw新建时就有提供这样的模板,就不详细介绍了。

除了显示发言(show.php),用户登陆(login.php),用户发言(speak.php)外,我们先看一下其它几个比较容易理解的文件。

config.php 是数据库配置文件,已经多次用到,只需要将 php 和 mysql 数据库连接起来即可,style.css 是聊天室的美化样式表,face/ 目录下是发言时要用到的几个表情,如果想换表情,直接在这里面进行换掉就可以了,chat.sql 是 mysql 数据库文件,在使用聊天室时一定要导入到 mysql 数据库中。

用户登陆页(login.php):用户的登陆页面就是一个普通的.php文件,没有连接数据库,我们将用户登陆的昵称保存到了 php 的 cookie() 里,这样在提交发言时,直接将 cookie 里的值提交过去即可,下面看下核心源码:

<?php
if($_GET["tj"] == "out"){ // 接受过来的 tj 值为 out 时
setcookie ("nick", "", time() - 3600); //注销 cookie 值
header("refresh:0; URL='login.php'"); //返回登陆页 login.php,这时已不存在 cookie 值
}
if($_POST["submit"]){ // 判断提交按钮
setcookie("nick",$nick); //用cookie记录用户昵称,也可以用SESSION
header("refresh:0; URL='login.php'"); //返回登陆页 login,这时已有了 cookie 值
}
?>

<? php if($_COOKIE["nick"]){echo "欢迎您 ".$_COOKIE["nick"]." <a href=?tj=out>退出房间</a>";}else{echo "请输入您的昵称"; //判断cookie的值是否为空,如果不为空,显示昵称,如果为空,显示游客
?>

用户发言页(speak.php):用户的发言页是一个普通的表单提交页,都没有涉及到php代码,这个页面也可以做成.html页面,仅显示了用户发言的表情和要发言的内容框,然后进行提交,核心的源码是:

<form action="show.php" target="mainFrame" method="post">
发言表情:
<input type="radio" value="1" name="face" checked="checked" />
<img src="face/PIC1.GIF" width="20" height="20" border="0" />
<input type="radio" value="2" name="face" />
<img src="face/PIC2.GIF" width="20" height="20" border="0" />
<input type="radio" value="3" name="face" />
<img src="face/PIC3.GIF" width="20" height="20" border="0" />
<input type="radio" value="4" name="face" />
<img src="face/PIC4.GIF" width="20" height="20" border="0" />
<input type="radio" value="5" name="face" />
<img src="face/PIC5.GIF" width="20" height="20" border="0" />
<input type="radio" value="6" name="face" />
<img src="face/PIC6.GIF" width="20" height="20" border="0" />
<input type="radio" value="7" name="face" />
<img src="face/PIC7.GIF" width="20" height="20" border="0" />
<input type="text" name="words" cols="20">
<input type="submit" value="发言">
</form>

唯一显示 .php 的就是将表单提交的值传递到 .show.php 进行处理,通过这个源码可以看出,就是一个普通的提交表单。

显示发言页(show.php):显示发言页算是整个系统最主要的一部分了,而且用户所发言内容要实时在这里进行显示,但如果我们仔细去查看源码,其实就是读出数据库的内容而已,这个页面大致分为三部分,分别是:1,连接数据库 2,接受执行 speak.php 提交过来的发言数据 3,显示数据库发言内容。

1,连接数据库:其实整个程序只有显示发言页连接了数据库,我们完全可以直接将数据库的配置页config.php 直接放到本页,目的就是为了下面要插入和显示数据库内容。

2,接受执行 speak.php提交过来的数据:在发言页 speak.php 中填好发言内容后,提交到本页面进行程序处理,也就是将接受过来的值插入到数据库中,源码如下:

<?php
if($words){ //判断发言内容是否为空
$query="insert into chat(chtime,nick,words,face)values(now(),'$nick','$words','$face')";//插入SQL语句
mysql_query($query,$link_ID); //发送留言到数据库
header("refresh:0; URL='show.php'"); } //自动跳转回show.php,等于无刷新了一次本页面
?>

3,显示数据库发言内容:利用简单的查询语句将数据库内容进行循环显示

<?php
//最新发言显示在最下面
$sql="select * from chat order by chtime asc";
$result=mysql_query($sql);
$total=mysql_num_rows($result);
$info=($total/15-1)*15;
if($total<15){
$str="select * from chat order by chtime asc;" ; //查询字符串
}else{
$str="select * from chat order by chtime asc limit $info,15;" ; //查询字符串
}
$result=mysql_query($str,$link_ID); //送出查询
while($row=mysql_fetch_array($result)){
?>
<table width="700" border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#CBB486">
<tr>
<td width="33" align="left" bgcolor="#F5E6C1" class="font">昵称:</td>
<td width="41" align="center" bgcolor="#F5E6C1" class="font"><?php if($row[nick] == ""){echo "游客";}else{echo $row[nick];}?></td>
<td width="42" align="center" bgcolor="#F5E6C1" class="font"><img src="face/PIC<?php echo $row[face];?>.GIF" width="20" height="20"></td>
<td width="56" align="left" bgcolor="#F5E6C1" class="font">发言内容:</td>
<td width="160" align="left" bgcolor="#F5E6C1" class="font"><?php echo $row[words];?></td>
<td width="56" align="left" bgcolor="#F5E6C1" class="font">发言时间:</td>
<td width="244" align="left" bgcolor="#F5E6C1" class="font"><?php echo $row[chtime];?></td>
</tr>
</table>
<table width="100" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="5"></td>
</tr>
</table>
<?php } ?>

最基本的制作原理程序就是这样了,可还是少了一个实时显示的效果,那么我们就可以在 head 之间加上一句:<meta http-equiv="refresh" content="5;url=show.php"> 这句的意思就是每隔 5 秒就刷新一下本页面,虽然是个很笨的方法,但很容易理解,本程序主要就是帮助新手理解程序原理,在此基础上可以更改为 ajax 无刷新的发言显示。

相关源程序代码可以网上搜索夏日PHP聊天室 V.01

标签:

给我留言