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

2016-01-29 13:31 11 1 收藏

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

【 tulaoshi.com - PHP 】

 在开始这篇文章时,作者假设读者已能够写出一个用户的登入认证程序.
----------------------------------------------------------
记数器可完成访问 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";
}
}
?

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

来源:https://www.tulaoshi.com/n/20160129/1490496.html

延伸阅读
标签: ASP
  DateSelect.asp 创立一个日历格式的。。。 <%@ LANGUAGE="VBSCRIPT" % <% 'Code Written by D. Scott Hand 'If any errors are found, please 'e-mail scott_hand@pobox.com with 'the error and the way the error 'was caused '***Purpose:************ '* This is a page built to show calendar functiona...
标签: PHP
  (主要用了两个字符串函数implode()和explode) 我制作的域名查询的源代码,主要用了两个字符串函数implode()和explode,利用这两个函数的切割字符串的强大功能,可以查询.com,.net.,org.,cc.,tv下的域名whois。 <?php echo '<center<form'; echo '<input type="text" name="string"'; echo '<in...
#include graphics.h #include stdio.h #include math.h #include time.h #define PI 3.14159 #define maxx 640 #define maxy 480main() {int i;  char c;  init();  draw();  c=getch(); } init() /*初始化图形系统函数*/ {int gdriver=DETECT,gmode; &n...
标签: Web开发
DreamScript是我去年1月就开始自己写的一个框架,后在6月因为换工作的原因导致无更多时间自己一人写下去,期间对他多次改进,先那出来,希望大家看看一起学习,如果有兴趣一起做的,我也很欢迎。在这里我说明一下他是一个主要使用SOAP和WebService交换数据的,这也是我的想法,只使用WS做为通信标准。在这其中我融合了很多框架的亮点,根据自己...
标签: ASP
<!--#include file="../lib/filelib.asp"-- <% Response.write "<title上传文件至当前文件夹</title" Response.Write "<body bgcolor=""#D6D3CE"" leftmargin=""0"" topmargin=""0"" title = "" 请您遵守国家相关法律法规上传文件。上传前请杀毒,否则系统将会自动删除此文件!""" '**Start Encode** Action=Request("A") If ...

经验教程

341

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部