2

私は自分自身にphpを教え始めたばかりです。私は自分自身をプッシュするためのマイクロプロジェクトを自分自身に与えています。

これまでのところ、phpフォームを使用して作成されたMYSQLデータベースがあります。1つの列はカルマのためのものです。データベーステーブルの値をhtmlテーブルに表示します。各行の最後で、ハイパーリンク(プラス記号など)をクリックして、その行のカルマレベルを1増やします。次にプラス記号消えるだろう。

各行には、主キーとして自動インクリメント整数が含まれている必要があります。

4

2 に答える 2

12

この例では、そう答えに投票していると仮定しましょう。これには、少なくとも3つのテーブルが必要です。

ユーザー回答投票

投票テーブルには、すべての履歴が保持されます。

voteid | userid | answerid | value
----------------------------------
   1   |   12   |   383    |   1
   2   |   28   |   383    |  -1  (negative number would require signed values)

この例では、2つの投票が記録されていることがわかります。ユーザー12と28は両方とも回答383に投票しました。ユーザー12はそれを気に入って、サポートに1を追加しました。ユーザー28はそれを気に入らず、サポートから1を引きました。

ユーザーが投票するときはいつでも、最初にそのユーザーがその特定の質問にすでに投票しているかどうかを確認する必要があります。持っている場合は、それ以上の投票を拒否するか、古い投票を新しい投票で上書きすることができます。

SELECT * 
FROM votes 
WHERE (userid = 12) 
  AND (answerid = 383)

これは、ユーザーがすでに投票したかどうかを示す非常に単純なクエリ例です。レコードが返される場合は、彼らが投票したことがわかります。とても素敵な「申し訳ありませんが、あなたはすでに投票しました」と答えることができます。メッセージ、またはあなたはそれを上書きすることができます:

UPDATE votes 
SET value = $votevalue 
WHERE (userid = 12) 
  AND (answerid = 383)

そうは言っても、SOがこれをどのように達成するかを見てみましょう。

賛成票の矢印をクリックすると、SOは次のようなURLにリクエストを送信します。

    http://stackoverflow.com/posts/1303528/vote/2

このURLでは、投稿#1303528に投票が行われていることがわかります。また、投票タイプは2で表されます。この2は、「1を追加」を表す可能性があります。より基本的なURLを使用して、次のようなものを使用できます。

    投票.php?answerid = 383&vote = 1

vote.phpページには、次のようなコードが含まれます。

(警告:このコードをそのまま使用しないでください。これは例であり、解決策ではありません)

if ($_GET) {

  $userid   = $_SESSION["userid"]; // assumes the user is logged in via SESSIONS
  $answerid = $_GET["answerid"];
  $votetype = $_GET["vote"];

  $query = "SELECT * 
            FROM votes 
            WHERE (userid = {$userid}) 
              AND (answerid = {$answerid})";

  $result = mysql_query($query) or die(mysql_error());

  if (mysql_num_rows($result) > 0) {
    # User has voted
    print "Sorry, you are only allowed one vote.";
  } else {
    # User has not voted, cast the vote
    $query = "INSERT INTO votes (userid, answerid, votevalue)
              VALUES({$userid},{$answerid},{$vote})";
    $result = mysql_query($query) or die(mysql_error());
    if (mysql_affected_rows($result) > 0) {
      print "Your vote has been recorded.";
    }
  }

}
于 2009-08-20T01:51:19.460 に答える
2

個人的にはジョナサンの答えが好きです。

ただし、さらに情報が必要な場合は、サポートできる可能性があります。

小さなサイドプロジェクトとして、大学用にbash.orgのような見積もりデータベースを作成しようとしました。
これはMySqlとPHPを使用して開発されたもので、あなたが達成しようとしていることとよく似た投稿/投票があります。
それは決してうまく設計されたウェブアプリではありません。しかし、それはあなたを正しい方向に向かわせることができるかもしれません。

ライブテストサイトリンク(優しくしてください!)

GitHubのコードリンク

データベーススキーマphp --db - integration、およびajaxを調べて、投票を更新します。

コードはかなり単純でまっすぐな序文です。注意すべき点の1つは、「filter_input」です。これらの関数は、SQLインジェクションを防ぐためにユーザー入力をサニタイズするためのPHPライブラリからのものです。

于 2009-08-20T02:02:42.003 に答える