答えて
セッション変数を(hasBeenCounted)で設定できます。設定されている場合は、増分しません。
if(!isset($_SESSION['hasBeenCounted'])
{
$id = $_GET['id'];
mysql_query("UPDATE threads SET views = views + 1 WHERE id = '$id'");
$_SESSION['hasBeenCounted'] = "counted";
}
EDIT:
session_start():
はあなたが上のセッションを使用するすべてのページの最上部にする必要があります。
+1シンプルで清潔です。 '$ _SESSION'で猿鍵する前に' session_start() 'を使う必要があるかもしれません。さもなければ、エラーが発生します。 –
@Mike:そのリマインダーを含めるために私の答えを編集しました。 –
私はそれを残している理由を理解しています.. 2回呼び出すとエラーもスローされます:p –
これを行う1つの方法は、セッションを使用することです。しかし、結局、それは本当にスケーラブルではありません。ユーザーがサイトを移動する際に、大量のセッションファイルが存在する可能性があります。さらに、ユーザーが新しいセッションを作成するたびに、そのビューを記録します。
単一のユーザーに対して1つのビューのみを記録する場合は、そのユーザーがそのスレッドを表示したことを保存する必要があります。あなたのサイトでログインしているユーザーだけがスレッドを表示できるかどうか、またはサイトが一般公開されているかどうかによって、各ユーザーの固有のものを別のテーブルに格納しなければなりません。フィールドタイプ):
CREATE TABLE `thread_views` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `thread_id` INT(10) UNSIGNED NOT NULL , `user_id` INT(10) UNSIGNED NOT NULL , `ts` TIMESTAMP NOT NULL )
ユーザーがスレッドを閲覧するたびに、あなたはこの表をチェックする必要があります。 thread_views
にレコードがない場合は、1つを挿入し、テーブルのviews
列をインクリメントします。 thread_views
に行がある場合、そのユーザーは既にスレッドを見たことがわかります。
私はクッキーとのセッションはあなたのベストショットだと思う。最初の訪問後にCookieを設定したい場合は、Cookieがすでに設定されている場合は、ビューカウンタを更新しないでください。
構文は次のようになります。
$expire=time()+2592000; //This is set to expire in 1 month (in seconds)
setcookie("visitor", "Already Visited", $expire);
これは私がそれを実装する方法を次のとおりです。
if !(isset($_COOKIE["visitor"]))
{
$expire=time()+2592000; //This is set to expire in 1 month (in seconds)
setcookie("visitor", "Already Visited", $expire);
$id = $_GET['id'];
mysql_query("UPDATE threads SET views = views + 1 WHERE id = '$id'");
}
$id = $_GET['id'];
if(!isset($_SESSION['hasBeenCounted']) || $_SESSION['hasBeenCounted'] != $id)
{
mysql_query("UPDATE threads SET views = views + 1 WHERE id = '$id'");
$_SESSION['hasBeenCounted'] = $id;
}
私は、コードを変更したし、それが機能するようになりました。
- 1. は、私はこのコードを持って
- 2. 私はこのコードを持って、コンストラクタ
- 3. 私はこのコードを持って
- 4. は、私はこのC++のコードを持って、このC++コード
- 5. jQueryのコードは、私はこのコードを持って、 を
- 6. は、私は私のSPでこのコードを持ってsp_executesqlを
- 7. のstartsWithが、私はこのコードを持って、私は
- 8. Strutsは、私はこのコードを持っている私の.class
- 9. は、私はこのコードを持っている私のテキストファイル
- 10. ListActivitiesは、私がここにこのコードを持って
- 11. と転送は、私がここにこのコードを持って
- 12. はCSS-アコーディオンは、私はこのコードを持っている
- 13. 私は私のコードでこの行を持っている
- 14. ComboBox.SelectedItemは私が私のDataGrid内このコラム/コードを持って
- 15. 私は私のクライアントアプリケーションでこのコードを持っているXML
- 16. は、私は、コードの行を持って
- 17. ソート私はこのコード行持っ
- 18. 私はこのコードを持っているこの変数
- 19. 私はこのPHPスクリプトを持って、このPHPコード
- 20. 私はこのコードを持っているこの機能
- 21. 持っIBOutletが、私はこのコードを持っていることに
- 22. は、私は、このRSpecのコードを持っているRSpecの
- 23. 私は私のコードでこれを持って<%= for %>ビューヘルパー
- 24. XMLHttpRequestのは、私はこのコードを持っているOPTION
- 25. は、私はこのコードを持っているのpython
- 26. のrealloc()は、私はこのコードを持ってセグメンテーションフォールト
- 27. ブレイドエンジンの要素は、私はこのコードを持って
- 28. は、私はこのコードを持っているNSMutableArrayの
- 29. Vueのは、私はこのコードを持っている子コンポーネント
- 30. は、私はこのコードを持っている別の
一意の訪問回数をカウントしたいだけですか? – Jonah
はいこれは私が意味することです。 – Swell