QCM en php

Fermé
Nibel - Modifié le 11 juin 2023 à 05:46
 Basile - 13 juin 2023 à 17:31

Bonjour*

voila mon code et il ne marche pas sachant que les question sont introduite dans une autre page et elles sont récupéré de la base de données mais le probleme est dans le login et au début a la ligne 17 ils disent quil nest pas reconnu (undefined array key login)alors que j'ai mis un post dans l'autre page mais ca ne marche pas de plus la réponse n'est pas récupérée du qcm non plus 

Merci d'avance*

(*) Éléments basiques de politesse ajoutés par la modération CCM !...................................

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="qcm.css">
  <title>QCM</title>
</head>
<body>
  <h1>QCM</h1>
  <div class="t">
  <?php
  $conn = mysqli_connect('localhost', 'root', '', 'person');

  if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
  }
$login=$_GET['login'];
$sql="SELECT `login` FROM `student` WHERE login = '$login'";
  // Retrieve the questions and answers from the database
  $sql = "SELECT * FROM qst";
  $result = mysqli_query($conn, $sql);

  if (mysqli_num_rows($result) > 0) {
    // Display each question with the possible answers
    while ($row = mysqli_fetch_assoc($result)) {
      $q = $row['q'];
      $r1 = $row['r1'];
      $r2 = $row['r2'];
      $br = $row['br'];

      echo "<form method='post' action='qacm.php'>";
      echo "<h3>Question :</h3>";
      echo "<p>$q</p>";
      
      //echo "<input type='hidden' name='login' value='{$_GET['login']}' />";
      echo "<input type='radio' name='reponse[$q]' value='$r1'> $r1<br>";
      echo "<input type='radio' name='reponse[$q]' value='$r2'> $r2<br>";
      echo "</form>";
    }

    // Include the submit button outside the loop
    echo "<form method='post' action='qacm.php'>";
    echo "<input type='submit' value='Submit'>";
    echo "</form>";
  } else {
    echo "Aucune question trouvée.";
  }

  // Process the form submission
  if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $login = filter_input(INPUT_GET, 'login', FILTER_SANITIZE_STRING);

    // Check if the 'reponse' key is present in the $_POST array
    if (isset($_POST['reponse'])) {
      // Iterate through the submitted answers
      foreach ($_POST['reponse'] as $question => $userAnswer) {
        $userAnswer = isset($userAnswer) ? $userAnswer : ""; // Set default value if no option is selected

        // Retrieve the correct answer from the database
        $sql = "SELECT br FROM qst WHERE q = ?";
        $stmt = mysqli_prepare($conn, $sql);
        mysqli_stmt_bind_param($stmt, "s", $question);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $correctAnswer);
        mysqli_stmt_fetch($stmt);
        mysqli_stmt_close($stmt);

        // Prepare the INSERT statement
        $sql = "INSERT INTO `test`(`login`, `q`, `r`, `br`) VALUES (?, ?, ?, ?)";
        $stmt = mysqli_prepare($conn, $sql);
        mysqli_stmt_bind_param($stmt, "ssss", $login, $question, $userAnswer, $correctAnswer);

        // Execute the prepared statement
        if (mysqli_stmt_execute($stmt)) {
          echo "Réponse enregistrée pour la question : $question<br>";

          // Check if the answer is correct
          if ($userAnswer === $correctAnswer) {
            echo "Bonne réponse !<br><br>";
          } else {
            echo "Mauvaise réponse.<br><br>";
          }
        } else {
          echo "Error: " . mysqli_stmt_error($stmt) . "<br>";
        }

        mysqli_stmt_close($stmt);
      }
    } else {
      echo "Aucune réponse soumise.";
    }
  }

  mysqli_close($conn);
  ?>
  </div>
</body>
</html>
A voir également:

2 réponses

jordane45 Messages postés 38453 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 mars 2025 4 740
11 juin 2023 à 08:33

Bonjour,

l nest pas reconnu (undefined array key login)alors que j'ai mis un post dans l'autre page

Oulalala...on a du mal à comprendre ...

Tu dis avoir mis un "post" .. et tu récupères la donnée en GET ?

=> En GET .. donc.. la variable se trouve DANS L'URL ...

Tu devrais, pour commencer,  écrire ta ligne 17 comme tu l'as fait ligne 51 ...

Ensuite... que vient faire ici la ligne 42 ?

Sachant que tu as déjà un FORM à la ligne 31 ...


0

Bonjour,

Erreur de base : quand on utilise la méthode POST pour un formulaire, les variables ont transmises dans le tableau $_POST.

Ensuite, pour éviter une erreur, le minimum est de prévoir des tests pour vérifier si la valeurs existe et lui affecter une valeur par défaut, ou bien afficher un message d'erreur.

Exemples :

if (!isset($_POST['login'])) {    // La variable login manque
    echo "Le login est obligatoire !"
} else {    // La variable login est indiquée
    $login = $_POST['login'];
    // On continue à traiter le formulaire
}
/* On récupère la variable reponse1,
   mais si elle n'existe pas, on la laisse vide, 
   ainsi elle existe toujours mais peut ne pas être remplie */
$response_question_1 = (isset($_POST['reponse1']) ? $_POST['response1'] : "");

// NOTE : if (array_key_exists('login',$_POST)) { ... fonctionne aussi.
0