PHP 实现知识问答网站中的问题讨论和评价功能
随着信息时代的到来,知识问答网站越来越受到人们的关注和青睐。这些网站不仅为用户提供了一个互相交流和共享知识的平台,还能让用户通过讨论和评价功能更好地获取有用的信息。本文将介绍如何使用PHP实现知识问答网站中的问题讨论和评价功能。
- 数据库设计
首先,我们需要设计数据库来存储用户提出的问题、回答和评价等数据。下面是一个简单的数据库设计示例:
CREATE TABLE `questions` ( `id` INT(11) UNSIGNED AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TEXT NOT NULL, `user_id` INT(11) UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME, PRIMARY KEY (`id`) ); CREATE TABLE `answers` ( `id` INT(11) UNSIGNED AUTO_INCREMENT, `question_id` INT(11) UNSIGNED NOT NULL, `content` TEXT NOT NULL, `user_id` INT(11) UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME, PRIMARY KEY (`id`) ); CREATE TABLE `ratings` ( `id` INT(11) UNSIGNED AUTO_INCREMENT, `answer_id` INT(11) UNSIGNED NOT NULL, `user_id` INT(11) UNSIGNED NOT NULL, `rating` INT(11) NOT NULL, PRIMARY KEY (`id`) );
其中,
questions表用来存储问题的信息(包括标题、内容、提问者ID、创建时间和更新时间等);answers表用来存储回答的信息(包括问题ID、内容、回答者ID、创建时间和更新时间等);ratings表用来存储回答的评价信息(包括回答ID、评价者ID和评价分数等)。
- 显示问题和回答
接下来,我们需要使用PHP编写代码来显示问题和回答。首先,我们可以创建一个index.php文件,用来显示所有问题列表。代码如下:
<?php
// index.php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_errno) {
die('连接数据库失败');
}
// 获取问题列表
$result = $conn->query("SELECT * FROM questions");
if (!$result) {
die('查询数据失败');
}
// 显示问题列表
while ($row = $result->fetch_assoc()) {
echo '<a href="question.php?id=' . $row['id'] . '">' . $row['title'] . '</a>';
echo '<br>';
}
// 关闭数据库连接
$conn->close();
?>
上述代码首先连接到数据库,并通过查询获取所有问题的数据。接下来,通过循环输出问题列表,并为每个问题创建一个带有问题ID的链接,点击链接后用户将跳转到question.php页面,用来显示问题和回答的详细内容。
然后,我们可以创建一个question.php文件,用来显示问题和回答的详细内容。代码如下:
<?php
// question.php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_errno) {
die('连接数据库失败');
}
// 获取问题ID
$question_id = $_GET['id'];
// 获取问题信息
$result = $conn->query("SELECT * FROM questions WHERE id = $question_id");
if (!$result) {
die('查询数据失败');
}
$question = $result->fetch_assoc();
// 获取回答列表
$result = $conn->query("SELECT * FROM answers WHERE question_id = $question_id");
if (!$result) {
die('查询数据失败');
}
// 显示问题和回答内容
echo '<h1>' . $question['title'] . '</h1>';
echo '<p>' . $question['content'] . '</p>';
while ($row = $result->fetch_assoc()) {
echo '<h2>回答:</h2>';
echo '<p>' . $row['content'] . '</p>';
}
// 关闭数据库连接
$conn->close();
?>
上述代码首先连接到数据库,并根据问题ID获取问题和回答的数据。然后,通过输出HTML来显示问题和回答的内容。其中,问题的标题和内容使用<h1>和<p>标签,回答的内容使用<h2>和<p>标签。
- 添加回答和评价功能
接下来,我们需要添加回答和评价功能。首先,在question.php页面的回答下方添加一个表单,用来让用户输入回答的内容。代码如下:
<h2>我要回答:</h2>
<form action="answer.php" method="POST">
<textarea name="content" rows="5" cols="50"></textarea><br>
<input type="hidden" name="question_id" value="<?php echo $question_id; ?>">
<input type="submit" value="提交回答">
</form>
上述代码创建了一个POST方法的表单,通过textarea标签让用户输入回答的内容。同时,通过隐藏域传递问题ID,以便在后续的处理中能够知道回答对应的问题。
然后,我们创建一个answer.php文件,用来处理用户提交的回答。代码如下:
<?php
// answer.php
// 获取回答数据
$question_id = $_POST['question_id'];
$content = $_POST['content'];
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_errno) {
die('连接数据库失败');
}
// 插入回答数据
$stmt = $conn->prepare("INSERT INTO answers (question_id, content) VALUES (?, ?)");
$stmt->bind_param("is", $question_id, $content);
$result = $stmt->execute();
if (!$result) {
die('插入数据失败');
}
// 关闭数据库连接
$conn->close();
// 回到问题页面
header("Location: question.php?id=$question_id");
?>
上述代码首先获取用户提交的回答数据,并连接到数据库。然后,通过prepare()方法和bind_param()方法来绑定数据并插入到数据库中。最后,通过header()函数将用户重定向回到问题页面。
同样地,我们可以创建一个rate.php文件,用来处理用户对回答的评价。代码如下:
<?php
// rate.php
// 获取评价数据
$answer_id = $_GET['answer_id'];
$rating = $_GET['rating'];
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_errno) {
die('连接数据库失败');
}
// 更新评价数据
$stmt = $conn->prepare("INSERT INTO ratings (answer_id, rating) VALUES (?, ?)");
$stmt->bind_param("ii", $answer_id, $rating);
$result = $stmt->execute();
if (!$result) {
die('更新数据失败');
}
// 关闭数据库连接
$conn->close();
// 回到问题页面
$question_id = $_GET['question_id'];
header("Location: question.php?id=$question_id");
?>
上述代码首先获取用户提交的评价数据,并连接到数据库。然后,通过prepare()方法和bind_param()方法来绑定数据并更新到数据库中。最后,通过header()函数将用户重定向回到问题页面。
通过以上的步骤,我们成功实现了知识问答网站中的问题讨论和评价功能。用户不仅可以提出问题和回答问题,还可以对回答进行评价。这样的功能不仅可以提高信息的准确性和可信度,还能让用户更好地获取有用的知识和信息。
需要注意的是,以上示例中的代码只是简单的示例,实际应用中还需要进行数据校验、用户认证和权限控制等处理,以确保系统的安全和可靠性。
参考资料:
- PHP官方文档:https://www.php.net/docs.php
- MySQL官方网站:https://www.mysql.com/
希望本文能对你有所帮助,祝你在实现知识问答网站的过程中取得成功!
以上就是PHP 实现知识问答网站中的问题讨论和评价功能。的详细内容,更多请关注php中文网其它相关文章!