kewan | Bonjour,
j'ai suivi ces 3 vidéos.
Extraire les données sans recharger la page PHP
Tutoriel PHP/jQuery : Poster un formulaire en Ajax
Apprendre à utiliser ajax
Voilà où j'en suis,
à la soumission du formulaire, avec javascript et ajax je compare les bonnes réponses stockées dans mysq avec les réponses envoyées par le candidat.
Le HTML
Code :
- <!DOCTYPE html>
- <html lang="fr">
- <head>
- <meta charset="utf-8"/>
- <title>Exercice</title>
- <style>
- .mauvaiseReponse{background-color: rgba(255, 0, 0, 0.5);}
- .bonneReponse{background-color: rgba(0, 128, 0, 0.5);}
- </style>
- </head>
- <body>
- <form id="formulaire" method="POST">
- Réponse 1 : <input type="text" name="1" id="1" value=""/><br>
- Réponse 2 : <input type="text" name="2" id="2" value=""/><br>
- Réponse 3 : <input type="text" name="3" id="3" value=""/><br>
- <input type="submit" value="Corriger"/><br>
- Nombre de tentatives : <input type="text" name="nbreTentative" id="nbreTentative" value="0" size="5" readonly="readonly"/><br>
- Nombre de points : <input type="text" name="evaluation" id="evaluation" value="3" size="5" readonly="readonly"/><br>
- Exercice terminé : <input type="text" name="exerciceTermine" id="exerciceTermine" value="Non" size="5" readonly="readonly"/>
- </form>
- <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
- <script type="text/javascript" src="../js/script.js"></script>
- </body>
- </html>
|
Le javascript
Code :
- $(document).ready(function () {
- $("#formulaire" ).submit(function () {
- if (document.getElementById("exerciceTermine" ).value == "Non" ) {
- document.getElementById("nbreTentative" ).value++;
- let nbreErreur = 0;
- for (let i = 1; i <= 3; i++) {
- var reponse = $('#' + i + '').val();
- $.post('../page/comparer.php', { reponse: reponse, i:i }, function (donnees) {
- if (donnees == 0) {
- nbreErreur = 1;
- document.getElementById(i).className = "mauvaiseReponse";
- document.getElementById("evaluation" ).value = Number(document.getElementById("evaluation" ).value) - 0.5;
- } else if (donnees == 1) {
- document.getElementById(i).className = "bonneReponse";
- }
- })
- }
- if (nbreErreur == 0) {
- document.getElementById("exerciceTermine" ).value = "Oui";
- enregistrerEvaluation();
- }
- }
- return false;
- })
- });
- function enregistrerEvaluation() {
- var nbreTentative = $("#nbreTentative" ).val();
- var evaluation = $("#evaluation" ).val();
- $.post('../page/envoyer.php', { nbreTentative: nbreTentative, evaluation: evaluation }, function () { })
- }
|
Le fichier comparer.php
Code :
- <?php
- if(isset($_POST['reponse']) && !empty($_POST['reponse'])) {
- try{
- $bddIntervention = new PDO('mysql:host=localhost;dbname=maBaseDeDonnees;charset=utf8','monIdentifiant','monMotDePasse',
- array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
- }
- catch (Exception $e){
- die('Erreur : ' . $e->getMessage());
- }
- $chReponse = $bddIntervention->prepare('SELECT reponse FROM reponses');
- $chReponse->execute();
- $reponse = $chReponse->fetch();
- $reponses = unserialize($reponse['reponse']);
- $chReponse->closeCursor();
- $emplacement = $_POST['i'] - 1;
- if($_POST['reponse'] != $reponses[$emplacement]){
- echo 0;
- }else{
- echo 1;
- }
- }
- ?>
|
le fichier envoyer.php
Code :
- <?php
- if(isset($_POST['nbreTentative'],$_POST['evaluation']) && !empty($_POST['nbreTentative']) && !empty($_POST['evaluation'])){
- try{
- $bddIntervention = new PDO('mysql:host=localhost;dbname=maBaseDeDonnees;charset=utf8','monIdentifiant','monMotDePasse',
- array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
- }
- catch (Exception $e){
- die('Erreur : ' . $e->getMessage());
- }
- $in = $bddIntervention->prepare("INSERT INTO candidatReponses (nbrTentatives, nbrPoints) VALUES(:nbrTentatives, :nbrPoints)" );
- $in->bindValue('nbrTentatives', $_POST['nbreTentative'], PDO::PARAM_INT);
- $in->bindValue('nbrPoints', $_POST['evaluation'], PDO::PARAM_INT);
- $in->execute();
- $in->closeCursor();
- }
- ?>
|
J'obtiens bien le changement de couleur en fonction du résultat de la comparaison des réponses soumises et des réponses stockées dans MySQL.
Ce qui ne fonctionne pas dans le javascript c'est l'enregistrement de l'évaluation. Il se fait directement.
Code :
- if (nbreErreur == 0) {
- document.getElementById("exerciceTermine" ).value = "Oui";
- enregistrerEvaluation();
- }
|
le if est franchi dés la soumission du formulaire. Pourtant en cas de mauvaise réponse la variable nbreErreur est mise à 1 dans la boucle for qui précéde ce if. Message édité par kewan le 30-11-2021 à 22:14:27
|