在互联网时代,问卷调查已成为收集用户反馈、市场调研的重要工具。本文将带你一步步用PHP构建一个功能齐全的在线问卷调查发布平台,助你轻松掌握数据收集的艺术。
项目准备
首先,确保你的开发环境已安装以下工具:
- PHP 7.4及以上版本
- MySQL数据库
- Apache或Nginx服务器
- 文本编辑器(如VSCode)
1. 数据库设计
在MySQL中创建一个名为survey_platform
的数据库,并设计以下表结构:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL
);
CREATE TABLE surveys (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
title VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
survey_id INT,
question_text TEXT NOT NULL,
question_type ENUM('text', 'multiple_choice', 'checkbox') NOT NULL,
FOREIGN KEY (survey_id) REFERENCES surveys(id)
);
CREATE TABLE answers (
id INT AUTO_INCREMENT PRIMARY KEY,
question_id INT,
answer_text TEXT NOT NULL,
FOREIGN KEY (question_id) REFERENCES questions(id)
);
CREATE TABLE responses (
id INT AUTO_INCREMENT PRIMARY KEY,
survey_id INT,
respondent_ip VARCHAR(45),
submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (survey_id) REFERENCES surveys(id)
);
CREATE TABLE response_details (
id INT AUTO_INCREMENT PRIMARY KEY,
response_id INT,
question_id INT,
answer_text TEXT,
FOREIGN KEY (response_id) REFERENCES responses(id),
FOREIGN KEY (question_id) REFERENCES questions(id)
);
2. 项目结构
在项目根目录下创建以下文件夹和文件:
/survey_platform
/includes
config.php
db.php
/public
index.php
/src
User.php
Survey.php
Question.php
Response.php
核心功能实现
1. 数据库连接
在includes/db.php
中配置数据库连接:
<?php
$host = 'localhost';
$db = 'survey_platform';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
2. 用户管理
在src/User.php
中实现用户注册和登录功能:
<?php
class User {
private $pdo;
public function __construct($pdo) {
$this->pdo = $pdo;
}
public function register($username, $password, $email) {
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
$stmt = $this->pdo->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$username, $hashedPassword, $email]);
}
public function login($username, $password) {
$stmt = $this->pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
return $user;
}
return false;
}
}
?>
3. 问卷管理
在src/Survey.php
中实现问卷的创建和展示:
<?php
class Survey {
private $pdo;
public function __construct($pdo) {
$this->pdo = $pdo;
}
public function create($userId, $title, $description) {
$stmt = $this->pdo->prepare("INSERT INTO surveys (user_id, title, description) VALUES (?, ?, ?)");
$stmt->execute([$userId, $title, $description]);
return $this->pdo->lastInsertId();
}
public function getAllSurveys() {
$stmt = $this->pdo->query("SELECT * FROM surveys");
return $stmt->fetchAll();
}
}
?>
4. 问题管理
在src/Question.php
中实现问题的添加
评论(0)