Maison >développement back-end >tutoriel php >PHP implémente les fonctions de marquage des questions et de collecte dans le site Web de questions et réponses de connaissances.

PHP implémente les fonctions de marquage des questions et de collecte dans le site Web de questions et réponses de connaissances.

王林
王林original
2023-07-02 08:05:131338parcourir

PHP implémente des fonctions de marquage et de collecte de questions dans les sites Web de questions-réponses de connaissances

Avec le développement rapide d'Internet, les sites Web de questions-réponses de connaissances sont devenus une plate-forme importante permettant aux utilisateurs d'obtenir et de partager des connaissances. Sur ces sites Web, les utilisateurs peuvent poser des questions, répondre à des questions, parcourir et rechercher des questions et réponses connexes, etc. Afin d'améliorer l'expérience utilisateur et l'exhaustivité fonctionnelle, les fonctions de marquage et de collecte des problèmes sont devenues partie intégrante. Cet article expliquera comment utiliser le langage PHP pour implémenter ces fonctions et fournira des exemples de code correspondants.

La fonction de marquage des questions permet aux utilisateurs d'étiqueter les questions pour faciliter la recherche et la classification ultérieures. Pendant le processus d'implémentation, nous pouvons utiliser la table d'association de balises pour implémenter la relation plusieurs-à-plusieurs entre les questions et les balises. Voici un exemple de structure de table de base de données :

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

Dans la page de questions, nous pouvons fournir une zone de saisie qui permet à l'utilisateur de saisir des balises et de donner des suggestions de complétion automatique pendant le processus de saisie. Voici un exemple de code pour une implémentation simple :

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

Dans le code ci-dessus, nous utilisons la bibliothèque jQuery pour écouter les événements de saisie au clavier de la zone de saisie. Après chaque saisie, appelez tag_suggestions.php pour implémenter la fonction de suggestion de balise côté serveur et afficher les résultats sur la page. 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

Dans le fichier tag_suggestions.php, nous pouvons implémenter la logique des suggestions de balises. Voici un exemple de code :

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

Dans la fonction de collecte, les utilisateurs peuvent collecter les questions qui les intéressent pour une consultation ultérieure. Afin de réaliser cette fonction, nous pouvons créer un tableau favoris séparé pour enregistrer les questions préférées de l'utilisateur. Voici un exemple simple de structure de table de base de données : 🎜rrreee🎜Dans la page de questions, nous pouvons fournir un bouton favori pour chaque question, et lorsque vous cliquez sur le bouton, l'ID de la question sera envoyé au côté serveur pour traitement. Voici le code d'un exemple : 🎜rrreee🎜Dans le fichier favorite_question.php, nous pouvons implémenter la logique de collecte de questions. Voici le code d'un exemple : 🎜rrreee🎜Dans cet article, nous expliquons comment utiliser PHP pour implémenter des fonctions de marquage et de collecte de questions dans un site Web de questions-réponses de connaissances. À travers des exemples de code, nous montrons comment implémenter les suggestions de saisie frontales et cliquez sur les fonctions des boutons favoris, et fournissons la logique de traitement correspondante côté serveur. La mise en œuvre de ces fonctions améliorera l'aspect pratique et l'expérience utilisateur du site Web de questions et réponses sur les connaissances et fournira aux utilisateurs de meilleurs services. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn