Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP melaksanakan fungsi penandaan dan pengumpulan dalam laman web soalan dan jawapan pengetahuan.

PHP melaksanakan fungsi penandaan dan pengumpulan dalam laman web soalan dan jawapan pengetahuan.

王林
王林asal
2023-07-02 08:05:131305semak imbas

PHP melaksanakan fungsi penandaan dan pengumpulan dalam laman web Soal Jawab pengetahuan

Dengan perkembangan pesat Internet, laman web Soal Jawab pengetahuan telah menjadi platform penting untuk orang ramai memperoleh dan berkongsi pengetahuan. Di tapak web ini, pengguna boleh bertanya soalan, menjawab soalan, menyemak imbas dan mencari soalan dan jawapan yang berkaitan, dsb. Untuk meningkatkan pengalaman pengguna dan kesempurnaan fungsi, penandaan isu dan fungsi pengumpulan telah menjadi bahagian penting. Artikel ini akan memperkenalkan cara menggunakan bahasa PHP untuk melaksanakan fungsi ini dan menyediakan contoh kod yang sepadan.

Fungsi penandaan soalan membolehkan pengguna melabelkan soalan untuk memudahkan carian dan pengelasan seterusnya. Semasa proses pelaksanaan, kita boleh menggunakan jadual perkaitan teg untuk melaksanakan perhubungan banyak-ke-banyak antara soalan dan teg. Berikut ialah contoh struktur jadual pangkalan data:

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

Dalam halaman soalan, kami boleh menyediakan kotak input yang membolehkan pengguna memasukkan tag dan memberi cadangan penyiapan automatik semasa proses input. Berikut ialah contoh kod untuk pelaksanaan mudah:

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

Dalam kod di atas, kami menggunakan perpustakaan jQuery untuk mendengar peristiwa input papan kekunci kotak input. Selepas setiap input, panggil tag_suggestions.php untuk melaksanakan fungsi cadangan teg sebelah pelayan dan memaparkan hasil pada halaman. 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

Dalam fail tag_suggestions.php, kami boleh melaksanakan logik cadangan teg. Berikut ialah kod contoh:

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

Dalam fungsi pengumpulan, pengguna boleh mengumpulkan soalan yang mereka minati untuk tontonan seterusnya. Untuk mencapai fungsi ini, kami boleh mencipta jadual kegemaran yang berasingan untuk merekodkan soalan kegemaran pengguna. Berikut ialah contoh struktur jadual pangkalan data yang mudah: 🎜rrreee🎜Dalam halaman soalan, kami boleh menyediakan butang kegemaran untuk setiap soalan, dan apabila butang itu diklik, ID soalan akan dihantar ke bahagian pelayan untuk diproses. Berikut ialah kod untuk contoh: 🎜rrreee🎜Dalam fail favorite_question.php, kita boleh melaksanakan logik pengumpulan soalan. Berikut ialah kod untuk contoh: 🎜rrreee🎜Dalam artikel ini, kami memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi penandaan dan pengumpulan dalam tapak web Soal Jawab pengetahuan. Melalui contoh kod, kami menunjukkan cara untuk melaksanakan cadangan input bahagian hadapan dan mengklik fungsi butang kegemaran, dan menyediakan logik pemprosesan bahagian pelayan yang sepadan. Pelaksanaan fungsi ini akan meningkatkan kepraktisan dan pengalaman pengguna laman web soal jawab pengetahuan dan menyediakan perkhidmatan yang lebih baik kepada pengguna. 🎜

Atas ialah kandungan terperinci PHP melaksanakan fungsi penandaan dan pengumpulan dalam laman web soalan dan jawapan pengetahuan.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn