ホームページ  >  記事  >  バックエンド開発  >  PHP は、ナレッジ質疑応答 Web サイトにおける質問の回答の投票および採用機能を実装します。

PHP は、ナレッジ質疑応答 Web サイトにおける質問の回答の投票および採用機能を実装します。

WBOY
WBOYオリジナル
2023-07-01 21:19:46967ブラウズ

PHP は、ナレッジ質疑応答 Web サイトの質問回答の投票および採用機能を実装します。

インターネットの発展に伴い、知識に関する質問と回答の Web サイトはますます多くのユーザーを獲得し、人々が知識を入手して問題を解決するための重要な手段となっています。これらの知識に関する質問と回答の Web サイトでは、質問の回答の投票および採用機能が非常に重要であり、ユーザーが最適な回答をより適切に選択し、質問の信頼性と回答者の評判を向上させるのに役立ちます。

この記事では、PHP を使用して質問回答の投票機能と採用機能を実装する方法を紹介し、対応するコード例を示します。

まず、質問と回答の情報を保存するデータベースが必要です。データベースに 2 つのテーブルがあり、1 つは質問情報を保存するために使用される質問であり、もう 1 つは回答情報を保存するために使用される回答であるとします。質問テーブルの構造は次のとおりです。

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
);

次に、質問の回答に対する投票機能を実装する必要があります。ユーザーは、質問の下の回答を好きか嫌いかを選択して、回答に対する承認または不承認を表明できます。回答テーブルに 2 つの新しいフィールド (賛成票と反対票) を追加して、回答に対するいいね数と嫌い数を保存できます。

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

質問回答リストでは、各回答に投票ボタンを追加できます。ユーザーがボタンをクリックすると、投票の種類 (好きか嫌いか) と回答を Ajax 経由でサーバーに送信できます。 request.ID を取得し、データベース内の対応する回答のいいね数または嫌い数を更新します。以下は簡単なコード例です:

<!-- 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";

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

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

上記は、質問に対する回答の受け入れ関数のコード例です。これらのコード例を通じて、ナレッジ質疑応答 Web サイトに質問の回答の投票および採用機能を実装し、ユーザー エクスペリエンスと情報の品質を向上させることができます。もちろん、上記は単なる例であり、実際のアプリケーションではさらに詳細な点やセキュリティを考慮する必要があります。この記事がお役に立てば幸いです!

以上がPHP は、ナレッジ質疑応答 Web サイトにおける質問の回答の投票および採用機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。