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 politesseajouté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>
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.