2013-07-11 2 views
0

나는 MySQL 데이터베이스에서 일부 변수를 호출하고 이전 페이지의 HTML 양식을 통해 POSTED 인 일부 변수와 비교합니다. 그들은 실제로 정확한 답과 주어진 답입니다.PHP와 루프에 변수가 포함 된 문자열 추가

내 현재의 구조는 다음과 같습니다 : 만 3 질문이 될 때까지

if($ans1==$que1){ 
echo"TRUE"; 
} 
if($ans2==$que2){ 
echo"TRUE"; 
} 
if($ans3==$que3){ 
echo"TRUE"; 
} 
//AND SO ON... 

구조는 정말 정신이 아니었다. 그러나 이제 질문은 100으로 증가합니다. 다음과 같이하는 방법을 알고 싶습니다.

for(i=1; i=100; i++){ 
if($ans.$i==$que.$i){ 
echo"TRUE"; 
$total_correct_ans=$total_correct_ans+1; 
} 
} 
echo"Total correct answers are ". $total_correct_ans; 
+0

왜 게시물 배열 –

답변

3

먼저 배열을 사용하는 것이 좋습니다. 그들은 반복되는 이런 종류의 물건에 대한 의미있는 : 그게 정말 가능하지 않으면

// $answers = [1, 3, 2]; 
// $questions = [1, 2, 3]; 
for ($i = 0; $i < count($answers); ++$i) { 
    if ($answers[$i] == $questions[$i]) { 
     echo "TRUE" 
    }; 
} 

, 당신은 사용할 수 variable variables : 또한 질문 양식을 설정 모두에 더 복잡한 배열을 사용할 수

if (${"ans$i"} == ${"que$i"}) { 
} 
+0

을 통해 foreach() 루프를 수행하지 마십시오. 고마워요 – user2561597

+0

좋아요! 답변을 수락하는 방법에 대한 [about] 섹션을 읽으십시오. –

0

그런 다음 답을 확인하십시오. 이 배열이 있다면 고려 : 질문을 묻는 페이지에서

$questions = array(
    array(
     "question" => "What color is the sky", 
     "answers" => array(
      "red", 
      "green", 
      "blue", 
      "penquine" 
     ), 
     "correct_answer" => 2 
    ), 
    array(
     "question" => "What is the bestest langugage in the world!", 
     "answers" => array(
      "C#", 
      "English", 
      "Brainfuck", 
      "PHP", 
     ), 
     "correct_answer" => 3 
    ), 
); 

을, 당신은 배열을 통과하고 답변을의 각 질문을 인쇄하여 양식을 만들 수 있습니다. 다소 같은

echo "<form action='check_answers.php' method='post'>\n"; 
foreach ($questions as $qi => $q) { 
    echo "<h1>{$q["question"]}</h1>\n"; 
    foreach ($q["answers"] as $ai => $answer) { 
     echo "<label><input type='radio' name='answers[$qi]' value='$ai'> $answer</label>\n"; 
    } 
} 
echo "<input type='submit'></form>"; 

데이터는 다음 형태로 제공된 값과 각 질문에 "correct_answers"요소를 비교함으로써 check_answers.php 파일을 확인할 수 있었다.

if (isset($_POST["answers"]) && is_array($_POST["answers"])) { 
    $correctAnswers = array(); 
    $incorrectAnswers = array(); 

    foreach ($_POST["answers"] as $question => $answer) { 
     if ($questions[$question]["correct_answer"] == $answer) { 
      $correctAnswers[] = $questions; 
     } 
     else { 
      $incorrectAnswers[] = $question; 
     } 
    } 

    echo "You had " . count($correctAnswers) . " correct answers.<br>\n"; 
    echo "You had " . count($incorrectAnswers) . " incorrect answers.<br>\n"; 
} 

당신은 precicely 사용자가 잘못된 얻고있는 권리, 모두에 대한 인덱스가 배열에 저장되어 같은 의문을 제기하는 보여 그 연장 할 수있다.

$questions 배열은 위 예제에서 정적이지만 MySQL 스키마에서도 쉽게 생성 될 수 있습니다.

function generateQuestions(\PDO $pdo) { 
    $questions = array(); 

    $sql = "SELECT id, question FROM questions"; 
    $result = $pdo->query($sql); 
    foreach ($result as $row) { 
     $question = array(
      "question" => $row["question"], 
      "answers" => array(), 
      "correct_answer" => 0 
     ); 

     $answerSql = "SELECT id, answer, isCorrect FROM answers 
        WHERE question_id = {$row["id"]}"; 
     $answerResult = $pdo->query($answerSql); 
     foreach ($answerResult as $answer) { 
      $answers[$answer["id"]] = $answer["answer"]; 
      if ($anser["isCorrect"]) { 
       $question["correct_answer"] = $answer["id"]; 
      } 
     } 

     $questions[$row["id"]] = $question; 
    } 

    return $question; 
} 
관련 문제