-1

私は自分のウェブサイトのページを閲覧したユーザーの数を数えるためにphpスクリプトを作成しました。これは私のコードです

<?php   
    require_once ('test.php');

    $institute_id = 14;

    $q = "INSERT INTO page_views2 ( institute_id, views) VALUES ( $institute_id, 1)
         ON DUPLICATE KEY UPDATE views=views+1"
         ; 
    $r = mysqli_query ($dbc, $q);

?>

これをWebページの先頭に追加しましたが、ページを開くと、これは正しく機能しています(ビューが増加しています)。しかし、私の問題は、ページを更新すると、ページビューが1ずつ増加することです。最初に開いたときは問題ありません。しかし、誰かがページを更新しているときは、これを避けたいと思います。

だから、どんな体でも私にこれをどのように行うことができますか?

4

4 に答える 4

2

セッションを使用しますか?

require_once ('test.php');

$institute_id = 14;

//if no such session exists, assume that its their first time viewing.
if(!isset($_SESSION[$institute_id.'_v'])){

    //insert
    $q = "INSERT INTO page_views2 ( institute_id, views) VALUES ( $institute_id, 1)
         ON DUPLICATE KEY UPDATE views=views+1"
         ; 
    $r = mysqli_query ($dbc, $q);

    //set session variable saying they've viewed this institutions page.
    $_SESSION[$institute_id.'_v'] = 1;

}
于 2012-10-08T08:57:43.583 に答える
0

そのためにCookieやセッションを使用できると思います。最新の訪問のタイムスタンプを保持するセッション変数を作成します。同じページが1時間ほど以内に再度読み込まれた場合、カウンターは増加しません。

于 2012-10-08T08:58:17.057 に答える
0

ページを更新すると新しいページリクエストが発生するため、サーバー側でスクリプトがトリガーされることは明らかです。この動作を変更する方法はありません。あなたができることは、ユーザーが同じページを再度要求したかどうか(更新)に、ある種のチェックを実装することです。セッション/Cookieにいくつかの情報を保存してから、値を比較することができます。

于 2012-10-08T08:57:41.257 に答える
0

2つの変数を使用してみることができます。1つはアクセスしている各ページの名前を定義するためのもので、もう1つは$_SESSION変数です。クエリでカウンタをインクリメントした後、表示しているページの名前で$_SESSIONを設定できます。インクリメントクエリを実行する前に毎回制御変数を作成し、セッション変数が表示しているページと同じ名前である場合は、インクリメント操作をスキップします。お役に立てば幸いです。

于 2012-10-08T09:11:24.450 に答える