ホームページ  >  記事  >  バックエンド開発  >  PHP は、ナレッジ Q&A Web サイトに質問マークとコレクション機能を実装します。

PHP は、ナレッジ Q&A Web サイトに質問マークとコレクション機能を実装します。

王林
王林オリジナル
2023-07-02 08:05:131299ブラウズ

PHP はナレッジ Q&A ウェブサイトの質問マークと収集機能を実現します。

インターネットの急速な発展に伴い、ナレッジ Q&A ウェブサイトは人々が知識を取得し、共有するための重要なプラットフォームになりました。これらの Web サイトでは、ユーザーは質問したり、質問に回答したり、関連する質問と回答を閲覧したり、検索したりすることができます。ユーザーエクスペリエンスと機能の完全性を向上させるために、問題のマーキングと収集機能が不可欠な部分になりました。この記事では、PHP 言語を使用してこれらの関数を実装する方法と、対応するコード例を紹介します。

質問のタグ付け機能を使用すると、ユーザーは質問にラベルを付けて、その後の検索と分類を容易にすることができます。実装プロセス中に、タグ関連付けテーブルを使用して、質問とタグの間の多対多の関係を実装できます。以下はデータベース テーブル構造の例です。

CREATE TABLE `questions` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL
);

CREATE TABLE `tags` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(50) NOT NULL
);

CREATE TABLE `question_tags` (
  `question_id` int(11) UNSIGNED,
  `tag_id` int(11) UNSIGNED,
  FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`tag_id`) REFERENCES `tags`(`id`) ON DELETE CASCADE
);

質問ページでは、ユーザーがタグを入力し、入力プロセス中に自動補完の候補を提供できる入力ボックスを提供できます。以下は、単純な実装のサンプル コードです。

<label>标签:</label>
<input type="text" id="tag-input" name="tags" autocomplete="off">
<div id="tag-suggestions"></div>

<script>
    $(document).ready(function() {
        $('#tag-input').on('keyup', function() {
            var keyword = $(this).val();
            $('#tag-suggestions').empty();
            
            if (keyword.length > 0) {
                $.ajax({
                    url: 'tag_suggestions.php',
                    data: {keyword: keyword},
                    dataType: 'json',
                    success: function(response) {
                        if (response.length > 0) {
                            $.each(response, function(index, value) {
                                $('#tag-suggestions').append('<div class="tag-suggestion">' + value.name + '</div>');
                            });
                        }
                    }
                });
            }
        });
        
        $(document).on('click', '.tag-suggestion', function() {
            var tagName = $(this).text();
            var tagInput = $('#tag-input');
            var currentTags = tagInput.val().split(',');
            
            if ($.inArray(tagName, currentTags) === -1) {
                tagInput.val(currentTags.join(',') + ',' + tagName);
            }
            
            $('#tag-suggestions').empty();
        });
    });
</script>

上記のコードでは、jQuery ライブラリを使用して、入力ボックスのキーボード入力イベントをリッスンします。各入力後、tag_suggestions.php を呼び出してサーバー側のタグ提案機能を実装し、結果をページに表示します。

tag_suggestions.php ファイルでは、タグ提案のロジックを実装できます。コード例を次に示します。

<?php
$keyword = $_GET['keyword'];

// 模拟从数据库中查询标签建议
$tags = array();
if ($keyword === 'php') {
    $tags[] = array('name' => 'PHP');
    $tags[] = array('name' => 'PHP框架');
} elseif ($keyword === 'javascript') {
    $tags[] = array('name' => 'JavaScript');
    $tags[] = array('name' => 'JavaScript库');
}

echo json_encode($tags);
?>

コレクション機能では、ユーザーは後で閲覧するために興味のある質問を収集できます。この機能を実装するには、ユーザーのお気に入りの質問を記録する別の favorites テーブルを作成します。以下は簡単なデータベース テーブル構造の例です:

CREATE TABLE `favorites` (
  `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `user_id` int(11) UNSIGNED,
  `question_id` int(11) UNSIGNED,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE CASCADE
);

質問ページでは、質問ごとにお気に入りボタンを提供できます。ボタンをクリックすると、質問 ID が処理のためにサーバーに送信されます。コードの例を次に示します。

<button class="favorite-button" data-question-id="1">收藏</button>

<script>
    $(document).ready(function() {
        $('.favorite-button').on('click', function() {
            var questionId = $(this).data('question-id');
            
            $.ajax({
                url: 'favorite_question.php',
                data: {questionId: questionId},
                success: function(response) {
                    alert(response);
                }
            });
        });
    });
</script>

favorite_question.php ファイルでは、質問コレクションのロジックを実装できます。例のコードは次のとおりです。

<?php
$questionId = $_GET['questionId'];

// 假设当前用户已经登录,获取当前用户的ID
$userId = 1;

// 将问题ID和用户ID插入到favorites表中
$connection = new mysqli('localhost', 'username', 'password', 'database');
$statement = $connection->prepare('INSERT INTO favorites (user_id, question_id) VALUES (?, ?)');
$statement->bind_param('ii', $userId, $questionId);
$statement->execute();

if ($statement->affected_rows > 0) {
    echo '问题已收藏';
} else {
    echo '收藏失败';
}

$statement->close();
$connection->close();
?>

この記事では、PHP を使用してナレッジ Q&A Web サイトに質問マークとコレクション機能を実装する方法を紹介します。コード例を通じて、フロントエンドの入力候補を実装し、お気に入りボタンの機能をクリックする方法と、対応するサーバー側の処理ロジックを提供する方法を示します。これらの機能の実装により、知識問答サイトの実用性とユーザーエクスペリエンスが向上し、より良いサービスをユーザーに提供できるようになります。

以上がPHP は、ナレッジ Q&A Web サイトに質問マークとコレクション機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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