PHP_D4_“简易聊天室 ”的具体技术实现

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

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

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

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

可以通过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)

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

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

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

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

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

5.发言页面(speak.php)

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

 1 <?php session_start(); ?>
 2 <!--speak.php:用户发言页面----------------------->
 3 <html>
 4     <head>
 5         <title>发言</title>
 6     </head>
 7     <body>
 8         <?php
 9         require_once("sys_conf.inc");            //系统配置文件,包含数据库配置信息
10
11         //发言
12         if(isset($_POST["text"]))
13         {
14             //连接数据库
15             $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
16             mysql_select_db($DBNAME);     //选择数据库my_chat
17             $time=date("h:i:s");
18             $author=$_SESSION["user_name"];
19             $text=$_POST["text"];
20             $str="INSERT INTO chat(create_time,author,text) values(‘$time‘,‘$author‘,‘$text‘)" ;
21             mysql_query($str,$link_id); //送出发言到数据库
22             mysql_close($link_id);
23         }
24         ?>
25         <!--输入发言的表单-->
26         <form action="speak.php" method="post" target="_self">
27             <input type="text" name="text" cols="20">
28             <input type="submit" value="发言">
29         </form>
30     </body>
31 </html> 

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

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

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

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

时间: 2024-08-29 15:39:30

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

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

                  PHP+MySQL实现Internet上一个简易聊天室的关键技术  系统目标: 聊天室使用数据库汇集每个人的发言,并可将数据库内的发言信息显示在页面,让每个用户都可以看到,具体功能如下: a.用户登录:用户发言时显示其登录名信息 b.用户发言:用户输入说的话 c.显示发言信息:用户浏览所有发言信息 设计思路: (1).建立聊天室数据库及相关数据表 (2).实现用户登录页面(login.php) (3).实现发言页面(speak.php) (4).实现发言显示页

socket.io入门,简易聊天室

介绍 通常我们web使用的是http协议,但是 HTTP 协议有一个缺陷:通信只能由客户端发起. 所以我们需要一个可以由服务端主动发出的协议,即WebSocket. WebSocket是HTML5新增的一种通信协议,其特点是服务端可以主动向客户端推送信息,客户端也可以主动向服务端发送信息,是真正的双向平等对话,属于服务器推送技术的一种. Socket.IO 是一个基于 Node.js 的实时应用程序框架,在即时通讯.通知与消息推送,实时分析等场景中有较为广泛的应用. socket.io 包含两个

基于C/S模式的简易聊天室

一.任务简要描述 移动互联网技术的广泛应用为人们提供了非常便捷的沟通方式.QQ.微信和微博等是便携式聊天系统的典型代表,它们的功能非常强大. 本系统利用TCP/IP协议的Socket和ServerSocket类,实现基于C/S模式的简易聊天室.该聊天室包括服务端和客户端两部分,服务端是客户端发送消息的中转站:客户端之间可以直接通信,也可以与服务器通信.聊天结束后客户端断开与服务端的连接,服务器也可以停止信息中转服务. 二.系统需求分析 本系统采用C/S软件架构,服务器端负责监听客户端发来的消息,

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

1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短连接和长连接.短连接一般可以用ajax实现,长连接就是websocket.短连接实现起来比较简单,但是太过于消耗资源.websocket高效不过兼容存在点问题.websocket是html5的资源 如果想要详细了解websocket长连接的原理请看https://www.zhihu.com/ques

Socket编程(简易聊天室客户端/服务器编写、CocoaAsyncSocket)

Socket编程(简易聊天室客户端/服务器编写.CocoaAsyncSocket) 一.Socket 1.1 Socket简介 Socket就是为网络服务提供的一种机制.网络通信其实就是Socket间的通信,通信的两端都是Socket,数据在两个Socket间通过IO传输. 在Web服务大行其道的今天,调用Web服务的代价是高昂的,尤其是仅仅是抓取少量数据的时候尤其如此.而使用Socket,可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销.Socket允许使用长连接,允许应用程序运

docker搭建swoole简易聊天室

docker搭建swoole的简易聊天室 首先pull镜像 docker pull docker.io/kong36088/nginx-php7-swoole 创建容器 docker run --name {自己创建的名字} -p 9501:9501 -p 8089:80 -d -it kong36088/nginx-php7-swoole /bin/bash 进入容器 docker exec -it {容器名字或id} /bin/bash 进入容器之后进入nginx配置文件 cd /etc/n

[Redis]-Redis简易聊天室

代码来自图书<左手MongoDB,右手Redis>第六章-简易聊天室 1.下载代码 2.安装部署py运行环境 yum install python3 -y yum install python-virtualenv -y pip install pipenv pip install --upgrade pip 3.运行代码 cd /RedisChat/ pipenv install export FLASK_APP=main.py flask run -h 10.0.0.51 -p 5000

用HTML5 Web Storage作一个简易聊天室

前 言: 2个月前为了一个评论让我潜水(潜伏)博客园2年作了一次艰难的决定.注册了一个账号! 没事瞎逛博客园以及其他技术网站,发现一个不错的留言墙.就看了其中使用的技术.呀!惊呆了.居然是HTML5,完全没接触过呀! 再 言: 所以就搜了博客园相关文档,有如下信息: @#$^%&*( $&^^**(&( http://zzk.cnblogs.com/s?t=b&w=html5%20Storage #$%&^&*( %*(&()*%$ 资料太多了,你也

《基于Node.js实现简易聊天室系列之详细设计》

一个完整的项目基本分为三个部分:前端.后台和数据库.依照软件工程的理论知识,应该依次按照以下几个步骤:需求分析.概要设计.详细设计.编码.测试等.由于缺乏相关知识的储备,导致这个Demo系列的文章层次不是很清楚,索性这一章将所有的过程(前后端以及数据库)做一个介绍,下一章写完总结就OK了吧. (1)前端部分 涉及到的技术:html.css.bootstrap.jquery.jquery UI 登录/注册界面使用的是bootstrap响应式布局,即支持不同尺寸的客户端,以此提高用户的体验.在这之前