Nice Kloe Ответов: 0

Не могу определить правильные, неправильные или неотвеченные вопросы для экзаменационного приложения на PHP


Эй народ
Я работаю над экзаменационным приложением и хочу показать результаты для тех, кто сдавал экзамен. Я хочу вывести число правильных ответов, неправильных ответов и ответов, оставшихся без ответа.
Когда я сдаю экзамен и отправляю ответы, я получаю ошибку " Undefined variable: value in..."
Моя проблема заключается в получении этой переменной атрибута name с $_POST на моей странице сервера для обработки потребностей.Заранее спасибо за вашу помощь!

Что я уже пробовал:

Это то, что у меня уже есть :
HTML викторина
Есть несколько вопросов, но я дам код только для одного
<div id='question<?php echo $i; ?>' class='cont'>
    <div class="question_css">
        <h3><span class="label label-warning" id="qid"><?php echo  $i; ?></span>
            <span class="questions" id="qname<?php echo $i; ?>"> <?php echo $value['question_entitle']; ?>
        </h3>
    </div>

    <ul class="quiz-ul">

        <li class="quiz-li">
            <input type="radio" value="<?php echo $options[0]['Options'];?>"
                    id='radio1_<?php echo $options[0]['answer_proposal_id']; ?>' name='<?php echo $value['Questionid'];?>'/>
            <label for="radio1_<?php echo $options[0]['answer_proposal_id']; ?>"
                    class="element-animation"><?php echo $options[0]['Options']; ?></label>
            <div class="check"></div>
        </li>

        <li class="quiz-li">
            <input type="radio" value="<?php echo $options[1]['Options'];?>"
                    id='radio2_<?php echo $options[1]['answer_proposal_id']; ?>' name='<?php echo $value['Questionid'];?>'/>
            <label for="radio1_<?php echo $options[1]['answer_proposal_id']; ?>"
                    class="element-animation"><?php echo $options[1]['Options']; ?></label>
            <div class="check"></div>
        </li>

        <li class="quiz-li">
            <input type="radio" value="<?php echo $options[2]['Options'];?>"
                    id='radio3_<?php echo $options[2]['answer_proposal_id']; ?>' name='<?php echo $value['Questionid'];?>'/>
            <label for="radio1_<?php echo $options[2]['answer_proposal_id']; ?>"
                    class="element-animation"><?php echo $options[2]['Options']; ?></label>
            <div class="check"></div>
        </li>

        <li class="quiz-li">
            <input type="radio" value="<?php echo $options[3]['Options'];?>"
                    id='radio4_<?php echo $options[3]['answer_proposal_id']; ?>' name='<?php echo $value['Questionid'];?>'/>
            <label for="radio1_<?php echo $options[3]['answer_proposal_id']; ?>"
                    class="element-animation"><?php echo $options[3]['Options']; ?></label>
            <div class="check"></div>
        </li>
        <li class="quiz-li">
            <input type="radio" checked='checked' style='display:none' value="5"
                id='radio5' name='<?php echo $value['Questionid'];?>'/>
        </li>
    </ul>

    <button id='<?php echo $i; ?>' class='next btn btn-success' type='button'>Suivant</button>
</div>

PHP-код
if (isset($_POST['submit']) && !empty($_POST)) {
    
  $right_answer=0;
  $wrong_answer=0;
  $unanswered=0;
  
  $question_correct_answerid =$db->prepare ('SELECT Questionid, question_correct_answerid from question ');
  $question_correct_answerid->execute();
  $correctAnswerId = $question_correct_answerid->fetchAll();
  
  foreach ($correctAnswerId as $key => $row) {
    $correctOption= $db->prepare('SELECT Options,answer_proposal_id from answerproposal where is_Correct= 1 
                                  and answer_proposal_id = '.$row['question_correct_answerid'].' ');
    $correctOption->execute();
    $correctOptions = $correctOption->fetchAll();
    //var_dump($correctOptions);
  }
  
  
  foreach ($correctOptions as $key => $option) {
    if ($option['Options'] == $_POST[$value['Questionid']]) {
      
      $right_answer++;
    }else if($_POST[$value['Questionid']] == 5){
      $unanswered++;
    }else{
      $wrong_answer++;
    }
  }
}
?>

<div class="container result vh-center">
<div class="w100">
    <hr>   
    <div class="row dflex results-container">    
        <div class="results right">
            <div>
                <p class="mtb-1">Total no. of right answers : 
                  <span class="answer"><?php echo $right_answer;?></span></p>
                <p class="mtb-1">Total no. of wrong answers : 
                  <span class="answer"><?php echo $wrong_answer;?></span></p>
                <p class="mtb-1">Total no. of Unanswered Questions : 
                  <span class="answer"><?php echo $unanswered; ?></span></p>                   
            </div>
        </div>
    </div>    
</div>
</div>

Richard MacCutchan

Я получаю ошибку " Undefined variable: value in..."
Хорошо, вы еще не объявили переменную value везде.

Nice Kloe

Я не делал этого, потому что это должно было прийти со страницы викторины, где я сдаю экзамен и отправляю выбранные кандидатом ответы на страницу обработки. Имя атрибута для переключателей-name='$value['Questionid'];' и на моей странице сервера я пытаюсь получить атрибут name с помощью $_POST[$value['Questionid']]. Это неправильно, пожалуйста?

Richard MacCutchan

Нельзя использовать переменную, которая никогда не была объявлена. Проверьте справочник по языку PHP для получения подробного объяснения переменных, ссылок и правил области действия.

Nice Kloe

О-о-о, хорошо, я понимаю. Поэтому, пожалуйста, любая идея/предложение/рабочий фрагмент кода о том, как я могу получить ответы различных выбранных кандидатов, чтобы сравнить их с правильными ответами из моей БД?

Richard MacCutchan

Да, объявите правильную переменную для захвата данных по мере их ввода и передайте ее бэкенд-коду, который сравнивает ее со значениями в базе данных.

Nice Kloe

Спасибо за ваш ответ. Я заменил переменную php в атрибуте name переключателей строковым значением (answerProposition) для всех переключателей. Результат не лучше. На три вопроса для экзаменов, выбирая каждый раз правильный ответ, в конце я получаю правильный ответ: 1, неправильный ответ : 0, без ответа : 0. если я выбираю нет ответа на каждый вопрос, в конце я получаю правильный ответ : 0, неправильный ответ : 0, без ответа : 1. Что я не получаю, пожалуйста?

Richard MacCutchan

Извините, но я не могу ответить на этот вопрос, не запустив ваш код. Вам нужно использовать отладчик, чтобы пройти через него и посмотреть, какие значения передаются с веб-страницы в внутренний код, а затем в базу данных.

0 Ответов