php html тест поочередно

выводит криво что не так?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
 <form action="" method="POST">
 <?php


$true = 0;
$false = 0;
$true_answers = [2,4];


  for($i = 0;$i < count($questions);$i++){
        if(!isset($_POST[$i])){
    echo $questions[$i][0] . "<br>"; 
     
     for($j = 0;$j < count($questions[$i])-1;$j++) {

         for($k = 0;$k < count($questions[$i]['1']);$k++) {

?> <input type="radio" name="<?=$i;?>" value="<?= $k;?>">

<?php echo $questions[$i][1][$k] . "<br>";
 ?>
         <?php }
     }
  }else{
    echo $questions[$i+1][0];
    if($_POST[$i] == $true_answers[$i]){
        $true++;
    }else{
        $false++;
    }
    for($j = 0;$j < count($questions[$i])-1;$j++){
        for($k = 0;$k < count($questions[$i]['1']);$k++){
            ?><input type="radio" name="<?=$i;?>" value="<?= $k;?>">
<?php echo $questions[$i][1][$k] . "<br>";?>
       <?php }
    }

  }

} //print_r($_POST); ?>
 <button type="submit">OK</button>

 <p>Дұрысы:<?php echo $true;?></p>
  <p>Қатесі:<?php echo $false;?></p> 
 </form>  
</body>
</html>`

Ответы (1 шт):

Автор решения: Максим Степанов

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

Можно как использовать сессию, так и обойтись без нее. В первом случае - просто храните ответы в сессии, как в примере ниже, например. Во втором - придется старые ответы хранить и передавать с каждым новым в форме. Ну или хранить где-то еще.

Я не стал особенно заморачиваться, так как вы, скорее всего, скоро придете к тому, что "а теперь мне бы поочередно выводить без перезагрузки страницы". И тогда наши все старания пойдут прахом =)

В общем, вот примерный код. Все в одном файле, вы сможете разбросать по разным, если нужно.

Я немного изменил ваш массив с вопросами для удобства:

<?php

session_start();

// Немного изменил ваш массив, для удобства, в том числе добавил сразу правильные ответы.
$questions = [
    [
        'name' => 'Тас дәуірінде адам баласы орталық және шығыс Қазақстан жерін игере бастаған кезең',
        'options' => ['Мезолит','Олдувэй','Мустье','Ашель','Неолит'],
        'correct' => 2
    ],
    [
        'name' => 'Екі жағынан да өңделген қарапайым шапқыш тас құрал',
        'options' => [ 'Гарпун','Кетпен','Болос','Нуклеус','Бифас'],
        'correct' => 4
    ]
];

// В начале проверим, первый запуск у нас или нет. Если уже пришел ответ из формы, запишем его в сессию.
// в сессии будем хранить массив с ответами: $_SESSION['answers'].
// пришел ответ - просто положили в массив и все.
if(isset($_POST['option'])){
    $_SESSION['answers'][] = $_POST['option'];
}

// определим номер текущего вопроса, то есть его индекс в массиве $questions. Определим так:
// если в сессии уже есть ответы, ключем будет размер массива с ответами, то есть count($_SESSION['answers'])
// если же ответов нет и это первый запуск, ключ - 0:
$currentQuestionId = isset($_SESSION['answers']) ? count($_SESSION['answers']) : 0;

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>


<?php
// Выше мы получили индекс текущего вопроса.
// Если он есть в массиве $questions, выводим форму только с этим вопросом!
if (array_key_exists($currentQuestionId, $questions)){
?>

    <form method="post" action="">
        <p><?=$questions[$currentQuestionId]['name']?></p>
        <?php foreach ($questions[$currentQuestionId]['options'] as $key => $option) { ?>
            <input type="radio" name="option" value="<?=$key?>" /> <?=$option?> <br />
        <?php } ?>
        <button type="submit">OK</button>
    </form>

<?php
} else {
// Если же в массиве $questions уже нет вопроса с нужным номером,
// значит, вопросы иссякли и пора выводить результат.
$true = 0;
?>

    <h1>Результат: </h1>
    <?php foreach ($questions as $key => $question) {
        // Бежим по массиву с вопросами $questions, сравниваем с массивом $_SESSION['answers']
        $isCorrect = $question['correct'] == $_SESSION['answers'][$key];
        // Если ответ совпал, добавим единицу к счетчику $true
        $true += $isCorrect ? 1 : 0;
        // И можно вывести номер вопроса и его результат:
        ?>
        <p>Вопрос <?=$key?>: <?=$isCorrect ? 'Дұрысы' : 'Қатесі'?></p>
    <?php } ?>

    <h2>Итоги:</h2>
    <p>Дұрысы:<?php echo $true;?></p>
    <p>Қатесі:<?php echo count($questions) - $true;?></p>
<?php
    // Очищаем сессию после вывода результатов.
    $_SESSION['answers'] = [];
}
?>

</body>
</html>
→ Ссылка