首页  >  文章  >  后端开发  >  使用PHP创建一个强大的在线投票平台

使用PHP创建一个强大的在线投票平台

WBOY
WBOY原创
2023-08-08 10:54:33931浏览

使用PHP创建一个强大的在线投票平台

使用PHP创建一个强大的在线投票平台

引言:
随着互联网的发展,线上投票已经成为一种常见和方便的方式来收集意见和做出决策。在这篇文章中,我们将使用PHP来创建一个强大的在线投票平台,让用户可以轻松地参与投票并查看结果。我们将使用HTML、CSS和PHP的组合来实现这个功能。

步骤一:创建数据库
首先,我们需要创建一个数据库来存储投票相关的数据。我们可以使用MySQL数据库来完成这项任务。在MySQL中创建一个名为"voting_platform"的数据库,并在其中创建两个表:一个用于存储投票问题和选项,另一个用于存储用户投票结果。

创建投票问题和选项表:

CREATE TABLE questions (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 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;🎜🎜步骤二:创建投票平台页面🎜接下来,我们可以开始创建投票平台的前端页面。我们将使用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