写一个用户在线显示的程序


Posted in PHP onOctober 09, 2006

在开始这篇文章时,作者假设读者已能够写出一个用户的登入认证程序.
----------------------------------------------------------
记数器可完成访问 web 页的总次数,但却不能得知一个时段中访问量的动态记载,下面就来介绍如何写一个各个时段动态显示访问量的方法.

要记载访问量,首先就要在 mysql 内建立一个数据库,姑且给这个数据库取名为 line,同时建立一个名为 line 的数据表,表内的字段分别为"用户名(name varchar(20)),时间(time datetime)".当然读者也可根据需要增加数据表的字段.

建立好数据库后,就可以开始设计程序了,现在先理清一下思路,要想显示访问量,当然数据库就必须要有记录,我已假设读者有能力写一个用户登入程序了,所以向数据库添加纪录可在登入程序假设为 login.php 里添加:

先给现在时间付值:$time=date('Y-m-d H:i:s');
mysql_select_db(line);
mysql_query("insert into line (name,time) values('$name','$time')");

好了,现在每一位登入的用户在数据库里都有了一个记录,下面就来完成用户在线显示的程序 line.php:

<?
mysql_connect("local","","");
mysql_select_db(line);
$result=mysql_query("select * from line");
$num=mysql_numrows($result);
if (!empty($num)) {
echo "<table><tr><td>";
echo "现在在线人数为:$num";
echo "</td></tr>";
for($i=0;$i<$num;$i++){
$name=mysql_result($result,$i,"name");
echo "<tr><td>用户:$name</td></tr>";
}
}
?>

上面这段程序已能显示所有在线的用户人数及各用户名,当然这个程序还很不完善.如果其中一个用户登出离开后,数据库就不应该有此用户的记录所以,还得在登出程序假设为 logout.php 内加上删除功能:

mysql_select_db(line);
mysql_query("delete from line where name='$name'");

这时一个基本的用户在线功能已经完成,接下来继续在 line.php 内增加代码使功能更加完善,首先我们得规定用户在多长时间没继续浏览 line.php 时就认为该用户已经离开,这里给定一个时间限制为 5 分钟,也就是说程序将显示从现在开始的前 5 分钟的用户情况,所以必须 line.php 内设置一个现在时间告知程序从这个时间开始执行,然后实现程序执行时把数据库内记录的时间减去现在时间大于 5 分钟的所有记录删除,这样任何用户在执行 line.php 时,都能看到 5 分钟内的所有在线的用户,完成这个功能需要以下这个数据库语句:

delete from line where time<date_sub('$time',interval 5
minute)

但是其中还有一个问题就是如果有个用户一直在不停地执行 line.php 超过 5 分钟以上时,程序必须得分辨出该用户并一直显示该用户,在这就得利用 cookie 来实现更新数据库的时间记录了,因为是登入认证的,所以会有个 cookie 来记住用户的资料的,假设这个记录用户姓名的 cookie 变量为 $cookiename (具体的变量视 cookie 的设置而定),剩下的就很好办了,利用这个 cookie 变量完成数据库的修改:

update line set time='$time' where name='$cookiename'

下面来完善 line.php:

<?
//设置现在的时间
$time=date('Y-m-d H:i:s');
mysql_connect("local","","");
mysql_select_db(line);

//更新用户的记录
mysql_query("update line set time='$time' where name='$cookiename'");

//删除超过 5 分钟的用户记录
mysql_query("delete from line where time<date_sub('$time',interval 5 minute)");

$result=mysql_query("select * from line");
$num=mysql_numrows($result);
if (!empty($num)) {
echo "<table><tr><td>";
echo "现在在线人数为:$num";
echo "</td></tr>";
for($i=0;$i<$num;$i++){
$name=mysql_result($result,$i,"name");
echo "<tr><td>用户:$name</td></tr>";
}
}
?>

好用户在线显示功能完成.

PHP 相关文章推荐
PHP 编程的 5个良好习惯
Feb 20 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
php单文件版在线代码编辑器
Mar 12 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
万能的php分页类
Jul 06 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 PHP
PHP4引用文件语句的对比
Oct 09 #PHP
一个php作的文本留言本的例子(六)
Oct 09 #PHP
一个php作的文本留言本的例子(二)
Oct 09 #PHP
一个php作的文本留言本的例子(三)
Oct 09 #PHP
一个php作的文本留言本的例子(四)
Oct 09 #PHP
一个php作的文本留言本的例子(五)
Oct 09 #PHP
一个php作的文本留言本的例子(一)
Oct 09 #PHP
You might like
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
基于php-fpm的配置详解
2013/06/03 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
Python 正则表达式入门(中级篇)
2016/12/07 Python
numpy排序与集合运算用法示例
2017/12/15 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
如何基于Python批量下载音乐
2019/11/11 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
工作表现评语
2014/01/19 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
高中班级口号
2014/06/09 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
抗洪救灾标语
2014/10/08 职场文书
投诉信回复范文
2015/07/03 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书