首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 投票管理系統完整實作:主題、選項、前台投票、後台管理

     編輯:PHP 綜合知識

系統架構概覽

採用兩張資料表支援多主題、多選項、啟用/停用控制:

資料表結構

-- 投票主題表
CREATE TABLE poll (
    Poll_Id INT(11) NOT NULL AUTO_INCREMENT,
    Poll_Name CHAR(50),
    Poll_Del INT(10) DEFAULT '0',  -- 1=啟用, 0=停用
    PRIMARY KEY (Poll_Id)
);

-- 投票選項表
CREATE TABLE pollsele (
    Pollsele_Id INT(11) NOT NULL AUTO_INCREMENT,
    Pollsele_Name CHAR(50),
    Poll_Del INT(10) DEFAULT '0',
    Pollsele_poll_Id INT(10),      -- 關聯 poll.Poll_Id
    pollsele_num INT(10) DEFAULT 0, -- 得票數
    PRIMARY KEY (Pollsele_Id)
);

檔案職責劃分

檔案功能
poll.php前台投票介面:顯示啟用主題及其選項,提交至 pollsee.php
poll_input.php後台主題管理:新增/啟用/停用/刪除主題(含級聯刪除選項)
pollsele.php後台選項管理:針對特定主題新增/啟用/停用選項
pollsee.php投票處理與結果顯示:更新得票數、顯示統計

核心流程解析

前台投票

  1. 查詢 Poll_Del=1 的啟用主題
  2. 查詢該主題下 Poll_Del=0 的啟用選項
  3. 以 Radio 群組呈選項,表單送至 pollsee.php?poll_id=...

後台主題管理

  • 列表顯示所有主題(含啟用狀態)
  • 新增:INSERT INTO poll VALUES('','$title','')
  • 啟用:先將所有 Poll_Del=0,再設定指定 Poll_Del=1(單一啟用邏輯)
  • 刪除:級聯刪除 pollsele 關聯選項

投票處理

<?php
if ($toupiao != "") {
    // 更新得票數
    $sql = "SELECT pollsele_num FROM pollsele WHERE pollsele_name='$toupiao'";
    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);
    $new_num = $row[0] + 1;
    mysql_query("UPDATE pollsele SET pollsele_num=$new_num WHERE pollsele_name='$toupiao'");

    // 顯示結果
    $sql = "SELECT Pollsele_Name, pollsele_num FROM pollsele 
            WHERE pollsele_del='0' AND pollsele_poll_id='$poll_id'";
    // ... 輸出統計表格
} else {
    echo "<font color=red>你不能投空票!!!</font>";
}
?>

安全性與架構缺失(必須修正)

問題風險修正方案
直接拼接 SQL 字串SQL Injection改用 Prepared Statements (PDO/mysqli)
硬編碼資料庫帳密洩露風險、難維護集中設定檔、環境變數
重複連線資料庫效能差、連線耗盡單一連線/連線池、require 共用
無 CSRF 保護偽造投票請求表單加入 CSRF Token
無防重複投票機制刷票IP/Session/Cookie/登入會員限制
Meta Refresh 跳轉體驗差、SEO 不友善HTTP Header Location 重導向
使用已棄用 mysql_* 函式PHP 7+ 移除全面遷移至 PDO 或 mysqli

現代化重構建議

  • 採用 MVC 架構:Controller 處理請求、Model 操作資料、View 輸出模板
  • 引入 Composer 管理依賴,使用 vlucas/phpdotenv 管理環境變數
  • 前端採用 Vue/React + API 模式,分離關注點
  • 加入單元測試,保障投票邏輯正確性
  • 實作速率限制,防止惡意刷票

總結

此範例展示了經典 PHP 程式設計風格:單一檔案混合 HTML/邏輯/SQL、直接輸出、Meta Refresh 跳轉。雖邏輯完整,但安全性與可維護性嚴重不足,僅供教學參考,生產環境務必全面重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved