首頁  >  文章  >  後端開發  >  使用PHP創建一個強大的線上投票平台

使用PHP創建一個強大的線上投票平台

WBOY
WBOY原創
2023-08-08 10:54:33899瀏覽

使用PHP創建一個強大的線上投票平台

使用PHP創建一個強大的線上投票平台

引言:
隨著網路的發展,線上投票已經成為一種常見且方便的方式來收集意見和做決策。在這篇文章中,我們將使用PHP來創建一個強大的線上投票平台,讓用戶可以輕鬆地參與投票並查看結果。我們將使用HTML、CSS和PHP的組合來實現這個功能。

步驟一:建立資料庫
首先,我們需要建立一個資料庫來儲存投票相關的資料。我們可以使用MySQL資料庫來完成這項任務。在MySQL中建立一個名為"voting_platform"的資料庫,並在其中建立兩個表:一個用於儲存投票問題和選項,另一個用於儲存使用者投票結果。

建立投票問題與選項表:

##CREATE TABLE

questions (
id int(11) NOT NULL AUTO_INCREMENT,
question varchar(255) NOT NULL, PRIMARY KEY (
id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#CREATE TABLE

options (
id int(11) NOT NULL AUTO_INCREMENT,
question_id int(11) NOT NULL,
option varchar(255) NOT NULL, PRIMARY KEY (
id), FOREIGN KEY (
question_id) REFERENCES questions# (id ) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#建立使用者投票結果表:

CREATE TABLE

votes (
id int(11) NOT NULL AUTO_INCREMENT,
question_id int(11) NOT NULL,
option_id int(11) NOT NULL, PRIMARY KEY (
id), FOREIGN KEY (
question_id) REFERENCES questions (id) ON DELETE CASCADE, FOREIGN KEY (
option_id) REFERENCES options (id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


#步驟二:建立投票平台頁面

接下來,我們可以開始建立投票平台的前端頁面。我們將使用HTML和CSS來創建一個美觀和用戶友好的介面。在頁面中,我們將展示投票問題和選項,並提供一個投票按鈕供使用者選擇。同時,我們也將展示投票結果。

<!DOCTYPE html>
<html>
<head>
  <title>在线投票平台</title>
  <style>
    /* 样式定义 */
  </style>
</head>
<body>
  <h1>在线投票平台</h1>
  
  <?php
    // 连接到数据库
    $conn = new mysqli('localhost', 'username', 'password', 'voting_platform');
  
    // 检查连接是否成功
    if ($conn->connect_error) {
      die("连接数据库失败: " . $conn->connect_error);
    }
  
    // 查询投票问题和选项
    $sql = "SELECT id, question FROM questions";
    $result = $conn->query($sql);
  
    if ($result->num_rows > 0) {
      // 输出投票问题
      while($row = $result->fetch_assoc()) {
        echo "<h2>" . $row["question"] . "</h2>";
  
        // 查询投票选项
        $sql = "SELECT id, option FROM options WHERE question_id=" . $row["id"];
        $options = $conn->query($sql);
  
        if ($options->num_rows > 0) {
          // 输出投票选项
          while($option = $options->fetch_assoc()) {
            echo "<input type='radio' name='option_" . $row["id"] . "' value='" . $option["id"] . "'>" . $option["option"] . "<br>";
          }
        }
  
        echo "<button onclick='vote(" . $row["id"] . ")'>投票</button>";
      }
    }
  
    // 关闭数据库连接
    $conn->close();
  ?>
  
  <h2>投票结果</h2>
  
  <?php
    // 连接到数据库
    $conn = new mysqli('localhost', 'username', 'password', 'voting_platform');
  
    // 检查连接是否成功
    if ($conn->connect_error) {
      die("连接数据库失败: " . $conn->connect_error);
    }
  
    // 查询投票结果
    $sql = "SELECT questions.id, questions.question, options.option, COUNT(votes.id) as count FROM questions JOIN options ON questions.id = options.question_id LEFT JOIN votes ON options.id = votes.option_id GROUP BY options.id";
    $result = $conn->query($sql);
  
    if ($result->num_rows > 0) {
      // 输出投票结果
      while($row = $result->fetch_assoc()) {
        echo "<p>" . $row["question"] . "<br>";
        echo $row["option"] . ": " . $row["count"] . " 票</p>";
      }
    }
  
    // 关闭数据库连接
    $conn->close();
  ?>
  
  <script>
    // 使用AJAX发送投票请求
    function vote(questionId) {
      var options = document.getElementsByName('option_' + questionId);
      var selectedOptionId;
      for (var i = 0; i < options.length; i++) {
        if (options[i].checked) {
          selectedOptionId = options[i].value;
          break;
        }
      }
  
      if (selectedOptionId) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
          if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
              alert("投票成功!");
              location.reload(); // 刷新页面以更新投票结果
            } else {
              alert("投票失败!");
            }
          }
        };
  
        xhr.open('POST', 'vote.php', true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send('question_id=' + questionId + '&option_id=' + selectedOptionId);
      } else {
        alert("请选择一个选项进行投票!");
      }
    }
  </script>
</body>
</html>

步驟三:處理投票請求

建立一個名為"vote.php"的PHP文件,用於處理投票請求,並將結果儲存到資料庫中。

<?php
  // 获取问题ID和选项ID
  $questionId = $_POST['question_id'];
  $optionId = $_POST['option_id'];
  
  // 连接到数据库
  $conn = new mysqli('localhost', 'username', 'password', 'voting_platform');
  
  // 检查连接是否成功
  if ($conn->connect_error) {
    die("连接数据库失败: " . $conn->connect_error);
  }
  
  // 插入投票结果到数据库
  $sql = "INSERT INTO votes (question_id, option_id) VALUES ($questionId, $optionId)";
  
  if ($conn->query($sql) === TRUE) {
    echo "投票成功!";
  } else {
    echo "投票失败!";
  }
  
  // 关闭数据库连接
  $conn->close();
?>

結束語:

透過上述步驟,我們成功地創建了一個強大的線上投票平台。用戶可以選擇問題和相應的選項進行投票,同時也可以查看投票結果。透過使用PHP和資料庫,我們實現了一個簡單且功能強大的投票平台,為決策和意見收集提供了方便和高效的工具。 ###

以上是使用PHP創建一個強大的線上投票平台的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn