2023-07-02

PHP 实现知识问答网站中的问题标记和收藏功能。

PHP 实现知识问答网站中的问题标记和收藏功能

随着互联网的快速发展,知识问答网站成为了人们获取和分享知识的重要平台。在这些网站上,用户可以提出问题、回答问题、浏览和搜索相关问题和答案等。为了提高用户体验和功能完整性,问题标记和收藏功能成为了不可或缺的一部分。本文将介绍如何使用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实现知识问答网站中的问题标记和收藏功能。通过代码示例,我们展示了如何实现前端的输入建议和点击收藏按钮的功能,并提供了相应的服务器端处理逻辑。这些功能的实现将增强知识问答网站的实用性和用户体验,为用户提供更好的服务。

以上就是PHP 实现知识问答网站中的问题标记和收藏功能。的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/571290.html

发表回复

Your email address will not be published. Required fields are marked *