2012-12-16 28 views
1

好吧,我使用PHP腳本和MySQL來顯示在線訪問者的數量。我在每個頁面上調用函數,並且需要一種方法來避免在同一個會話期間重複來自同一個人的條目。使用PHP在線唯一身份訪問者

它工作正常,但增加訪客的每一頁的負載。我認爲在會話變量上使用'require_once'語句可以工作,但不行。以下是PHP代碼,請幫助!

//users online 
function update_user_time() 

{ 

    session_start(); 
    $session=session_id(); 
    $time=time(); 
    $time_check=$time-600; //SET TIME 10 minutes 

    $host="localhost"; // Host name 
    $username="______"; // Mysql username 
    $password="______"; // Mysql password 
    $db_name="______"; // Database name 
    $tbl_name="______"; // Table name 

    // Connect to server and select databse 
    mysql_connect("$host", "$username", "$password")or die("cannot connect to server"); 
    mysql_select_db("$db_name")or die("cannot select DB"); 
    $sql="SELECT * FROM $tbl_name WHERE session='$session'"; 
    $result=mysql_query($sql); 

    $count=mysql_num_rows($result); 
    if($count=="0"){ 

    $sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')"; 
    $result1=mysql_query($sql1); 
    } 

    else { 
    "$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'"; 
    $result2=mysql_query($sql2); 
    } 

    $sql3="SELECT * FROM $tbl_name"; 
    $result3=mysql_query($sql3); 
    $count_user_online=mysql_num_rows($result3); 
    echo "[ $count_user_online users online ]"; 

    // if over 10 minute, delete session 
    $sql4="DELETE FROM $tbl_name WHERE time<$time_check"; 
    $result4=mysql_query($sql4); 

    // Open multiple browser page for result 


    // Close connection 
    mysql_close(); 

} 
+0

您應該使用REPLACE INTO插入/更新https://dev.mysql.com/doc/refman/5.0/en/replace.html這樣,如果它不在那裏,它將被插入,否則如果它已經在那裏將被替換,而不是重複。如果它存在與否,比單獨查詢要簡單得多。 –

回答

2

我會設置一個會話變量,並且只會在該會話變量尚未設置時遞增訪問計數器。

+0

你的意思是替換當前的$ session變量? –

0

事情是這樣的:

session_start(); 
if (!isset($_SESSION['counted'])) 
{ 
    $_SESSION['counted'] = TRUE; 
    /* ADD TO COUNTER */ 
} 

這樣的話,只有第一個進入該網站將被計數。對於各種相當神祕的原因,這不是100%的萬無一失,但對於大多數網站來說這是一個很好的解決方案。 HTH,〜Ray

+0

好的,我幾乎沒有任何PHP/mysql的經驗,所以你可以進一步協助嗎? 在session_start下面添加if語句,或將其替換爲當前if($ count == 0)? –

相關問題