>  기사  >  백엔드 개발  >  PHP를 사용하여 지식 질문 및 답변 웹사이트에서 질문 답변 수락 및 추천 기능을 개발합니다.

PHP를 사용하여 지식 질문 및 답변 웹사이트에서 질문 답변 수락 및 추천 기능을 개발합니다.

PHPz
PHPz원래의
2023-07-02 10:52:581048검색

지식Q&A사이트에서 PHP를 사용하여 질문답변 수용 및 추천 기능 개발

지식Q&A사이트에서는 사용자가 질문하고 다른 사용자가 답변을 제공합니다. 복수의 답변 중 하나 이상이 질문자나 다른 사용자에게 베스트 답변으로 인식되는 경우가 종종 있습니다. 따라서 질문에 대한 답변을 더 잘 표시하고 관리하기 위해 이 기사에서는 PHP를 사용하여 질문 답변의 채택 및 추천 기능을 개발하는 방법을 소개합니다.

  1. 데이터베이스 디자인

먼저 질문과 답변에 대한 정보를 저장할 데이터베이스를 디자인해야 합니다. 여기서는 세 개의 테이블을 만듭니다.

  • questions 테이블은 질문 ID, 제목, 내용, 질문자 ID, 질문 시간 등과 같은 질문 정보를 저장합니다. questions 表存储问题信息,例如问题 ID、标题、内容、提问者 ID、提问时间等。
  • answers 表存储答案信息,例如答案 ID、问题 ID、回答内容、回答者 ID、回答时间等。
  • accepted_answers 表用于存储被采纳的答案信息,其中包含问题 ID、被采纳答案 ID。

以下是数据库结构的示例:

CREATE TABLE questions (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255),
    content TEXT,
    owner_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE answers (
    id INT PRIMARY KEY AUTO_INCREMENT,
    question_id INT,
    content TEXT,
    owner_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE accepted_answers (
    question_id INT PRIMARY KEY,
    answer_id INT
);
  1. 问题页面开发

在问题详情页面上,我们需要显示问题的标题、内容以及相关答案。对于当前问题,我们还需要显示被采纳的答案(如果有的话)。

首先,我们要获取问题的信息并显示在页面上。我们可以使用以下代码示例:

<?php
// 获取问题 ID
$questionId = $_GET['id'];

// 获取问题信息
$questionQuery = "SELECT * FROM questions WHERE id = :id";
$questionStmt = $pdo->prepare($questionQuery);
$questionStmt->bindParam(':id', $questionId, PDO::PARAM_INT);
$questionStmt->execute();
$question = $questionStmt->fetch(PDO::FETCH_ASSOC);

// 显示问题标题和内容
echo "<h1>" . $question['title'] . "</h1>";
echo "<p>" . $question['content'] . "</p>";

// 获取问题的回答信息
$answersQuery = "SELECT * FROM answers WHERE question_id = :question_id";
$answersStmt = $pdo->prepare($answersQuery);
$answersStmt->bindParam(':question_id', $questionId, PDO::PARAM_INT);
$answersStmt->execute();
$answers = $answersStmt->fetchAll(PDO::FETCH_ASSOC);

// 显示回答列表
foreach ($answers as $answer) {
    echo "<div>";
    echo "<p>" . $answer['content'] . "</p>";

    // 检查答案是否被采纳
    if ($answer['id'] === $question['accepted_answer_id']) {
        echo "<span>已采纳</span>";
    } else {
        // 显示采纳按钮
        echo "<a href='accept-answer.php?question=" . $questionId . "&answer=" . $answer['id'] . "'>采纳该答案</a>";
    }

    echo "</div>";
}
?>

以上代码中,我们首先获取问题的信息并展示在页面上。然后,获取问题相关的答案并逐个显示。对于每个答案,我们检查其是否被采纳。如被采纳,则显示“已采纳”标志;反之,则显示一个标签,点击该标签将调用 accept-answer.php 进行答案的采纳。

  1. 采纳答案的处理

accept-answer.php 文件中,我们需要处理答案的采纳请求,并更新 accepted_answers

답변 테이블은 답변 ID, 질문 ID, 답변 내용, 답변자 ID, 답변 시간 등과 같은 답변 정보를 저장합니다.

accepted_answers 테이블은 질문 ID와 수락된 답변 ID를 포함하는 수락된 답변 정보를 저장하는 데 사용됩니다.

다음은 데이터베이스 구조의 예입니다.

<?php
// 获取问题 ID 和答案 ID
$questionId = $_GET['question'];
$answerId = $_GET['answer'];

// 将答案 ID 更新为被采纳
$acceptAnswerQuery = "UPDATE accepted_answers SET answer_id = :answer_id WHERE question_id = :question_id";
$acceptAnswerStmt = $pdo->prepare($acceptAnswerQuery);
$acceptAnswerStmt->bindParam(':answer_id', $answerId, PDO::PARAM_INT);
$acceptAnswerStmt->bindParam(':question_id', $questionId, PDO::PARAM_INT);
$acceptAnswerStmt->execute();

// 返回问题详情页
header("Location: question.php?id=" . $questionId);
?>

    질문 페이지 개발🎜🎜🎜질문 세부정보 페이지에는 제목, 내용 및 관련 답변을 표시해야 합니다. 질문의. 현재 질문에 대해서는 허용된 답변(있는 경우)도 표시해야 합니다. 🎜🎜먼저 문제 정보를 가져와서 페이지에 표시해야 합니다. 다음 코드 예제를 사용할 수 있습니다. 🎜rrreee🎜위 코드에서는 먼저 문제 정보를 가져와서 페이지에 표시합니다. 그런 다음, 질문과 관련된 답변을 얻고 하나씩 표시합니다. 각 답변에 대해 승인 여부를 확인합니다. 수락되면 "수락됨" 표시가 표시되고, 그렇지 않으면 레이블을 클릭하면 답변을 수락하기 위해 accept-answer.php가 호출됩니다. 🎜
      🎜수락된 답변 처리🎜🎜🎜accept-answer.php 파일에서 답변 수락 요청을 처리하고 accepted_answers를 업데이트해야 합니다. 테이블. 🎜🎜다음은 수락된 답변 요청을 처리하는 코드 예제입니다. 🎜rrreee🎜위 코드에서는 먼저 질문과 답변의 ID를 가져옵니다. 그런 다음 SQL 문을 실행하여 응답 ID를 허용된 답변으로 업데이트합니다. 마지막으로 문제 세부 정보 페이지로 리디렉션하고 페이지를 새로 고쳐 최신 채택 상태를 표시합니다. 🎜🎜위의 과정을 거쳐 지식질문답 사이트에서 질문에 대한 답변을 채택하고 추천하는 기능을 성공적으로 구현하였습니다. 사용자는 질문 세부정보 페이지에서 자신이 승인한 답변을 채택할 수 있으며, 이 기능을 통해 질문과 답변의 품질을 향상시킬 수 있습니다. 이를 통해 사용자는 지식을 더 잘 포착하고 공유할 수 있습니다. 🎜

위 내용은 PHP를 사용하여 지식 질문 및 답변 웹사이트에서 질문 답변 수락 및 추천 기능을 개발합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.