>백엔드 개발 >PHP 튜토리얼 >온라인 답변에서 시험지 가져오기 및 내보내기 기능을 구현하는 방법

온라인 답변에서 시험지 가져오기 및 내보내기 기능을 구현하는 방법

WBOY
WBOY원래의
2023-09-24 15:27:162019검색

온라인 답변에서 시험지 가져오기 및 내보내기 기능을 구현하는 방법

온라인 응답에서 시험지 가져오기 및 내보내기 기능을 구현하려면 특정 코드 예제가 필요합니다.

기술이 발전함에 따라 온라인 응답 시스템은 학생과 교사의 선호도가 높아지고 교육에서 중요한 역할을 합니다. 온라인 질의 응답 시스템은 학생들의 학습 열정을 향상시킬 뿐만 아니라 교사가 효율적인 수정을 할 수 있도록 해줍니다. 그러나 좋은 온라인 응답 시스템은 시스템의 유연성과 편의성을 향상시키기 위해 시험지를 가져오고 내보내는 기능이 있어야 합니다. 이 글에서는 온라인 응답 시스템에서 시험지 가져오기 및 내보내기 기능을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

1. 시험지 가져오기 기능 구현

시험지 가져오기 기능을 구현하기 전에 먼저 시험지의 데이터 구조를 명확히 해야 합니다. 시험지는 일반적으로 시험지 제목, 질문 목록 및 답변 목록을 포함합니다. 질문 목록에는 여러 질문이 포함되어 있으며 각 질문에는 질문 유형, 질문 내용 및 옵션 목록이 있습니다. 각 질문에 대한 답변은 답변 목록에 포함되어 있습니다. 데이터베이스에서는 시험지 테이블, 질문 테이블, 답안 테이블의 세 가지 테이블을 사용하여 시험지의 데이터 구조를 나타낼 수 있습니다.

  1. 시험지 테이블 만들기

시험지 정보를 저장할 paper라는 테이블을 만듭니다. 테이블 구조는 다음과 같습니다.

CREATE TABLE paper (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL
);

  1. 질문 테이블 생성

질문 정보를 저장하기 위해 질문이라는 테이블을 생성합니다. 테이블 구조는 다음과 같습니다.

CREATE TABLE 질문 (
id INT PRIMARY KEY AUTO_INCREMENT,
paper_id INT NOT NULL,
type ENUM('단일 선택 질문', '객관식 질문', '빈칸 채우기') NOT NULL,
content TEXT NOT NULL,
options TEXT,
FOREIGN KEY (paper_id) REFERENCES paper(id)
);

  1. 답변 테이블 만들기

답안 테이블을 만들어 문제의 답안 정보를 저장하세요. 테이블 구조는 다음과 같습니다:

CREATE TABLE 답변 (
id INT PRIMARY KEY AUTO_INCREMENT,
질문_ID INT NOT NULL,
답변 TEXT NOT NULL,
FOREIGN KEY (question_id) REFERENCES 질문(id)
);

위 은 데이터베이스 구조의 테이블입니다. 다음으로 시험지를 가져오는 기능을 구현해야 합니다.

  1. 시험지 가져오기 페이지 만들기

먼저, 시험지 가져오기 페이지를 만들어야 합니다. 페이지에는 파일 선택을 위한 업로드 버튼과 제출 버튼이 포함되어야 합니다.

<form action="import.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="file" accept=".json">
  <button type="submit">导入试卷</button>
</form>
  1. 시험지 가져오기 요청 처리

시험지 가져오기 페이지에서 시험지 가져오기 요청을 처리하고 업로드된 파일을 구문 분석해야 합니다. 서버 측에서는 PHP의 json_decode 함수를 사용하여 JSON 파일을 구문 분석하고 SQL 문을 사용하여 시험지 데이터를 데이터베이스에 저장할 수 있습니다.

$file = $_FILES['file']['tmp_name'];
$json = file_get_contents($file);
$data = json_decode($json, true);

$title = $data['title'];
$questions = $data['questions'];

// 存储试卷信息
$sql = "INSERT INTO paper (title) VALUES ('$title')";
$result = mysqli_query($conn, $sql);
$paper_id = mysqli_insert_id($conn);

// 存储题目信息
foreach ($questions as $question) {
  $type = $question['type'];
  $content = $question['content'];
  $options = $question['options'];

  $sql = "INSERT INTO question (paper_id, type, content, options) VALUES ('$paper_id', '$type', '$content', '$options')";
  $result = mysqli_query($conn, $sql);
  $question_id = mysqli_insert_id($conn);

  // 存储答案信息
  $answer = $question['answer'];
  $sql = "INSERT INTO answer (question_id, answer) VALUES ('$question_id', '$answer')";
  $result = mysqli_query($conn, $sql);
}

2. 시험지 내보내기 기능 구현

시험지 내보내기 기능 구현은 비교적 간단합니다. 데이터베이스에서 시험지 데이터를 꺼내 JSON 형식으로 내보내기만 하면 됩니다.

  1. 시험지 내보내기 페이지 만들기

먼저 시험지 내보내기 페이지를 만들고 내보내기를 실행하는 버튼을 추가해야 합니다.

<button onclick="exportPaper()">导出试卷</button>

<script>
  function exportPaper() {
    window.location.href = 'export.php';
  }
</script>
  1. 시험지 내보내기 요청 처리

시험지 내보내기 페이지에서 시험지 내보내기 요청을 처리하고 데이터베이스에서 시험지 데이터를 검색해야 합니다. 그러면 시험지 데이터가 JSON 형식으로 사용자에게 출력됩니다.

header('Content-Type: application/json');
header('Content-Disposition: attachment; filename="paper.json"');

$data = array();

// 获取试卷信息
$sql = "SELECT * FROM paper";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);

$data['title'] = $row['title'];

// 获取题目信息
$sql = "SELECT * FROM question WHERE paper_id = " . $row['id'];
$result = mysqli_query($conn, $sql);
$questions = array();

while ($row = mysqli_fetch_assoc($result)) {
  $question = array(
    'type' => $row['type'],
    'content' => $row['content'],
    'options' => $row['options'],
    'answer' => $row['answer']
  );

  $questions[] = $question;
}

$data['questions'] = $questions;

echo json_encode($data);

위의 코드 예제를 통해 온라인 응답 시스템에서 시험지 가져오기 및 내보내기 기능을 구현할 수 있습니다. 사용자는 시험지를 JSON 형식으로 시스템에 가져오고 시스템의 질문에 답할 수 있습니다. 또한 시험지의 백업, 공유 및 인쇄를 용이하게 하기 위해 시스템에서 시험지를 내보낼 수도 있습니다.

위 내용은 온라인 답변에서 시험지 가져오기 및 내보내기 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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