使用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,
id
)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
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
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>
<?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中文网其他相关文章!