[PHP]PHP搭配MySQL實作目前線上人數功能

摘要:[PHP]PHP搭配MySQL實作目前線上人數功能

 
今天的主題是延續上一篇「[PHP]PHP的開啟檔案-寫入檔案-關閉檔案(超新手計數器示範)」的改良版
上一篇是討論來訪人數,那今天要來討論的就是目前正在線上人數
 
在這個範例裡面是運用$_SERVER['REMOTE_ADDR']函數,去抓取使用者的IP,並把值跟時間存入MySQL資料庫
好讓系統做比對,不會每一次刷新就加一次人數
同時,設定存活時間,要是超出存活時間,會執行清除的動作,刪除資料庫內舊有的資料
接著,就讓我們來看看今天的程式碼的部分吧
 
資料庫 ithome_test
資料表 online_user
 
欄位 類別 Order
online_time int(15)  
ip varchar(50) utf8_unicode_ci
 
SQL:
CREATE TABLE IF NOT EXISTS `online_user` ( `online_time` int(15) NOT NULL DEFAULT '0', `ip` varchar(50) COLLATE utf8_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
「online_nums.php」

<?php
 $db_localhost = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "ithome_test";
    
    $conn = mysql_connect ($db_localhost, $db_username, $db_password) or die('Could not connect: ' . mysql_error());
    mysql_select_db($db_name) or die('Could not select database');
    mysql_query("SET NAMES UTF8");
    
    $timeoutseconds = 300; //存活時間,以秒計算
    $online_time = time(); //現在時間
    $timeout = $online_time-$timeoutseconds; //清除紀錄的時間差標準
    
    $check_select="SELECT `ip` FROM `online_user` WHERE `ip`='".$_SERVER['REMOTE_ADDR']."'";
    $result1=mysql_query($check_select);
    $check_nums=mysql_num_rows($result1);
    
    if($check_nums < 1){ //驗證回傳是否為空
        $insert = "INSERT INTO `online_user`(`online_time`, `ip`) VALUES('$online_time','".$_SERVER['REMOTE_ADDR']."')";
        $result2=mysql_query($insert);
        if(!($result2)) {
            echo "ERROR:語法執行失敗,請檢查是否與資料庫連結或語法是否錯誤";
        }
    }else{
        //不為空則更新在線時間
        $update = "UPDATE `online_user` SET `online_time`='$online_time' WHERE `ip`='".$_SERVER['REMOTE_ADDR']."'";
        $result2=mysql_query($update);
        if(!($result2)) {
            echo "ERROR:語法執行失敗,請檢查是否與資料庫連結或語法是否錯誤";
        }
    }
        
    $delete = "DELETE FROM `online_user` WHERE `online_time` < $timeout"; //清除小於$timeout的值
    $result3=mysql_query($delete);
    if(!($result3)) {
        echo "ERROR:語法執行失敗,請檢查是否與資料庫連結或語法是否錯誤";
    }
    
    $select = "SELECT count(`ip`) FROM `online_user`"; //搜尋所有現存ip,統計人數
    $result4=mysql_query($select);
    if(!($result4)) {
        echo "ERROR:語法執行失敗,請檢查是否與資料庫連結或語法是否錯誤";
    }
    while($row=mysql_fetch_array($result4)){
        $user_nums=$row['count(`ip`)'];
    }
    mysql_close();

    echo("目前上線人數:$user_nums 人");
?>