Как связать каждую кнопку с отдельными знаками?

У меня есть приложение здесь: ПРИМЕНЕНИЕ

У меня есть некоторые вопросы и связанные с каждым вопросом в их возможных ответах в кнопках флажков, а также три текстовых ввода, показывающих questionId, тип опции и количество меток для каждого отдельного ответа.

Фактически количество меток для каждого отдельного ответа, если проблема, которую я получаю. То, что я хочу попытаться, состоит в том, что для каждого правильного ответа для каждого вопроса они связаны со своим собственным вводом текста, показывающим количество оценок, которые они стоят (см. Таблицу Individual_Answer ниже), для всех неправильных ответов, все они стоят 0 в их текстовые входы /

Теперь вот таблицы базы данных для этого примера приложения:

Вопрос:

 QuestionId (PK auto) QuestionNo SessionId (FK Session) OptionId (FK Option) 72 1 26 3 73 2 26 4 

Option_Table:

 OptionId (PK Auto) OptionType 1 AC 2 AD 3 AE 4 AF 

Ответ:

 AnswerId (PK auto) QuestionId (FK Question) Answer 1 72 C 2 73 A 3 73 C 4 73 D 

Individual_Answer:

 AnswerId (PK auto) AnswerMarks 1 2 2 2 3 1 4 2 

Фактический код приведен ниже:

 //$qandaqry query is here and executed $qandaqrystmt->bind_result($qandaQuestionId,$qandaQuestionNo,$qandaQuestionContent,$qandaOptionType,$qandaAnswer,$qandaAnswerMarks ); $arrQuestionId = array(); $arrQuestionNo = array(); $arrQuestionContent = array(); $arrOptionType = array(); $arrAnswer = array(); $arrAnswerMarks = array(); while ($qandaqrystmt->fetch()) { $arrQuestionId[ $qandaQuestionId ] = $qandaQuestionId; //QuestionId $arrQuestionNo[ $qandaQuestionId ] = $qandaQuestionNo; //QuestionNo $arrQuestionContent[ $qandaQuestionId ] = $qandaQuestionContent; //QuestionContent $arrOptionType[ $qandaQuestionId ] = $qandaOptionType; //OptionType $arrAnswer[ $qandaQuestionId ] = $qandaAnswer; //Answer $arrAnswerMarks[ $qandaQuestionId ] = $qandaAnswerMarks; //AnswerMarks } ?> <form action='results.php' method='post' id='exam'> <?php //Retrieve options for each question function ExpandOptionType($option) { $options = explode('-', $option); if(count($options) > 1) { $start = array_shift($options); $end = array_shift($options); do { $options[] = $start; }while(++$start <= $end); } else{ $options = explode(' or ', $option); } echo '<p>'; foreach($options as $indivOption) { echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>'; } echo '</p>'; } foreach ($arrQuestionId as $key=>$question) { ?> <div class="queWrap"> //Each QuestionNo and QuestionContent <p><?php echo htmlspecialchars($arrQuestionNo[$key]) . ": " . htmlspecialchars($arrQuestionContent[$key]); ?></p> //Output each Individual Option <p><?php echo ExpandOptionType(htmlspecialchars($arrOptionType[$key])); ?></p> //Output each QuestionId text input per question <p>Question Id:<input type='text' class='questionIds' name='questionids' value='<?php echo htmlspecialchars($arrQuestionId[$key]); ?>' /></p> //Output each OptionType text input per question <p>Option Type: <input type='text' class='optionType' name='optiontype' value='<?php echo htmlspecialchars($arrOptionType[$key]); ?>' /></p> //Output each AnswerMarks per answer in each question <p>Each Answer's Marks<input type='text' class='answermarks' name='answerMarks' value='<?php echo htmlspecialchars($arrAnswerMarks[$key]); ?>' /></p> </div> <?php } ?> </form> 

Solutions Collecting From Web of "Как связать каждую кнопку с отдельными знаками?"

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

Предположим, вы хотите, чтобы ваш HTML выглядел примерно так:

 <div class="queWrap" id="question-72"> <h2 class="question-text">What is 4+4?</h2> <h3>Answers: <span class="questionMarks">(this question is worth 2 points)</span></h3> <div class="ck-button"> <label class="fixedLabelCheckbox"> <input type="checkbox" name="options_72[]" id="option-A" value="A"> <span>0</span> </label> </div> <div class="ck-button"> <label class="fixedLabelCheckbox"> <input type="checkbox" name="options_72[]" id="option-B" value="B"> <span>4</span> </label> </div> <div class="ck-button"> <label class="fixedLabelCheckbox"> <input type="checkbox" name="options_72[]" id="option-C" value="C"> <span>8</span> </label> </div> <div class="ck-button"> <label class="fixedLabelCheckbox"> <input type="checkbox" name="options_72[]" id="option-D" value="D"> <span>16</span> </label> </div> </div> 

Теперь предположим, что результат вашего запроса – result->fetch() выше был переписан более умно:

 $_Questions = array(); while( $qandaqrystmt->fetch() ) { $_Questions[] = array('id'=>$qandaQuestionId,'num'=>$qandaQuestionNo,'content'=>$qandaQuestionContent,'type'=>$qandaOptionType,'answer'=>$qandaAnswer,'marks'=>$qandaAnswerMarks); } 

Затем, чтобы вывести вопросы, мы просто хотим создать цикл и создать соответствующий HTML. Я хочу отметить, что было бы невероятно глупо посылать правильный ответ вместе с вопросом испытуемому, даже если он скрыт в html. Вы заметите, что этот HTML похож на ваш собственный, но имеет одно изменение, которое является CRITICAL: потому что у вас есть только один элемент формы, окружающий все ваши вопросы, для каждого элемента checkbox array требуется уникальное имя. Я решил добавить _ (questionID) в каждый массив, например, так

(например, вопрос 72) <input type="checkbox" name="options_72[]" id="option-D" value="D">

Вот как вы могли бы зацикливать его с помощью heredoc

 foreach( $_Questions AS $question ) { echo <<<EOT <div class="queWrap" id="question-{$question['id']}"> <h2 class="question-text">{$question['content']}</h2> <h3>Answers: <span class="questionMarks">(this question is worth {$question['marks']} points)</span></h3> EOT; $options = ['A','B','C','D','E','F']; $lastOption = substr($question['type'], -1, 1); foreach( $options as $opt ) { echo <<<EOT <div class="ck-button"> <label class="fixedLabelCheckbox"> <input type="checkbox" name="options_{$questions['id']}[]" value="$opt"> <span>$opt</span> </label> </div> EOT; if( $opt == $lastOption ) break; } }