0

過去 10 分間にページにアクセスしたユーザーの数をカウントする PHP スクリプトを作成しようとしています。これは今私のスクリプトです:

function getOnlineUsers($database, $main_connection){

    $database;

    $visitor_id = session_id();

    $timestamp = time();
    $timeOut = $timestamp - 6000;

    mysql_query("INSERT INTO online (m_time, ip) VALUES ('$timestamp', '$visitor_id')", $main_connection);
    mysql_query("DELETE FROM online WHERE m_time < $timeOut");

    $result = mysql_query("SELECT * FROM online");
    mysql_fetch_assoc($result);
    if(!$result){
        $online_users = 1;
    }else{
        $online_users = mysql_num_rows($result);
    }

    return $online_users+1;
}

問題は、データベースに何も挿入されず、データベースが空のままであるため、カウントが null になることです。誰かがこれで私を助けてくれますか?

4

3 に答える 3

2

まず、PDO または MySQLi を使用することをお勧めします。データベースでは、「m_time」列は整数型である必要があり、$timestamp値は引用符で囲まずに数値として渡す必要があります。

"INSERT INTO online (m_time, ip) VALUES ($timestamp, '$visitor_id')"
于 2013-09-22T09:18:06.283 に答える
1

1) '$timestamp' を NOW() に変更すると、mysql は php の time() 関数を理解できません (m_time が日時フィールドであると仮定します)。

すなわち:

INSERT INTO online (m_time, ip) 
 VALUES ( NOW(), '$visitor_id')

2)あなたの削除は同じ問題を抱えています

3) 過去 10 分間のユーザーを取得するために、もう少し賢い方法を使用できます。次のような方法を試してください。

select count(*) AS OnlineUserCount 
 from online 
WHERE 
 m_time > DATE_SUB( NOW(), INTERVAL 10 MINUTE ) ;
于 2013-09-22T09:18:38.573 に答える
-1

あなたのコードは問題ないようです..実行時にクエリをエコーアウトして対処し、貼り付けてphpmyadminから直接実行し、エラーが発生するかどうかを確認し、行が正常に挿入されたかどうかを確認することをお勧めしますデータベースとの接続ファイル。

また、CoursesWeb で提案されていることも試してください

于 2013-09-22T09:20:15.883 に答える