寫一個用戶在線顯示的程序
發(fā)表時間:2024-05-27 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在開始這篇文章時,作者假設(shè)讀者已能夠?qū)懗鲆粋用戶的登入認(rèn)證程序. ---------------------------------------------------------- 記數(shù)器可完成訪問 web 頁的總次數(shù),但卻不能得知一個時段中訪問量的動態(tài)記載,下面就來介紹如何寫一個各個時段動態(tài)顯...
在開始這篇文章時,作者假設(shè)讀者已能夠?qū)懗鲆粋用戶的登入認(rèn)證程序.
----------------------------------------------------------
記數(shù)器可完成訪問 web 頁的總次數(shù),但卻不能得知一個時段中訪問量的動態(tài)記載,下面就來介紹如何寫一個各個時段動態(tài)顯示訪問量的方法.
要記載訪問量,首先就要在 mysql 內(nèi)建立一個數(shù)據(jù)庫,姑且給這個數(shù)據(jù)庫取名為 line,同時建立一個名為 line 的數(shù)據(jù)表,表內(nèi)的字段分別為"用戶名(name varchar(20)),時間(time datetime)".當(dāng)然讀者也可根據(jù)需要增加數(shù)據(jù)表的字段.
建立好數(shù)據(jù)庫后,就可以開始設(shè)計程序了,現(xiàn)在先理清一下思路,要想顯示訪問量,當(dāng)然數(shù)據(jù)庫就必須要有記錄,我已假設(shè)讀者有能力寫一個用戶登入程序了,所以向數(shù)據(jù)庫添加紀(jì)錄可在登入程序假設(shè)為 login.php 里添加:
先給現(xiàn)在時間付值:$time=date('Y-m-d H:i:s');
mysql_select_db(line);
mysql_query("insert into line (name,time) values('$name','$time')");
好了,現(xiàn)在每一位登入的用戶在數(shù)據(jù)庫里都有了一個記錄,下面就來完成用戶在線顯示的程序 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 "現(xiàn)在在線人數(shù)為:$num";
echo "</td></tr>";
for($i=0;$i<$num;$i++){
$name=mysql_result($result,$i,"name");
echo "<tr><td>用戶:$name</td></tr>";
}
}
?>
上面這段程序已能顯示所有在線的用戶人數(shù)及各用戶名,當(dāng)然這個程序還很不完善.如果其中一個用戶登出離開后,數(shù)據(jù)庫就不應(yīng)該有此用戶的記錄所以,還得在登出程序假設(shè)為 logout.php 內(nèi)加上刪除功能:
mysql_select_db(line);
mysql_query("delete from line where name='$name'");
這時一個基本的用戶在線功能已經(jīng)完成,接下來繼續(xù)在 line.php 內(nèi)增加代碼使功能更加完善,首先我們得規(guī)定用戶在多長時間沒繼續(xù)瀏覽 line.php 時就認(rèn)為該用戶已經(jīng)離開,這里給定一個時間限制為 5 分鐘,也就是說程序?qū)@示從現(xiàn)在開始的前 5 分鐘的用戶情況,所以必須 line.php 內(nèi)設(shè)置一個現(xiàn)在時間告知程序從這個時間開始執(zhí)行,然后實現(xiàn)程序執(zhí)行時把數(shù)據(jù)庫內(nèi)記錄的時間減去現(xiàn)在時間大于 5 分鐘的所有記錄刪除,這樣任何用戶在執(zhí)行 line.php 時,都能看到 5 分鐘內(nèi)的所有在線的用戶,完成這個功能需要以下這個數(shù)據(jù)庫語句:
delete from line where time<date_sub('$time',interval 5
minute)
但是其中還有一個問題就是如果有個用戶一直在不停地執(zhí)行 line.php 超過 5 分鐘以上時,程序必須得分辨出該用戶并一直顯示該用戶,在這就得利用 cookie 來實現(xiàn)更新數(shù)據(jù)庫的時間記錄了,因為是登入認(rèn)證的,所以會有個 cookie 來記住用戶的資料的,假設(shè)這個記錄用戶姓名的 cookie 變量為 $cookiename (具體的變量視 cookie 的設(shè)置而定),剩下的就很好辦了,利用這個 cookie 變量完成數(shù)據(jù)庫的修改:
update line set time='$time' where name='$cookiename'
下面來完善 line.php:
<?
//設(shè)置現(xiàn)在的時間
$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 "現(xiàn)在在線人數(shù)為:$num";
echo "</td></tr>";
for($i=0;$i<$num;$i++){
$name=mysql_result($result,$i,"name");
echo "<tr><td>用戶:$name</td></tr>";
}
}
?>
好用戶在線顯示功能完成.