0

投稿ごとにいいねボタンを取得する必要があります。これにより、while が結果を返すたびに、それらの結果のそれぞれに固有のいいねボタンが表示されます。その人が 1 つに投票できる場合、私が現在抱えている問題ですが、それだけです。他のすべての個別の投稿は、すでに投票したためブロックされていますが、何かアドバイスはありますか? 私がこのようなシステムを作ろうとしているものへの紹介が必要な場合は、このサイトのようにする必要があります。http://fmylife.com/ 彼らの構造は私が探しているような形です

while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    ?>
    <div class="wrapper">
        <div class="submissions">
            <div class="logo-logo"><h2>Quotr.</h2>
                <div class="checkboxes">
                    <?php echo htmlentities($row["formtype"]); ?>
                </div>
            </div>
            <div class="top-submit">
                &#8220;<?php echo htmlentities($row["actual_quote"]); ?>&#8221;
            </div>
            <div class="poster">
                - <?php
                    echo htmlentities($row["poster"]);

                    if(isset($row3["voted"]) && isset($row3["ip"]))
                    {
                        echo "You have already voted for this.";
                    }
                    else
                    {
                        ?>
                        <form action="" method="post">
                            <input type="submit" name="like" value="like" />
                            <input type="submit" name="dislike" value="dislike" />
                        </form>
                        <?php
                    }
                ?>
                <div class="like"></div>
                <div class="dislike"></div>
            </div>
            <!-- use select to get the items to stay on the page-->
        </div>
    </div>
    <?php
}
?>

いいねボタン/嫌いボタンのコードは次のとおりです。

$likes = (empty($_POST['like'])) ? : $_POST['like'] ;
$dislikes = (empty($_POST['dislike'])) ? : $_POST['dislike'] ;
$ip = $_SERVER['REMOTE_ADDR'];

if(isset($_POST['like'])){
    $likes1 = $likes+1;
    $voted1 = $voted+1;
    $query2 = $db->prepare("INSERT INTO voters (voted, ip) VALUES ( :voted, :ip)");
    $query2->bindParam(':voted', $voted1, PDO::PARAM_STR);
    $query2->bindParam(':ip', $ip, PDO::PARAM_STR);  
    $query2->execute();
    header("Location: like.php?");
    $update1 = $db->prepare("INSERT INTO votes (likes) VALUES ( :likes)");
    $update1->bindParam(':likes', $likes1, PDO::PARAM_STR);
    $update1->execute();
}

if(isset($_POST['dislike'])){
    $dislikes1 = $dislikes+1;
    $voted1 = $voted+1;
    $query2 = $db->prepare("INSERT INTO voters (voted, ip) VALUES ( :voted, :ip)");
    $query2->bindParam(':voted', $voted1, PDO::PARAM_STR);
    $query2->bindParam(':ip', $ip, PDO::PARAM_STR);  
    $query2->execute();
    header("Location: like.php?");
    $update1 = $db->prepare("INSERT INTO votes (dislikes) VALUES ( :dislikes)");
    $update1->bindParam(':dislikes', $dislikes1, PDO::PARAM_STR);
    $update1->execute();
}
$stmt = $db->query("SELECT * FROM voters");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$row3 = $stmt->fetch();
4

1 に答える 1

0

コードから一歩離れて、何を達成しようとしているのかを考えると、メリットがあると思います。ユーザーが何かを「気に入っている」場合、何を気に入っていますか? おそらく引用?

したがって、ユーザー、引用、いいねを関連付けるデータモデルが必要だと思います。

方法はいくつかありますが、まずは紙に描いてみることをお勧めします。データベーススキーマを使用すると、投票テーブルは整数のみを取ります。

すでに持っているものから構築するだけで、次のように問題について考えてみてください。

Votes
-----
voter_id
quote_id
value

その後、while ループ内で次のようなフォームを作成できます (これは疑似コードです)。

<form action="" method="post"> 
  <input type="hidden" name="quote_id" value="<?php echo $row['id']; ?>" />
  <input type="submit" name="Dislike" value="-1" />         
  <input type="submit" name="Like" value="1" />         
</form>

また、レコードを投票テーブルに挿入して、データベースに挿入した後、投票者の ID だけでなく、投票した見積もりを追跡することもできます。(補足: ユーザーの認証またはユーザー セッションの追跡は、IP による追跡よりも優れた方法かもしれませんが、後で心配することができます)

そのスキーマがあれば、有権者が以前にその quote_id に投票したことがあるかどうかを確認するためにクエリを実行できるようになりました。または、user_id によって行われた好き嫌いの投票数を合計します。

ちょっと考えさせられます。正しい道を進むのに役立つことを願っています。

于 2014-07-03T13:19:43.093 に答える