隨著互聯網的不斷發展,在線投票功能逐漸成為各類網站和平台的重要互動方式。使用PHP語言,我們可以快速實現一個基礎的投票系統,支持用戶投票、結果統計以及管理員管理功能。本文將從數據庫設計到代碼實現,為你完整展示一個投票系統的構建流程。
本投票系統主要包含以下功能:
為了支持上述功能,需要設計以下數據表:
以下是投票系統的關鍵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['title'] . '<br> '; $subject_id = $subject['id']; $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['option_name'] . ': ' . $option['votes'] . ' votes<br> '; } } ?>
投票邏輯:
<?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 '您已經投過票了! '; } 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, '$ip_address')"; $conn->exec($sql); echo '投票成功! '; } ?>
管理員功能示例:
<?php // 創建投票主題 $title = $_POST['title']; $sql = "INSERT INTO vote_subjects (title) VALUES ('$title')"; $conn-> exec($sql); // 創建投票選項$subject_id = $_POST['subject_id']; $option_name = $_POST['option_name']; $sql = "INSERT INTO vote_options (subject_id, option_name, votes) VALUES ($subject_id, '$option_name', 0)"; $conn->exec($sql); // 編輯投票選項$id = $_POST['id']; $option_name = $_POST['option_name']; $sql = "UPDATE vote_options SET option_name = '$option_name' WHERE id = $id"; $conn->exec($sql); // 刪除投票選項$id = $_POST['id']; $sql = "DELETE FROM vote_options WHERE id = $id"; $conn->exec($sql); ?>
本文展示了一個基於PHP的簡單投票系統的實現過程,涵蓋數據庫結構、用戶投票邏輯和管理員操作示例。這一系統能夠滿足基本的投票需求,但在實際應用中,還需要增加安全性(如SQL注入防護)、用戶身份驗證以及前端展示優化,以便更好地應用在真實場景中。