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


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调用数据库的存贮过程
Oct 09 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
初识Laravel
Oct 30 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
自制PHP框架之路由与控制器
May 07 PHP
详解php命令注入攻击
Apr 06 PHP
laradock环境docker-compose操作详解
Jul 29 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(8) php 数组
2010/03/05 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
php url路由入门实例
2014/04/23 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
浅谈django中的认证与登录
2016/10/31 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
Python简单基础小程序的实例代码
2019/04/28 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
pytorch数据预处理错误的解决
2020/02/20 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
毕业生如何写自我鉴定
2014/03/15 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
超市督导岗位职责
2015/04/10 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server