php实现问卷制作
PHP实现问卷制作的基本步骤
使用PHP创建问卷系统需要结合数据库(如MySQL)存储问题和用户回答,前端HTML/CSS用于展示表单,后端PHP处理逻辑。以下是关键实现方法:

数据库设计
创建问卷相关的数据表结构:

surveys表存储问卷基本信息(ID、标题、描述、创建时间等)questions表存储问题(ID、问卷ID、问题类型、题干、选项等)answers表存储用户提交的答案(ID、问题ID、用户ID、答案内容等)
CREATE TABLE surveys (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
survey_id INT,
question_type ENUM('text','radio','checkbox') NOT NULL,
question_text TEXT NOT NULL,
options TEXT,
FOREIGN KEY (survey_id) REFERENCES surveys(id)
);
CREATE TABLE answers (
id INT AUTO_INCREMENT PRIMARY KEY,
question_id INT,
user_id INT,
answer_text TEXT,
FOREIGN KEY (question_id) REFERENCES questions(id)
);
前端表单生成
根据问题类型动态生成HTML表单:
// 获取问卷问题
$survey_id = $_GET['id'];
$questions = $pdo->query("SELECT * FROM questions WHERE survey_id = $survey_id");
foreach ($questions as $q) {
echo '<div class="question">';
echo '<label>'.$q['question_text'].'</label>';
switch ($q['question_type']) {
case 'text':
echo '<input type="text" name="q'.$q['id'].'">';
break;
case 'radio':
$options = json_decode($q['options']);
foreach ($options as $opt) {
echo '<input type="radio" name="q'.$q['id'].'" value="'.$opt.'"> '.$opt;
}
break;
case 'checkbox':
$options = json_decode($q['options']);
foreach ($options as $opt) {
echo '<input type="checkbox" name="q'.$q['id'].'[]" value="'.$opt.'"> '.$opt;
}
break;
}
echo '</div>';
}
后端答案处理
接收表单提交并存储答案:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$user_id = 1; // 实际应用中从会话获取
foreach ($_POST as $key => $value) {
if (strpos($key, 'q') === 0) {
$question_id = substr($key, 1);
// 处理多选答案
if (is_array($value)) {
$value = json_encode($value);
}
$stmt = $pdo->prepare("INSERT INTO answers (question_id, user_id, answer_text)
VALUES (?, ?, ?)");
$stmt->execute([$question_id, $user_id, $value]);
}
}
echo '问卷提交成功!';
}
安全增强措施
- 使用预处理语句防止SQL注入
- 对用户输入进行过滤和验证
- 实现CSRF保护
- 设置合理的权限控制
// 示例:输入过滤
$clean_input = filter_input(INPUT_POST, 'fieldname', FILTER_SANITIZE_STRING);
扩展功能建议
- 添加问卷截止日期功能
- 实现问题逻辑跳转(根据前题答案显示不同后续问题)
- 生成统计图表展示结果
- 支持导出问卷数据为Excel或CSV
通过以上方法,可以构建一个基础的PHP问卷系统。实际开发中可根据需求进一步扩展功能和完善用户体验。






