Подсчет баллов за викторину в PHP, связанный с базой данных

У меня есть HTML-страница с вопросами с несколькими вариантами ответов и кнопкой отправки. Кнопка «Отправить» ведет на страницу .php, которая включает код для 1) подключения к phpmyadmin базе данных sql и соответствующей таблице и 2) приведенный ниже код, который сообщает/напоминает пользователю, какой это был номер вопроса, фактический вопрос, правильный ответ (из базы данных) и их представленный ответ.

Моя проблема в том, что я хочу, чтобы оценка была рассчитана и передана пользователю, и это не совсем работает. Сообщение об ошибке говорит мне, что следующая строка не работает

$answered = $row['select'.$_GET['a'.$x]] ;

Я взял это с другого форума вопросов/ответов, и я не совсем уверен, что он полностью утверждает, но, похоже, это вызывает ошибку.

База данных проста; Только столбцы Questionid, Questiontext и Correctanswer.

В браузере отображается следующее:

Question Number: 1
Question: ________ hablo
Correct Answer: Yo
Your Answer: Yo 

Примечание. Неопределенный индекс: a2 в C:\xampp\htdocs\SSF\1B results.php в строке 33.

Примечание: Неопределенный индекс: выберите в C:\xampp\htdocs\SSF\1B results.php в строке 33. Вы правильно ответили на 0 из 1 вопросов!

Код

$result = mysql_query("SELECT * FROM 1b")
              or die ('Connection to table failed');

$x = 0;
$score = 0;
while ($row = mysql_fetch_assoc($result)){

    echo "Question Number: " . $row['Questionid'] . '<br />';
    echo "Question: " . $row['Questiontext'] . '<br />';
    echo "Correct Answer: " . $row['Correctanswer'] . '<br />';
    foreach ($_GET['select'] as $value)
    echo "Your Answer: " . $value."\n" . '<br />';

    $answered = $row['select'.$_GET['a'.$x]] ;
    $correct = $row['Correctanswer'] ;

    if ($answered == $correct ) {
        $score++;
        $acolor = 'green' ;
    }
    else {
        $acolor = 'red' ;
    }

    $x = $x + 1;
}
echo 'You answered ' . $score . ' out of ' . $x . ' questions correctly!';
?>

person user3163399    schedule 05.01.2014    source источник


Ответы (2)


$answered = $row['select'.$_GET['a'.$x]] ;

Но когда вы повторяете «Ваш ответ», вы используете $value. Разве это не сработает?

 $answered = $value ;

(хотя было бы полезно увидеть форму, которую вы отправляете...)

person Bram    schedule 05.01.2014
comment
Я вижу сейчас. Я дублировал переменную. Я удалил строку $answered = $row['select'.$_GET['a'.$x]] ; и изменил оператор If на $value. Теперь это работает. Спасибо - person user3163399; 06.01.2014

Неопределенная ошибка индекса возникает, когда вы ссылаетесь на значение в массиве по ключу, но этот ключ не существует. Например:

$array = array(
        'abc'   =>  1,
        'def'   =>  2,
);

Если я сейчас попытаюсь сослаться на какой-нибудь случайный ключ, например $array['z'], я получу указанную вами ошибку.

Первая ошибка, которую вы получаете, говорит вам, что в ваших параметрах GET даже не установлен ключ «a2». Вторая ошибка, которую вы получаете, потому что ключ «выбрать» не существует в вашем массиве $row.

Нам нужно увидеть форму, которую вы отправляете, чтобы получить правильное представление о том, что именно не так.

person Scopey    schedule 05.01.2014