>  기사  >  백엔드 개발  >  PHP를 사용하여 간단한 온라인 질문 및 답변 시스템을 개발하는 방법

PHP를 사용하여 간단한 온라인 질문 및 답변 시스템을 개발하는 방법

WBOY
WBOY원래의
2023-09-21 16:28:49788검색

PHP를 사용하여 간단한 온라인 질문 및 답변 시스템을 개발하는 방법

PHP를 사용하여 간단한 온라인 질문 및 답변 시스템을 개발하는 방법은 무엇입니까?

인터넷 시대에 Q&A 커뮤니티는 사람들이 다양한 지식을 얻고 문제를 해결하는 일반적인 수단이 되었습니다. 많은 웹사이트에서는 사용자가 질문을 하고 다른 사용자로부터 답변을 얻을 수 있는 Q&A 기능을 제공합니다. 이 기사에서는 PHP를 사용하여 간단한 온라인 질문 및 답변 시스템을 개발하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

먼저, 질문과 답변을 저장할 데이터베이스를 만들어야 합니다. 이는 MySQL 또는 기타 관계형 데이터베이스를 사용하여 달성할 수 있습니다. 다음은 질문 테이블과 답변 테이블을 생성하는 SQL 문의 예입니다.

CREATE TABLE questions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE answers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_id INT NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (question_id) REFERENCES questions(id)
);

다음으로 질문과 답변의 추가, 삭제, 수정, 확인을 처리하는 PHP 파일을 만들어야 합니다. 다음은 간단한 샘플 코드입니다.

<?php
// 连接数据库
$host = 'localhost';
$db = 'question_answer';
$user = 'root';
$password = 'password';
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $password);

// 添加问题
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['title']) && isset($_POST['content'])) {
    $title = $_POST['title'];
    $content = $_POST['content'];

    $sql = "INSERT INTO questions (title, content) VALUES (?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$title, $content]);
    $questionId = $conn->lastInsertId();

    // 返回问题ID
    echo json_encode(['questionId' => $questionId]);
    exit;
}

// 获取问题和答案
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['questionId'])) {
    $questionId = $_GET['questionId'];

    // 获取问题
    $sql = "SELECT * FROM questions WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$questionId]);
    $question = $stmt->fetch(PDO::FETCH_ASSOC);

    // 获取答案
    $sql = "SELECT * FROM answers WHERE question_id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$questionId]);
    $answers = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 返回问题和答案
    echo json_encode(['question' => $question, 'answers' => $answers]);
    exit;
}

// 添加答案
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['questionId']) && isset($_POST['content'])) {
    $questionId = $_POST['questionId'];
    $content = $_POST['content'];

    $sql = "INSERT INTO answers (question_id, content) VALUES (?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$questionId, $content]);

    // 返回成功
    echo json_encode(['success' => true]);
    exit;
}

// 删除问题
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['deleteQuestionId'])) {
    $questionId = $_POST['deleteQuestionId'];

    // 删除问题
    $sql = "DELETE FROM questions WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$questionId]);

    // 删除相关答案
    $sql = "DELETE FROM answers WHERE question_id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$questionId]);

    // 返回成功
    echo json_encode(['success' => true]);
    exit;
}
?>

위 코드에서는 PDO를 사용하여 데이터베이스에 연결하고 준비된 문을 사용하여 SQL 주입 공격을 방지합니다.

다음으로 질문과 답변을 표시하는 프런트엔드 페이지를 만들고 질문을 추가하고 삭제하는 기능을 제공할 수 있습니다. 다음은 간단한 프런트 엔드 페이지 예입니다.

<!DOCTYPE html>
<html>
<head>
    <title>在线问答系统</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
    <h1>在线问答系统</h1>

    <!-- 添加问题表单 -->
    <form id="addQuestionForm">
        <input type="text" name="title" placeholder="问题标题" required>
        <textarea name="content" placeholder="问题内容" required></textarea>
        <button type="submit">添加问题</button>
    </form>

    <!-- 问题列表 -->
    <ul id="questionList"></ul>

    <script>
        // 添加问题
        $('#addQuestionForm').submit(function(e) {
            e.preventDefault();

            $.post('qa.php', $(this).serialize(), function(response) {
                // 更新问题列表
                fetchQuestionList();
                // 清空表单
                $('#addQuestionForm')[0].reset();
            }, 'json');
        });

        // 获取问题列表
        function fetchQuestionList() {
            $.get('qa.php', function(response) {
                var questionList = '';
                for (var i = 0; i < response.length; i++) {
                    var question = response[i];
                    var questionItem = '<li>'
                        + '<h3>' + question.title + '</h3>'
                        + '<p>' + question.content + '</p>'
                        + '<button onclick="deleteQuestion(' + question.id + ')">删除</button>'
                        + '</li>';

                    questionList += questionItem;
                }

                $('#questionList').html(questionList);
            }, 'json');
        }

        // 删除问题
        function deleteQuestion(questionId) {
            if (confirm('确定要删除该问题及相关答案吗?')) {
                $.post('qa.php', { deleteQuestionId: questionId }, function(response) {
                    fetchQuestionList();
                }, 'json');
            }
        }

        // 页面加载时获取问题列表
        $(function() {
            fetchQuestionList();
        });
    </script>
</body>
</html>

위 코드에서는 jQuery를 사용하여 AJAX 요청을 보내 서버와 통신하고 DOM 작업을 사용하여 페이지 콘텐츠를 동적으로 업데이트합니다.

요약하자면, 위의 PHP 및 HTML 코드 예제를 통해 간단한 온라인 질문 및 답변 시스템을 구현할 수 있습니다. 물론 이것은 단지 기본적인 예일 뿐이며, 실제 질의응답 시스템에서는 더 많은 기능적, 보안적 문제도 고려해야 합니다. 이 글이 여러분이 PHP 개발을 시작하는 데 도움이 되고, 더욱 완전한 온라인 질문과 답변 시스템을 구축하는 데 영감을 주기를 바랍니다.

위 내용은 PHP를 사용하여 간단한 온라인 질문 및 답변 시스템을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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