上面已经介绍了系统的关键技术,下面对具体实现进行详解;

1.开发时,经常需要利用一个配置文件来存储系统的参数,例如:数据库连接信息等。这样可以提高系统的可移植性,当系统的配置发生变化时,例如:更改服务器,就不用修改散布在各个页面的数据库连接信息,而只需修改配置文件即可。

下面创建一个系统配置文件sys_conf.inc,用来保存数据库连接信息:

 <!--sys_conf.inc:系统配置文件------------------------------>
<?php
//数据库配置全局变量
$DBHOST="localhost";
$DBUSER="root";
$DBPWD="";
$DBNAME="my_chat";
?>

可以通过require()或include()函数在其他页面引用sys_conf.inc文件,从而得到数据库配置信息。

其中第4-7行分别定义了$DBHOST、$DBUSER、$DBPWD、$DBNAME,分别用来保存数据库服务器名、登陆用户名、密码和数据库名。大家可根据需要自行修改。

2.登陆界面(login.php)

<!--login.php:My聊天室用户登录页面----------------------->
<html>
<head>
<title>用户登录</title>
</head>
<body>
<center>
<h1>欢迎来到My聊天室</h1>
<h2>请输入您的昵称<h2>
<form action="main.php" method="post" target="_self">
<input type="text" name="nick" cols="20">
<input type="submit" value="登录">
</form>
</center>
</body>
</html>

注:11-13行定义了一个表单,其中包括昵称输入框nick,提交按钮“登录”,当用户单击该按钮时,通过form的action属性,页面将nick输入框中的信息使用post方式提交至聊天主页面main.php

3.聊天室主页面(main.php):

需要使用HTML框架技术,把整个浏览器分为几个独立的页面,每个页面成为其中一个框架,并相互独立,这样页面就不会随着显示留言页面一起自动刷新了。

<?php
session_start(); //装载Session库,一定要放在首行
$user_name=$_POST["nick"];
session_register("user_name"); //注册$user_name变量,注意没有$符号
?> <!--chat.php:My聊天室主页面----------------------->
<html>
<title>My聊天室</title>
<frameset rows="80%,*">
<frame src="chat_display.php" name="chat_display">
<frame src="speak.php" name="speak">
</frameset>
</html>

第10-13行使用了框架,使整个浏览器窗口包含两个页面,分别是留言显示页面chat_display.php和用户发言页面speak.php。这样,对于自动刷新的问题,就可以独立放在chat_display.php。

4.显示发言页面(chat_display.php)

 <!--chat_display.php:显示留言页面----------------------->
<html>
<head>
<title>显示用户留言</title>
<meta http-equiv="refresh" content="5;url=chat_display.php">
</head>
<body>
<?php
require_once("sys_conf.inc"); //系统配置文件,包含数据库配置信息 //连接数据库
$link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_select_db($DBNAME); //选择数据库my_chat
$str="select * from chat ORDER BY create_time;"; //按找发表时间查找所有聊天信息
$result=mysql_query($str, $link_id); //执行查询
$rows=mysql_num_rows($result); //取得查询结果的记录笔数 //取得最后15个发言,并显示
@mysql_data_seek($resut,$rows-15); //移动记录指针到前15笔记录
if ($rows<15) $l=$rows; else $l=15; //记录总数小于15,则最多为该记录数
for ($i=1;$i<=$l;$i++)
{
list($cid,$author,$create_time,$text)=mysql_fetch_row($result);
echo $create_time; echo " ";echo "【".$author."】"; echo"说到:" ; echo $text; echo "<BR>";
} //清除库中过时的数据
@mysql_data_seek($result,$rows-20); //移动记录指针到前20笔记录
list($limtime)=mysql_fetch_row($result);
$str="DELETE FROM chat WHERE create_time<'$limtime';" ;
$result=mysql_query($str,$link_id); //执行查询字符串,库中只留最后20个记录 //关闭数据库
mysql_close($link_id);
?>
</body>
</html>

第9行,通过require_once()函数来引入系统配置文件,以使用数据库连接信息。

第11-15行,使用mysql_query()函数进行数据查询,得到chat表中所有数据

第24行,按“时间+用户+发言内容”的格式将发言输出

第27-31行,删除数据库中旧的发言信息,这样可以保证数据库的存储量保持一定的值,同样是使用mysql_query()函数向服务器提交查询。

5.发言页面(speak.php)

用户的发言过程是写数据库的过程,把用户的发言信息和发言时间及用户名一起保存到chat表中。在chat_display.php上可以读取这些数据并显示出来。

 <?php session_start(); ?>
<!--speak.php:用户发言页面----------------------->
<html>
<head>
<title>发言</title>
</head>
<body>
<?php
require_once("sys_conf.inc"); //系统配置文件,包含数据库配置信息 //发言
if(isset($_POST["text"]))
{
//连接数据库
$link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_select_db($DBNAME); //选择数据库my_chat
$time=date("h:i:s");
$author=$_SESSION["user_name"];
$text=$_POST["text"];
$str="INSERT INTO chat(create_time,author,text) values('$time','$author','$text')" ;
mysql_query($str,$link_id); //送出发言到数据库
mysql_close($link_id);
}
?>
<!--输入发言的表单-->
<form action="speak.php" method="post" target="_self">
<input type="text" name="text" cols="20">
<input type="submit" value="发言">
</form>
</body>
</html>

第1行,使用session_start()函数初始化session库,这样就可以使用已注册的session变量user_name来得到用户的昵称了,具体的数据库获取在第18行使用全部数组$_SEESSION实现。
第9行,通过require_once()函数来引入系统配置文件,以使用数据库连接信息。

第12-23行,实现了数据库的插入操作。

第26-29行定义了HTML表单,包含一个发言输入框text和提交按钮“发言”

至此,一个简单的聊天室制作就完成了。大家可以根据喜好做一些个性化的设计,如增加一个页面显示当前聊天室人员名单、发送表情、进一步美化页面等······

PHP_D4_“简易聊天室 ”的具体技术实现的更多相关文章

  1. php_D3_“简易聊天室 ”实现的关键技术 详解

                      PHP+MySQL实现Internet上一个简易聊天室的关键技术  系统目标: 聊天室使用数据库汇集每个人的发言,并可将数据库内的发言信息显示在页面,让每个用户都可 ...

  2. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  3. node.js+websocket实现简易聊天室

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...

  4. Python开发【笔记】:aiohttp搭建简易聊天室

    简易聊天室: 1.入口main.py import logging import jinja2 import aiohttp_jinja2 from aiohttp import web from a ...

  5. 学习JavaSE TCP/IP协议与搭建简易聊天室

    一.TCP/IP协议 1.TCP/IP协议包括TCP.IP和UDP等 2.域名通过dns服务器转换为IP地址 3.局域网可以通过IP或者主机地址寻找到相应的主机 4.TCP是可靠的连接,效率低,且连接 ...

  6. 示例:Socket应用之简易聊天室

    在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...

  7. node+websocket创建简易聊天室

    关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...

  8. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  9. Express+Socket.IO 实现简易聊天室

    代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首 ...

随机推荐

  1. AnjularJs教程

    原文地址:https://www.angular.cn/guide/quickstart#step-1-install-the-angular-cli

  2. 解决Spring boot中读取属性配置文件出现中文乱码的问题

    问题描述: 在配置文件application.properties中写了 server.port=8081 server.servlet.context-path=/boy name=张三 age=2 ...

  3. ARTS Challenge- Week 1 (2019.03.25~2019.03.31)

    1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...

  4. python学习笔记(6)

    第6章 组合数据类型 组合类型的三种表达形式:集合.序列.字典 集合类型及操作 定义:集合是多个元素的无序组合 集合类型与数学中的集合概念一致 集合元素之间无序,每个元素唯一,不存在相同元素 集合元素 ...

  5. ES6学习

    一.ES6的特点 1.let(变量),const(常量) 2.在ES6中不能重复定义 3.块级作用域 普通作用域 if(true){ var test =1; } console.log(test); ...

  6. KindEditor富文本编辑器, 从客户端中检测到有潜在危险的 Request.Form 值

    在用富文本编辑器时经常会遇到的问题是asp.net报的”检测到有潜在危险的 Request.Form 值“一般的解法是在aspx页面   page  标签中加上 validaterequest='fa ...

  7. Luogu P1381油滴扩展

    传送门 数据范围给的很小啊,n >= 0 && n <= 7,所以给了DFS生存的空间. 对于每一个油滴,可以说在它下一个油滴放置之前,当前的这个油滴的半径并不确定(但是对 ...

  8. Web测试入门:Selenium+Chrome+Python+Mac OS

    一.环境配置 Chromedriver 下载及环境配置 url:使用WebDriver在Chrome浏览器上进行测试时,需要从http://chromedriver.storage.googleapi ...

  9. CoreProfiler升级到.NetStandard 2.0

    致所有感兴趣的朋友: CoreProfiler和相应的Sample项目cross-app-profiling-demo都已经升级到.NetStandrard 2.0和.NetCore 2.0. 有任何 ...

  10. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...