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