>백엔드 개발 >PHP 튜토리얼 >PHP는 지식질문답변 웹사이트에서 질문답변의 투표 및 채택 기능을 구현합니다.

PHP는 지식질문답변 웹사이트에서 질문답변의 투표 및 채택 기능을 구현합니다.

WBOY
WBOY원래의
2023-07-01 21:19:461035검색

PHP는 지식질문답변 사이트에서 질문답변의 투표 및 채택 기능을 구현합니다.

인터넷의 발달과 함께 지식질문답 사이트는 점점 더 많은 이용자를 확보하고 있으며, 사람들이 지식을 얻고 문제를 해결하는 중요한 수단이 되었습니다. 이러한 질문 및 답변 웹 사이트에서 질문 답변의 투표 및 채택 기능은 사용자가 최상의 답변을 더 잘 선택하도록 돕고 질문의 신뢰성과 답변자의 평판을 높일 수 있습니다.

이 글에서는 PHP를 사용하여 질문 답변의 투표 및 채택 기능을 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다.

먼저, 질문과 답변 정보를 저장할 데이터베이스가 필요합니다. 데이터베이스에 두 개의 테이블이 있다고 가정합니다. 하나는 질문 정보를 저장하는 데 사용되는 질문이고 다른 하나는 답변 정보를 저장하는 데 사용되는 답변입니다. 질문 테이블의 구조는 다음과 같습니다.

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

답변 테이블의 구조는 다음과 같습니다.

CREATE TABLE answers (
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  question_id INT(11) NOT NULL,
  content TEXT NOT NULL,
  is_accepted TINYINT(1) DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

다음으로, 질문 답변에 대한 투표 기능을 구현해야 합니다. 사용자는 질문 아래의 답변을 좋아하거나 싫어하여 답변에 대한 승인 또는 거부를 표현할 수 있습니다. 답변 테이블에 찬성 및 반대 투표라는 두 개의 새로운 필드를 추가하여 답변에 대한 좋아요 및 싫어요 수를 저장할 수 있습니다.

ALTER TABLE answers ADD COLUMN upvote INT(11) DEFAULT 0;
ALTER TABLE answers ADD COLUMN downvote INT(11) DEFAULT 0;

질문 답변 목록에서 사용자가 버튼을 클릭하면 투표 유형(좋아요 또는 싫어요)과 답변 ID를 Ajax를 통해 서버로 보낼 수 있습니다. 요청한 다음 데이터베이스의 해당 답변에 대한 좋아요 또는 싫어요 수를 업데이트합니다. 다음은 간단한 코드 예입니다.

<!-- question.php -->
<div>
  <h3>问题标题</h3>
  <p>问题内容</p>
</div>

<div>
  <h4>答案列表</h4>
  <?php
  // 从数据库中获取问题的答案列表
  $answers = get_answers($question_id);
  foreach ($answers as $answer) {
    echo '<div>';
    echo '<p>' . $answer['content'] . '</p>';
    echo '<p>点赞数:' . $answer['upvote'] . '</p>';
    echo '<p>点踩数:' . $answer['downvote'] . '</p>';
    echo '<button onclick="vote(' . $answer['id'] . ', 'upvote')">点赞</button>';
    echo '<button onclick="vote(' . $answer['id'] . ', 'downvote')">点踩</button>';
    echo '</div>';
  }
  ?>
</div>

<script>
function vote(answerId, type) {
  // 发起Ajax请求
  $.ajax({
    url: 'vote.php',
    method: 'POST',
    data: { answer_id: answerId, type: type },
    success: function(response) {
      // 更新点赞或点踩数
      if (type === 'upvote') {
        $('#' + answerId + ' .upvote').text(parseInt($('#' + answerId + ' .upvote').text()) + 1);
      } else if (type === 'downvote') {
        $('#' + answerId + ' .downvote').text(parseInt($('#' + answerId + ' .downvote').text()) + 1);
      }
    }
  });
}
</script>

vote.php 파일에서 사용자가 보낸 투표 유형 및 답변 ID를 기반으로 데이터베이스의 해당 답변에 대한 좋아요 또는 싫어요 수를 업데이트할 수 있습니다. 간단한 코드 예시는 다음과 같습니다.

<?php
// vote.php

// 获取答案ID和投票类型
$answerId = $_POST['answer_id'];
$type = $_POST['type'];

// 更新答案的点赞或点踩数
if ($type === 'upvote') {
  $sql = "UPDATE answers SET upvote = upvote + 1 WHERE id = $answerId";
} else if ($type === 'downvote') {
  $sql = "UPDATE answers SET downvote = downvote + 1 WHERE id = $answerId";
}

// 执行更新操作
// ...

// 返回响应
// ...
?>

위는 질문 답변에 대한 투표 기능의 코드 예시입니다. 다음으로 질문 답변 수락 기능의 구현 방법을 소개하겠습니다.

질문 답변 채택 기능은 질문자가 질문에 대한 솔루션으로 가장 좋은 답변을 선택하고 채택으로 표시할 수 있음을 의미합니다. 답변 테이블에 새 필드 is_accepted를 추가하여 답변이 수락되었는지 여부를 나타낼 수 있습니다.

ALTER TABLE answers ADD COLUMN is_accepted TINYINT(1) DEFAULT 0;

질문 답변 목록에서 질문자가 버튼을 클릭하면 Ajax 요청을 통해 답변 ID를 서버로 전송한 후 해당 답변의 is_accepted 필드를 업데이트할 수 있습니다. 데이터베이스에서. 다음은 간단한 코드 예시입니다.

<!-- question.php -->
<div>
  <h3>问题标题</h3>
  <p>问题内容</p>
</div>

<div>
  <h4>答案列表</h4>
  <?php
  // 从数据库中获取问题的答案列表
  $answers = get_answers($question_id);
  foreach ($answers as $answer) {
    echo '<div>';
    echo '<p>' . $answer['content'] . '</p>';
    echo '<p>点赞数:' . $answer['upvote'] . '</p>';
    echo '<p>点踩数:' . $answer['downvote'] . '</p>';
    echo '<button onclick="vote(' . $answer['id'] . ', 'upvote')">点赞</button>';
    echo '<button onclick="vote(' . $answer['id'] . ', 'downvote')">点踩</button>';
    if ($question['user_id'] === $_SESSION['user_id']) { // 如果是提问者
      echo '<button onclick="accept(' . $answer['id'] . ')">采纳</button>';
    }
    echo '</div>';
  }
  ?>
</div>

<script>
function accept(answerId) {
  // 发起Ajax请求
  $.ajax({
    url: 'accept.php',
    method: 'POST',
    data: { answer_id: answerId },
    success: function(response) {
      // 更新答案的采纳状态
      $('#' + answerId).addClass('accepted');
    }
  });
}
</script>

accept.php 파일에서 사용자가 보낸 답변 ID를 기반으로 데이터베이스에서 해당 답변의 is_accepted 필드를 업데이트할 수 있습니다. 다음은 간단한 코드 예시입니다.

<?php
// accept.php

// 获取答案ID
$answerId = $_POST['answer_id'];

// 更新答案的采纳状态
$sql = "UPDATE answers SET is_accepted = 1 WHERE id = $answerId";

// 执行更新操作
// ...

// 返回响应
// ...
?>

위는 질문 답변 수락 기능의 코드 예시입니다. 이러한 코드 예제를 통해 지식 질문 및 답변 웹 사이트에서 질문 답변의 투표 및 채택 기능을 구현하여 사용자 경험과 정보 품질을 향상시킬 수 있습니다. 물론 위의 내용은 단순한 예시에 불과하며, 실제 적용 시에는 좀 더 자세한 내용과 보안이 고려되어야 할 것이다. 이 기사가 도움이 되기를 바랍니다!

위 내용은 PHP는 지식질문답변 웹사이트에서 질문답변의 투표 및 채택 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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