簡體   English   中英

如何編制投票系統?

[英]How to program a vote up system?

我正在教自己php的開始。 我正在給自己微觀項目推動自己。

到目前為止,我有一個MYSQL數據庫,通過php表單創建。 一欄是因果報應。 我將數據庫表的值顯示在html表中,並且在每行的末尾,我想點擊一個超鏈接,讓我們說一個加號,將該行的業力級別增加1.然后加號會消失。

我應該每行都有一個自動增量整數作為主鍵。

對於這個例子,讓我們假設你對這樣的答案進行投票。 這將需要至少三個表:

用戶答案投票

投票表將保留所有歷史記錄:

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

在這個例子中,我們看到已經記錄了兩張選票。 用戶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表示。這可能代表“添加一個”。 您可以使用更基本的網址,並使用以下內容:

vote.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.";
    }
  }

}

我個人喜歡Jonathan的回答。

但是,如果您覺得可能需要更多信息,我可能會提供幫助。

作為一個小方案項目,我試圖為我的大學制作一個像bash.org這樣的報價數據庫。
它是使用MySql和PHP開發的,它的發布/投票方式與您要完成的內容非常相似。
它絕不是一個設計良好的網絡應用程序。 然而,它可能會讓你朝着正確的方向前進。

現場測試網站鏈接 (溫柔!)

GitHub上的代碼鏈接

我將看一下數據庫模式php - db-integrationajax來更新投票

代碼是相當簡單和直接的前言。 需要注意的一點是“ filter_input ”,這些函數來自PHP庫,用於清理用戶輸入以防止SQL注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM