Я пытаюсь проверить, правильный ли ответ, который выбрал пользователь, но он не работает должным образом:
<form method="post"> <?php $question = mysql_query("SELECT * FROM `questions`"); $stat = mysql_fetch_assoc($question); $num = mysql_num_rows($question); $questionid = 0; for($i=0;$i<=$num;$i++) { $question = mysql_query("SELECT * FROM `questions` WHERE `id`='$i'"); $stat = mysql_fetch_assoc($question); //if($stat['answer'] == null echo $stat['question'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer1']."<br />"; echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer2'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer3'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value="'.$x.'" />' .$stat['answer4'] . '<br />'; $questionid++; $x = $x+1; } echo $result; ?> <input type="submit" name="go" value="Go" /> </form>
Эта часть в основном:
$x = 1; $question = mysql_query("SELECT * FROM `questions`"); $stat = mysql_fetch_assoc($question); $num = mysql_num_rows($question); if(isset($_POST['go'])) { for($i=0;$i<$num;$i++) { if ($_POST['ans'.$x] == $row['correct']) { $result = $result + 1; } $x = $x + 1; } }
По какой-то причине он не публикует результаты правильно, и я думаю, что что-то не так с кодом, было бы полезно помочь.
Вот еще одна попытка помочь вам.
Я на самом деле написал «полное решение», и в процессе обнаружил несколько небольших ошибок в вашем коде – плюс некоторые вещи, которые я просто не мог понять.
Основная ошибка: все ваши переключатели имеют одинаковое значение ($ x), поэтому независимо от того, какую кнопку вы нажимаете для вопроса 1, ответ «1» и т. Д. Были и другие вещи, которые вы делали, что я не мог понять: поэтому вместо этого я создал простой поток – одну страницу, которая задает вопросы, а другую, которая оценивает результаты.
Страница вопроса (я обфускал параметры доступа для своей базы данных – нет, я не использую «пароль» в качестве пароля!):
<html> <body> <form action="./evaluate.php" method="post"> <?php $server = mysql_connect ('localhost', 'username, 'password'); mysql_select_db("questionnaire", $server); $question = mysql_query("SELECT * FROM `Questions`;"); $x = 0; while ($row = mysql_fetch_assoc($question)) { echo $row['question'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value=1 />' .$row['answer1'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value=2 />' .$row['answer2'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value=3 />' .$row['answer3'] . '<br />'; echo '<input type="radio" name="a'.$x.'" value=4 />' .$row['answer4'] . '<br />'; $x = $x + 1; } mysql_close($server); ?> <input type="submit" name="Submit" value="Submit" /> <br> </form> </body> </html>
и оцените.php: EDIT: я немного изменил код, чтобы сделать «чистым», и добавьте красное / зеленое касание, чтобы отображать вопросы, на которые был дан ответ правильно и неправильно. Очевидно, вы можете принять эти вещи намного дальше, если хотите …
<html> <body> <?php $server = mysql_connect ('localhost', 'username', 'password'); mysql_select_db("questionnaire", $server); $question = mysql_query("SELECT * FROM `Questions`;"); $x = 0; $score = 0; while ($row = mysql_fetch_assoc($question)) { echo $row['question'] . '?<br />'; $answered = $row['answer'.$_POST['a'.$x]] ; $correct = $row['correct'] ; if ($answered == $correct ) { $score++; $acolor = 'green' ; } else { $acolor = 'red' ; } echo 'you answered <font color=' . $acolor . '>' . $answered . '<font color=black> <br />'; echo 'the correct answer was ' . $correct . '<br />' ; echo '-------------------------------------- <br />' ; $x = $x + 1; } echo 'You had a total of ' . $score . ' out of ' . $x . ' questions right!'; mysql_close($server); ?> </body> </html>
Это дало (для простого трехзадачного множественного выбора я сделал) ожидаемые результаты. Дайте мне знать, если это сработает для вас!