🗣 Wd提问: 问答社区源码php
🤖 Ai回答: 创建一个问答社区的PHP源码涉及多个方面,包括用户注册、登录、提问、回答、评论、点赞等功能。为了帮助你更好地理解如何构建一个简单的问答社区,我将提供一个基础的架构和代码示例。你可以根据需求进行扩展和优化。
1、数据库设计
首先,我们需要设计数据库表来存储用户、问题、答案、评论等信息。假设我们使用MySQL数据库,以下是几个基本的表结构:
`users` 表
用于存储用户信息。
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
`questions` 表
用于存储问题。
sql
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
`answers` 表
用于存储答案。
sql
CREATE TABLE answers (
id INT AUTO_INCREMENT PRIMARY KEY,
question_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (question_id) REFERENCES questions(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
`comments` 表
用于存储评论(可以是问题或答案的评论)。
sql
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
parent_type ENUM('question', 'answer') NOT NULL,
parent_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
`votes` 表
用于存储点赞/踩的功能。
sql
CREATE TABLE votes (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
parent_type ENUM('question', 'answer') NOT NULL,
parent_id INT NOT NULL,
vote_type ENUM('upvote', 'downvote') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
2、用户注册与登录
注册页面 (`register.php`)
php
<?php
require 'db.php'; // 连接数据库
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$email = $_POST['email'];
$stmt = $pdo-prepare(INSERT INTO users (username, password, email) VALUES (?, ?, ?));
$stmt-execute([$username, $password, $email]);
echo 注册成功!请登录。;
}
?
<form method=POST action=register.php
<label for=username用户名:</label
<input type=text name=username required<br
<label for=password密码:</label
<input type=password name=password required<br
<label for=email邮箱:</label
<input type=email name=email required<br
<button type=submit注册</button
</form
登录页面 (`login.php`)
php
<?php
session_start();
require 'db.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $pdo-prepare(SELECT * FROM users WHERE username = ?);
$stmt-execute([$username]);
$user = $stmt-fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header(Location: index.php);
exit;
} else {
echo 用户名或密码错误。;
}
}
?
<form method=POST action=login.php
<label for=username用户名:</label
<input type=text name=username required<br
<label for=password密码:</label
<input type=password name=password required<br
<button type=submit登录</button
</form
3、提问与回答
提问页面 (`ask_question.php`)
php
<?php
session_start();
require 'db.php';
if (!isset($_SESSION['user_id'])) {
header(Location: login.php);
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$title = $_POST['title'];
$content = $_POST['content'];
$user_id = $_SESSION['user_id'];
$stmt = $pdo-prepare(INSERT INTO questions (user_id, title, content) VALUES (?, ?, ?));
$stmt-execute([$user_id, $title, $content]);
header(Location: index.php);
exit;
}
?
<form method=POST action=ask_question.php
<label for=title问题标题:</label
<input type=text name=title required<br
<label for=content问题描述:</label
<textarea name=content required</textarea<br
<button type=submit提交问题</button
</form
显示问题列表 (`index.php`)
php
<?php
require 'db.php';
$stmt = $pdo-query(SELECT q.id, q.title, q.content, u.username FROM questions q JOIN users u ON q.user_id = u.id ORDER BY q.created_at DESC);
$questions = $stmt-fetchAll();
?
<h1问题列表</h1
<ul
<?php foreach ($questions as $question): ?
<li
<h2<?php echo htmlspecialchars($question['title']); ?</h2
<p<?php echo htmlspecialchars($question['content']); ?</p
<p作者: <?php echo htmlspecialchars($question['username']); ?</p
<a href=view_question.php?id=<?php echo $question['id']; ?查看问题</a
</li
<?php endforeach; ?
</ul
查看问题详情 (`view_question.php`)
php
<?php
require 'db.php';
if (isset($_GET['id'])) {
$question_id = $_GET['id'];
$stmt = $pdo-prepare(SELECT q.id, q.title, q.content, u.username FROM questions q JOIN users u ON q.user_id = u.id WHERE q.id = ?);
$stmt-execute([$question_id]);
$question = $stmt-fetch();
if (!$question) {
die(问题不存在。);
}
// 获取该问题的所有答案
$stmt = $pdo-prepare(SELECT a.id, a.content, u.username FROM answers a JOIN users u ON a.user_id = u.id WHERE a.question_id = ?);
$stmt-execute([$question_id]);
$answers = $stmt-fetchAll();
}
?
<h1<?php echo htmlspecialchars($question['title']); ?</h1
<p<?php echo htmlspecialchars($question['content']); ?</p
<p作者: <?php echo htmlspecialchars($question['username']); ?</p
<h2回答列表</h2
<ul
<?php foreach ($answers as $answer): ?
<li
<p<?php echo htmlspecialchars($answer['content']); ?</p
<p作者: <?php echo htmlspecialchars($answer['username']); ?</p
</li
<?php endforeach; ?
</ul
<h2提交回答</h2
<form method=POST action=submit_answer.php
<input type=hidden name=question_id value=<?php echo $question_id; ?
<textarea name=content required</textarea<br
<button type=submit提交回答</button
</form
提交回答 (`submit_answer.php`)
php
<?php
session_start();
require 'db.php';
if (!isset($_SESSION['user_id'])) {
header(Location: login.php);
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$question_id = $_POST['question_id'];
$content = $_POST['content'];
$user_id = $_SESSION['user_id'];
$stmt = $pdo-prepare(INSERT INTO answers (question_id, user_id, content) VALUES (?, ?, ?));
$stmt-execute([$question_id, $user_id, $content]);
header(Location: view_question.php?id=$question_id);
exit;
}
4、点赞功能
点赞处理 (`vote.php`)
php
<?php
session_start();
require 'db.php';
if (!isset($_SESSION['user_id'])) {
header(Location: login.php);
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$parent_type = $_POST['parent_type'];
$parent_id = $_POST['parent_id'];
$vote_type = $_POST['vote_type'];
$user_id = $_SESSION['user_id'];
// 检查是否已经投过票
$stmt = $pdo-prepare(SELECT * FROM votes WHERE user_id = ? AND parent_type = ? AND parent_id = ?);
$stmt-execute([$user_id, $parent_type, $parent_id]);
📣 商家广告 :
👍
0
👎
IP地址: 9.76.104.35
搜索次数: 1
提问时间: 2025-11-06 00:13:34
🛒 域名购买 :
nk.com.hk dk.gs te.biz qz.gs al3.net 191.net.cn jqr.sale jqe.com.cn w-t.cn 778.net.cn
❓️ 热门提问 :
mil.nz域名 高防云防护cdn nec 小主机 游戏新开服务器 如何查询域名的价值 网络服务器维护培训 能免费试用的云服务器 机房安全措施 美国主机 便宜 电子邮件地址怎么申请注册 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
ap.cq.cn odfc.cn drone.js.cn toqx.cn pp.sd.cn ff.yn.cn cnstarway.vip 815.gs jthx.cn txqg.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
青蛙站群系统
平塘县福利院
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。