PHP Quiz не работает должным образом - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь сделать простой тест php, но вместо вариантов мне нужно вставить ответы и сравнить их с strcasecmp (), чтобы не было проблем, если первая буква заглавная или что-то в этом роде, но код не работает должным образом. Иногда он не возвращает правильный результат, хотя я вставляю правильный ответ. Вот код:

<?php
         $number = rand(1,2);
         $result = "";
         $answer = "";
         $question = "";

         $question1 = "What is the capital of China";
         $question2 = "What king of country is China?";

         $answer1 = "beijing";
         $answer2 = "republic";

         if ($number == 1) {
             $answer = $answer1;
             $question = $question1;
         }

         if ($number == 2) {
             $answer = $answer2;
             $question = $question2;
         }

         if(isset($_POST['submit'])){
            if (strcasecmp($answer,$_POST['answer']) == 0) {
                 $result = "Correct!";
            } else {
                 $result = "Wrong!";
            }
         }

    ?>

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>

        <form method="post" action="index.php">
            <div class="middle">
                <p class="question"><?php echo $question; 
                ?></p>
                <p class="result"><?php echo $result;
                 $result = "" ?></p>
                 <div class="box">
                   <input type="text" name="answer" placeholder="Type here" class="text">
                 </div>
            </div>
            <input type="submit" name="submit" value="Continue" class="btn">
        </form>
    </body>
    </html>

1 Ответ

0 голосов
/ 02 мая 2018

Посмотрев на ваш код, мы увидим, что при отправке формы вы перезапускаете скрипт, который фактически сбрасывает $random на новое значение. С двумя вопросами у вас есть 50% шансов получить «правильный» ответ, но вы увидите, что ваш сценарий вообще не работает с добавлением дополнительных вопросов.

По сути, вы должны использовать другой способ достичь того, что вы хотите. Вы можете попытаться добавить идентификатор вопроса в скрытую <input> и проверить, когда ваша форма отправляется, чтобы определить, какой она была.

if(isset($_POST['submit'])){
   switch ($_POST['question']) { // Add '{'
   case 1:
       if (strcasecmp($answer1,$_POST['answer']) == 0) {
            $result = "Correct!";
       } else {
            $result = "Gresit!";
       }
       break;
   case 2:
        if (strcasecmp($answer2,$_POST['answer']) == 0) {
            $result = "Correct!";
       } else {
            $result = "Gresit!";
       } // Forgot to Add '}'
       break;
    } // Add '}' It give error in PHP 5.3 Parse error: syntax error, unexpected T_CASE, expecting ':' or '{'
}

Для HTML вы можете добавить эти данные в форму:

<input type="text" name="question" value="<?php echo $number ?>" hidden>

Это не лучший способ достичь того, чего вы хотите, это всего лишь пример того, что сработает.

...