>백엔드 개발 >PHP 튜토리얼 >PHP는 지식 Q&A 사이트에 물음표 표시 및 수집 기능을 구현합니다.

PHP는 지식 Q&A 사이트에 물음표 표시 및 수집 기능을 구현합니다.

王林
王林원래의
2023-07-02 08:05:131341검색

PHP는 지식 Q&A 사이트에 질문 표시 및 수집 기능을 구현합니다.

인터넷의 급속한 발전과 함께 지식 Q&A 사이트는 사람들이 지식을 얻고 공유하는 중요한 플랫폼이 되었습니다. 이러한 웹사이트에서 사용자는 질문하고, 질문에 답하고, 관련 질문과 답변을 찾아보고 검색하는 등의 작업을 할 수 있습니다. 사용자 경험과 기능적 완성도를 높이기 위해 이슈 마킹과 수집 기능이 필수적인 부분이 되었습니다. 이 기사에서는 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 实现服务器端的标签建议功能,并将结果展示在页面上。

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 파일에서 태그 제안 로직을 구현할 수 있습니다. 다음은 예시 코드입니다.

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

수집 기능에서는 사용자가 관심 있는 질문을 모아 나중에 볼 수 있습니다. 이 기능을 구현하기 위해 별도의 즐겨찾기 테이블을 만들어 사용자가 즐겨찾는 질문을 기록할 수 있습니다. 다음은 간단한 데이터베이스 테이블 구조의 예입니다. 🎜rrreee🎜질문 페이지에서 각 질문에 즐겨찾기 버튼을 제공할 수 있으며, 버튼을 클릭하면 해당 질문의 ID가 처리를 위해 서버 측으로 전송됩니다. 다음은 예시 코드입니다. 🎜rrreee🎜favorite_question.php 파일에서 질문 수집 로직을 구현할 수 있습니다. 다음은 예시 코드입니다. 🎜rrreee🎜본 글에서는 지식 Q&A 사이트에서 PHP를 사용하여 물음표 및 수집 기능을 구현하는 방법을 소개합니다. 코드 예제를 통해 프런트 엔드 입력 제안을 구현하고 즐겨찾는 버튼 기능을 클릭하는 방법을 보여주고 해당 서버 측 처리 로직을 제공합니다. 이러한 기능의 구현은 지식질문답 사이트의 실용성과 사용자 경험을 향상시키고 사용자에게 더 나은 서비스를 제공할 것입니다. 🎜

위 내용은 PHP는 지식 Q&A 사이트에 물음표 표시 및 수집 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.