테스트 사이트 - 개발 중인 베타 버전입니다

한번 쿼리 입력에서 내부적으로 다른 DB컬럼 반복문 문의 드립니다. 채택완료

수성펜 7년 전 조회 3,465

</p>

<p><!doctype html>

<html lang="ko">

 <head>

  <meta charset="UTF-8">

  <meta name="Generator" content="EditPlus®">

  <meta name="Author" content="">

  <meta name="Keywords" content="">

  <meta name="Description" content="">

  <title>Document</title>

 </head>

 <body></p>

<p><?php</p>

<p> require_once ('connect.php');

    require_once __DIR__ . '/simplexlsx.class.php';

    //$xlsx = new SimpleXLSX(GLOBAL_PATH . 'import/online.xlsx');

 $xlsx = new SimpleXLSX( 'worksheet.xlsx' );

    $cont = 0;</p>

<p>

    foreach ($xlsx->rows(1) as $fields) { // 워크시트

        $cont++;

        if ($cont > 1) {</p>

<p>   $type = $fields[0];  // 객관식=1, 주관식=2, 논술형=3

   switch($type) {

      case    "객관식" : $q_type = '1'; break;

      case "주관식" : $q_type = '2'; break;

      case "논술형" : $q_type = '3'; break;

      default  : $q_type = '1'; break;

   }

   

   $question_subject_id = $fields[1]; // 문제 번호

   $question_description = $fields[2]; // 문제 제목

   $answer_isright = $fields[3]; // 정답

   $answer_id = '';

   $answer_question_id =  $question_subject_id; // 문항에 해당하는 문제번호 추출

   $subject_type  = '1';    // 출제 유형 A형, B형

   $question_type = $q_type;   // 객관식=1, 주관식=2, 논술형=3

   $answer_type = $subject_type;  // 문항에 해당하는 문제 유형

   $answer_description1 =  $fields[4]; // 문항①(객관식/객관식5)

   $answer_description2 =  $fields[5]; // 문항②(객관식/객관식5)

   $answer_description3 =  $fields[6]; // 문항③(객관식/객관식5)

   $answer_description4 =  $fields[7]; // 문항④(객관식/객관식5)

   $answer_description5 =  $fields[8]; // 문항⑤(객관식5)

   //$answer_description =  $fields[9]; // 비고(설명)

   //$answer_description =  $fields[10]; // 점수

   //$answer_description =  $fields[11]; // 범주

   //$answer_description =  $fields[12]; // 지문</p>

<p> </p>

<p>            //문제명 입력 테이블

            $sql = "INSERT INTO eTEST_questions (

   question_id,

   question_subject_id,

   subject_type,

   question_description,

   question_explanation,

   question_type,

   question_difficulty,

   question_enabled,

   question_position,

   question_timer,

   question_fullscreen,

   question_inline_answers,

   question_auto_next) VALUES (

   '$question_id',

   '$question_subject_id',

   '$subject_type',

   '$question_description',

   '$question_explanation',

   '$question_type',

   '$question_difficulty',

   '$question_enabled',

   '$question_position',

   '$question_timer',

   '$question_fullscreen',

   '$question_inline_answers',

   '$question_auto_next')";</p>

<p>

   $res = mysqli_query($con,$sql);

        }

 }

 if($res)

        {

            echo "전체 : ".$cont."건"."</br>";

            echo "업로드 된 파일이 성공적으로 처리 되었습니다."."</br>";

        }

        else

        {

            echo "파일 업로드에 실패 하였습니다.";

        }

   </p>

<p>?></p>

<p>

현재 위 코드는 정상 작동합니다. (문제 입력 부분입니다.)

아래의 DB 항목을 위 퀴리 중간에 삽입하여 이것을 4회~5회 반복하려면 방법을 부탁 드립니다.

-- 테이블 구조 `eTEST_answers` --

CREATE TABLE IF NOT EXISTS `eTEST_answers` (   `answer_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,   `answer_question_id` bigint(20) unsigned NOT NULL,   `answer_type` tinyint(1) NOT NULL DEFAULT '1',   `answer_description` text COLLATE utf8_unicode_ci NOT NULL,   `answer_explanation` text COLLATE utf8_unicode_ci,   `answer_isright` tinyint(1) NOT NULL DEFAULT '0',   `answer_enabled` tinyint(1) NOT NULL DEFAULT '0',   `answer_position` bigint(20) unsigned DEFAULT NULL,   `answer_keyboard_key` smallint(10) unsigned DEFAULT NULL,   PRIMARY KEY (`answer_id`),   KEY `p_answer_question_id` (`answer_question_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=57 ;

-- -- 테이블의 덤프 데이터 `eTEST_answers`

 

(53, 15, 'A', '4.2 킷캣', NULL, 1, 1, NULL, NULL), (54, 15, 'A', '4.0 ICS', NULL, 0, 1, NULL, NULL), (55, 15, 'A', '2.3 진저브래드', NULL, 0, 1, NULL, NULL), (56, 15, 'A', '2.2 프로요', NULL, 0, 1, NULL, NULL)

 

아래 추가 할 부분 인데 반복문으로 작성해서 테이블 덤프 테이터 처럼 입력 하는 방법

즉 4회 정도 수행하려면 어떤 반복문을 중간에 삽입하는지 알고 싶습니다.

 

     // 문항명 입력 테이블

     $sql = "INSERT INTO eTEST_answers (    answer_id,    answer_question_id,    answer_type,    answer_description,    answer_explanation,    answer_isright,    answer_enabled,    answer_position,    answer_keyboard_key) VALUES (    '$answer_id',    '$answer_question_id',    '$answer_type',    '$answer_description',    '$answer_explanation',    '$answer_isright',    '$answer_enabled',    '$answer_position')";

 

추가 입력 하려는 부분 입니다. 이것을 내부적으로 4회 반복해야되는데..

for( 문으로 4회 반복하려면 어느 부분에 입력 해야 되는지 알려주실수 있나요?

 

작동부분은 문제을 액셀파일 읽어서 문제명 테이블(eTEST_question) 부분을 DB 저장후

문항 테이블(eTEST_answers)에 문항만큼 반복해서 읽어서 DB에 저장 하는 부분 입니다. 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

유찬아빠

foreach ($xlsx->rows(1) as $fields) { // 워크시트

이부분이 이상하군요.... 느낌상 $xlsx->rows(1) 부분이 첫번째 워크시트 인지 아니면 워크시트의 row 데이터 값인지 알아보셔야 할듯 합니다. 만약 저렇게 해서 한줄만 데이터가 들어갔다면 

$xlsx->rows(1) 이 아니라 $xlsx->rows 의 카운트 만큼 for 문을 돌아야 합니다. 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

수성펜
7년 전
우선 댓글 달아 주셔서 감사합니다.
위 부분은 워크시트 1번 부분 에 자료을 불어오는 부분이 맞습니다. (기본값은 공백, 0)
현재 정상 작동합니다.

우선 짜집기 해서 구현은 했는데 문의 드립니다.
답변이 없으면 다시 질문으로 올려야 될것 같아요...

[code]

<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
</head>
<body>

<?php

require_once ('connect.php');
require_once __DIR__ . '/simplexlsx.class.php';

$xlsx = new SimpleXLSX( 'worksheet.xlsx' );
$cont = 0;
$answer_num = 5;
$subject_num = 4;


foreach ($xlsx->rows(1) as $fields) { // 워크시트
$cont++;

if ($cont > 1) {


$type = $fields[0]; // 객관식=1, 주관식=2, 논술형=3
switch($type) {
case "객관식" : $q_type = '1'; break;
case "주관식" : $q_type = '2'; break;
case "논술형" : $q_type = '3'; break;
default : $q_type = '1'; break;
}

$question_subject_id = $fields[1]; // 문제 번호
$question_description = $fields[2]; // 문제 제목
$answer_isright = $fields[3]; // 정답
$answer_id = '';
$answer_question_id = $question_subject_id; // 문항에 해당하는 문제번호 추출

$subject_type = $s; // 출제 유형 A형, B형

$question_type = $q_type; // 객관식=1, 주관식=2, 논술형=3
$answer_type = $subject_type; // 문항에 해당하는 문제 유형
$answer_description1 = $fields[4]; // 문항①(객관식/객관식5)
$answer_description2 = $fields[5]; // 문항②(객관식/객관식5)
$answer_description3 = $fields[6]; // 문항③(객관식/객관식5)
$answer_description4 = $fields[7]; // 문항④(객관식/객관식5)
$answer_description5 = $fields[8]; // 문항⑤(객관식5)
//$answer_description = $fields[9]; // 비고(설명)
//$answer_description = $fields[10]; // 점수
//$answer_description = $fields[11]; // 범주
//$answer_description = $fields[12]; // 지문



//CADASTRA fields
$sql = "INSERT INTO eTEST_questions (
question_id,
question_subject_id,
subject_type,
question_description,
question_explanation,
question_type,
question_difficulty,
question_enabled,
question_position,
question_timer,
question_fullscreen,
question_inline_answers,
question_auto_next) VALUES (
'$question_id',
'$question_subject_id',
'$subject_type',
'$question_description',
'$question_explanation',
'$question_type',
'$question_difficulty',
'$question_enabled',
'$question_position',
'$question_timer',
'$question_fullscreen',
'$question_inline_answers',
'$question_auto_next')";
$res2 = mysqli_query($con,$sql);

for ($i=1; $i<$answer_num; $i++) {
if($fields[3] == $i) { $answer_isright = "1"; } else { $answer_isright = "0"; } // 해당 문항이 정답이면 = 1, 아니면 = 0
switch($i) {
case "1" : $answer_description = $fields[4]; // 문항①(객관식/객관식5)
break;
case "2" : $answer_description = $fields[5]; // 문항①(객관식/객관식5)
break;
case "3" : $answer_description = $fields[6]; // 문항①(객관식/객관식5)
break;
case "4" : $answer_description = $fields[7]; // 문항①(객관식/객관식5)
break;
case "5" : $answer_description = $fields[8]; // 문항①(객관식/객관식5)

default :
break;
}

$sql = "INSERT INTO eTEST_answers (
answer_id,
answer_question_id,
answer_type,
answer_description,
answer_explanation,
answer_isright,
answer_enabled,
answer_position) VALUES (
'$answer_id',
'$answer_question_id',
'$answer_type',
'$answer_description',
'$answer_explanation',
'$answer_isright',
'$answer_enabled',
'$answer_position')";
$res1 = mysqli_query($con,$sql);
}

}
}
if($res2)
{
echo "전체 : ".$cont."건"."</br>";
echo "업로드 된 파일이 성공적으로 처리 되었습니다."."</br>";
}
else
{
echo "파일 업로드에 실패 하였습니다.";
}

[/code]

위 코드중에
$subject_type = $s; // 출제 유형 A형, B형

값(%s) 한문제 끝나면 자동 2 넘어 가게 하는 방법이 궁금합니다.

엑셀에서 불어오는 컬럼은 유형이 3가지 있습니다. 문제 번호는 같으나 문제명이 조금 틀리게
기제되어서 문항 4가지(객관식) 정답의 위치가 조금 틀리게 기제되어 있습니다.

php 에서 추출 할때 $subject_type 값 랜덤으로 2번 선택이되면 2번에 해당 항목을 추출 하려 합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인