한번 쿼리 입력에서 내부적으로 다른 DB컬럼 반복문 문의 드립니다. 채택완료
</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개
답변을 작성하려면 로그인이 필요합니다.
로그인
위 부분은 워크시트 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번에 해당 항목을 추출 하려 합니다.