[英]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會將請求發送到如下所示的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-integration和ajax來更新投票 。
代碼是相當簡單和直接的前言。 需要注意的一點是“ filter_input ”,這些函數來自PHP庫,用於清理用戶輸入以防止SQL注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.