php
  • html
  • mysql
  • 2017-04-09 23 views 0 likes 
    0

    私はmysqlテーブルを持っています...特定の投稿の投票リンクがユーザーによって1回だけクリックされるようにするにはどうすればよいですか?

    uname(文字列)をプライマリキーとする「ユーザー」。プライマリキーとしてIDを持つ 'posts'。

    「ポスト」はcolumnm-の投票 "

    ユーザーがログインしているしているとき、彼は記事を投票することができます。問題は、彼が何度も投票するのをやめさせることです。

    リンク:(注:$ qはポストのIDです)

    <a href='./vote.php?upid=".$q."'>Upvote</a> 
    

    PHP:

    if(isset($_GET["upid"])) { 
         $plus = $_GET["upid"]; 
         $query = "UPDATE posts SET votes = votes + 1 WHERE id='$plus'"; 
         $result = mysqli_query($dbc, $query) or die('Error querying database!'); 
        } 
    
    +0

    ユーザーがログインしている場合は、特定の投稿IDに対してすべてのユーザー/投票を別々のテーブルにまとめることができます。ユーザーが既にその投稿のIDに投票している場合は、既に投票されており、もはやこれをやり直すことはできません。次に、あなたの質問を修正して、ユーザーIDが既に投稿IDに投票していると記録されていない場合に投票を増やすだけです。 – gavgrif

    答えて

    0

    は、2つのステップを取る:Onclickイベントはへのリンクのスタイルを設定

    1. display:none。またはhide()とjQuery。 (PHP:今後のページの読み込み時に、ユーザが投票を行った場合はリンクを表示しないでください)

    2. データベースでは、INSERTのみ許可する新しい/別のテーブルにアクションを保存してくださいuseridとpostidのユニークな組み合わせの場合のみです。その後、そのテーブルを利用して、投稿IDの合計投票数をカウントすることができます。

    p.s.固有の投稿IDとユーザーIDを使用して個別の投票を保存することで、必要に応じて投票を元に戻すこともできます。

    +0

    私は、ユーザーIDとpostIDを参照している別のテーブルに関する私のコメントで正確に何を言おうとしていたのですか? – gavgrif

    +0

    @gavgrif私はコメントで書き始めましたが、実際には効果的な放棄された質問OPによってアップアップされたコメントによって回答され、その後腐敗する。 – mickmackusa

    +0

    私は同意する - しかし私は燃えている/私の答えはコメントだったはずだと言って他のユーザーによってdownvoted - いずれかの方法で勝つことはできません。とにかく - 少なくとも私達は同じ行に沿って考えていました.....素晴らしい心... – gavgrif

    0

    誰が投票したのかを記録していますか?もしそうなら、あなたはアップ票のリンクの周りにif文を書くことができ、彼らが投票しなかったらリンクを実際に表示するだけですか?

    クッキー/セッションデータを保存することはできますが、これは簡単に回避することができます。 編集:セキュリティ上の理由から、セッション/クッキーのデータを使用しないでください。しかし、mickmackusaがコメントに記載されているように、セッションを使用すると、より多くの投稿が投票されるにつれて肥大化します。

    +1

    セッションデータにすべての票を格納すると、ひどく肥大化してしまうかもしれません...だから、何人かのユーザーが何十万という彼らは何年にもわたって何年も前から存在してきたし、その上/下の投票にはかなりの量があるだろう。私はこれが長期的に良い提案だとは思わない。 – mickmackusa

    +0

    セッションデータとして保存するのは悪い考えですが、セキュリティ上の観点からはアプローチしましたが、偽のセッション/クッキーデータがどれほど簡単か分かります。私は完全に肥大化することについてあなたのポイントに同意します。投稿を編集して、セッションを使用しないことを示唆していることを明確にします。ありがとう。 –

    関連する問題