當前位置: 首頁> 最新文章列表> PHP投票系統實現教程:從數據庫設計到代碼示例

PHP投票系統實現教程:從數據庫設計到代碼示例

M66 2025-09-19

引言

隨著互聯網的不斷發展,在線投票功能逐漸成為各類網站和平台的重要互動方式。使用PHP語言,我們可以快速實現一個基礎的投票系統,支持用戶投票、結果統計以及管理員管理功能。本文將從數據庫設計到代碼實現,為你完整展示一個投票系統的構建流程。

系統需求

本投票系統主要包含以下功能:

  • 用戶可以查看投票主題和選項
  • 用戶可以為喜歡的選項投票
  • 用戶可以查看每個選項的票數
  • 同一用戶不可重複投票
  • 管理員可以新增、修改、刪除投票主題和選項
  • 管理員可以查看投票結果

數據庫設計

為了支持上述功能,需要設計以下數據表:

  • vote_subjects :存儲投票主題,包含idtitlecreated_at
  • vote_options :存儲投票選項,包含idsubject_idoption_namevotes
  • votes :存儲用戶投票記錄,包含idoption_idip_address

代碼實現

以下是投票系統的關鍵PHP實現示例:

連接數據庫:

<?php
$host = 'localhost';
$db = 'vote_system';
$user = 'root';
$pass = '';
$conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
?>

查詢投票主題和選項:

<?php
$sql = 'SELECT * FROM vote_subjects';
$stmt = $conn->query($sql);
$subjects = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($subjects as $subject) {
    echo $subject[&#39;title&#39;] . &#39;<br> &#39;;
    $subject_id = $subject[&#39;id&#39;];
    $sql = "SELECT * FROM vote_options WHERE subject_id = $subject_id";
    $stmt = $conn->query($sql);
    $options = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($options as $option) {
        echo $option[&#39;option_name&#39;] . &#39;: &#39; . $option[&#39;votes&#39;] . &#39; votes<br> &#39;;
    }
}
?>

投票邏輯:

<?php
$subject_id = $_POST['subject_id'];
$option_id = $_POST['option_id'];
$ip_address = $_SERVER['REMOTE_ADDR'];

$sql = "SELECT COUNT(*) FROM votes WHERE option_id = $option_id AND ip_address = '$ip_address'";
$stmt = $conn-> query($sql);
$count = $stmt->fetchColumn();

if ($count > 0) {
    echo &#39;您已經投過票了! &#39;;
} else {
    $sql = "UPDATE vote_options SET votes = votes + 1 WHERE id = $option_id";
    $conn->exec($sql);

    $sql = "INSERT INTO votes (option_id, ip_address) VALUES ($option_id, &#39;$ip_address&#39;)";
    $conn->exec($sql);

    echo &#39;投票成功! &#39;;
}
?>

管理員功能示例:

<?php
// 創建投票主題
$title = $_POST['title'];
$sql = "INSERT INTO vote_subjects (title) VALUES ('$title')";
$conn-> exec($sql);

// 創建投票選項$subject_id = $_POST[&#39;subject_id&#39;];
$option_name = $_POST[&#39;option_name&#39;];
$sql = "INSERT INTO vote_options (subject_id, option_name, votes) VALUES ($subject_id, &#39;$option_name&#39;, 0)";
$conn->exec($sql);

// 編輯投票選項$id = $_POST[&#39;id&#39;];
$option_name = $_POST[&#39;option_name&#39;];
$sql = "UPDATE vote_options SET option_name = &#39;$option_name&#39; WHERE id = $id";
$conn->exec($sql);

// 刪除投票選項$id = $_POST[&#39;id&#39;];
$sql = "DELETE FROM vote_options WHERE id = $id";
$conn->exec($sql);
?>

總結

本文展示了一個基於PHP的簡單投票系統的實現過程,涵蓋數據庫結構、用戶投票邏輯和管理員操作示例。這一系統能夠滿足基本的投票需求,但在實際應用中,還需要增加安全性(如SQL注入防護)、用戶身份驗證以及前端展示優化,以便更好地應用在真實場景中。