2

説明:

作成した Web アプリにコメント/返信機能を作成しています。これらのコメントもリンクしたいという投稿があります。スパムを減らし、コミュニティへの参加を促すために、コメント/返信ごとに投票システムを実装したいと考えています。

問題:

データベースのセットアップ方法と、賛成票/反対票の表示方法を知っています。私が何をすべきかわからない唯一のことは、投票を維持することです...ユーザーがページを更新しても投票されています。ユーザーが 1 つの投稿に対して複数回投票できるようにしたくありません。このサイトでの投票のようなもので、黄色の賛成票ですでに投票したことが追跡されます。

私が考えたこと:

  • user_id を追加して、投稿 ID を Cookie に配置します。Cookie を簡単にチェックするだけで、ユーザーが再び投票するのを止めることができます。
  • テーブルの投稿IDに一意の制約を配置します...しかし、これは私が混乱する場所です。投票済みの投稿用に別のテーブルを用意する必要がありますか? ここにデータベーススキーマのアイデア(私が思う):https://stackoverflow.com/a/12350981/185672
  • すべてのIDをセッション配列に保持し、投票されたすべてのIDに対してチェックします...しかし、それは巨大になります。
  • db 呼び出しの数を減らすための Cookie とデータベースの組み合わせ。

将来的には、1 人のユーザーによって数千の投票が行われる可能性があります。

編集:

結果をデータベースに保存することは必須であることがわかりました。ユーザーが何千回も電話をかけずに有効な投票権限を持っているかどうか、すべての返信/コメントを確認するにはどうすればよいですか?

資力:

さらにスパムの問題を解決しましたが、最初の質問には答えませんでした: https://stackoverflow.com/a/2333085/185672

投票をカウントする方法を説明するが、「賛成票」をチェックしたままにしない古いソリューション。 http://www.9lessons.info/2009/08/vote-with-jquery-ajax-and-php.html

ボーナス質問:

コメント システム (投票付き) をビルド済みのアプリに同期できる優れたスクリプトを知っている場合は?

また、重複を見つけようとしましたが、できません。

4

2 に答える 2

2

ええ、別のテーブルを保持して、ユーザーの投票を追跡してください。どのユーザーがページをリクエストしているかがわかるので、投票テーブルに簡単に参加して、現在のユーザーがページの各投稿に投票する資格があるかどうかを判断できます。投稿ごとに、適格な場合は 1 つのバージョンの html を出力し、そうでない場合は別のバージョンを出力します。

ajax リクエストが投票を行う php ファイルを要求したら、そのユーザーが投票する資格があることをもう一度確認できます。

yahoo のニュース記事を例にとると、自分がコメントしたページをリクエストすると、自分のコメントによって投票ボタンが無効になります。ブラウザの開発ツール内のページをハッキングすると、ボタンを有効にできます。それらをクリックして、自分の投稿に投票することもできますが、1 回だけです。

したがって、彼らは 3 分の 2 が正しく、ユーザーの投票資格に基づいて HTML を出力したことがわかります。また、複数の投票 (サーバー側) を防ぎます。自分のコメントに投票していないことを確認するためのサーバー側のチェックを行わないだけです。

一方、Stack Overflow では常に同じ html が表示されますが、クリックして自分のコメントに投票すると、サーバー側のコードがそのアイデアに反発し、応答は基本的に 'bugger-off!' になります。サーバーから否定的な結果を受け取ると、投票数を更新するのではなく、ページ上の JavaScript がメッセージをポップアップ表示します。

于 2012-10-12T20:26:19.310 に答える
0

ユーザーによる賛成/反対投票に関する情報を保存する「非表示フィールド」をページに作成することをお勧めします。これはあなたがそれを使う方法です:

ユーザーが賛成/反対票を投じた場合、上のjavsvscriptは賛成票を示し、投票ステータスを示すためにフィールドをtrueに設定し、サーバーがユーザープロファイルに投票ステータスを記録するサーバーにAJAXリクエストを送信します。データベース。

次に、特定のユーザーの投稿が再読み込みされるたびに、サーバーは、データベースに保存されている投票レコードに応じて、サーバー側の非表示フィールドをtrueまたはfalseに設定します。JSは、ロード時に非表示フィールドをチェックし、それに応じてページに投票を設定します(賛成票か反対票かを示すために追加の非表示フィールドが必要になる場合があります)。

于 2012-10-12T20:03:54.207 に答える