Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1739 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Exercice html, php, mysql, javascript

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exercice html, php, mysql, javascript

n°2401645
kewan
Posté le 28-11-2021 à 01:12:37  profilanswer
 

Salut tout le forum  :hello: ,
 
J’ai besoin de votre aide.
 
Je voudrais créer un exercice en html, php, javascript et avec msql.
 
L’exercice consiste à remplir des zones de texte.
 
Je souhaite créer un bouton pour corriger et évaluer.
 
Au clic sur le bouton, les bonnes réponses sont comptées, les bonnes réponses passent en vert et les mauvaises en rouges.
 
Les solutions sont dans une base de données mysql.
 
Je sais :
Lire les solutions dans mysql
Comparer la réponse de l’utilisateur à la solution
 
Je ne sais pas
Modifier la couleur de la zone de texte suivant le résultat de la comparaison
 
Faut-il que je passe un script javascript ou modifier le css et la class ?
 
Merci pour votre aide.

mood
Publicité
Posté le 28-11-2021 à 01:12:37  profilanswer
 

n°2401743
mechkurt
Posté le 29-11-2021 à 10:06:38  profilanswer
 

Ou en est tu de ton code ?
Est ce que ton formulaires et en post, tu fait toutes tes vérifications en php/mysql et tu génères le html d'affichage de réponse ?
 
Si oui il te suffit d'ajouter des classes du genre true et false et d'avoir du css pour leur donner un style.
 
Exemple rapide :

Code :
  1. <html>
  2. <head>
  3. <style>
  4. .true {color:green;}
  5. .false {color:red;}
  6. </style>
  7. <body>
  8. <label class="true">Réponse correct : <input class="true" type="text" value="vrai" /></label><br>
  9. <label class="false">Réponse fausse: <input class="false" type="text" value="faux" /></label><br>
  10. </body>
  11. </html>


---------------
D3
n°2401955
kewan
Posté le 30-11-2021 à 22:08:52  profilanswer
 

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 :
  1. <!DOCTYPE html>
  2. <html lang="fr">
  3. <head>
  4.  <meta charset="utf-8"/>
  5.  <title>Exercice</title>
  6.         <style>
  7.             .mauvaiseReponse{background-color: rgba(255, 0, 0, 0.5);}
  8.             .bonneReponse{background-color: rgba(0, 128, 0, 0.5);}
  9.         </style>
  10. </head>
  11. <body>
  12.  <form id="formulaire" method="POST">
  13.             Réponse 1 : <input type="text" name="1" id="1" value=""/><br>
  14.             Réponse 2 : <input type="text" name="2" id="2" value=""/><br>
  15.             Réponse 3 : <input type="text" name="3" id="3" value=""/><br>
  16.             <input type="submit" value="Corriger"/><br>
  17.             Nombre de tentatives : <input type="text" name="nbreTentative" id="nbreTentative" value="0" size="5" readonly="readonly"/><br>
  18.             Nombre de points : <input type="text" name="evaluation" id="evaluation" value="3" size="5" readonly="readonly"/><br>
  19.             Exercice terminé : <input type="text" name="exerciceTermine" id="exerciceTermine" value="Non" size="5" readonly="readonly"/>
  20.         </form>
  21.  <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
  22.  <script type="text/javascript" src="../js/script.js"></script>
  23. </body>
  24. </html>


 
Le javascript

Code :
  1. $(document).ready(function () {
  2. $("#formulaire" ).submit(function () {
  3.  if (document.getElementById("exerciceTermine" ).value == "Non" ) {
  4.             document.getElementById("nbreTentative" ).value++;
  5.             let nbreErreur = 0;
  6.             for (let i = 1; i <= 3; i++) {
  7.                 var reponse = $('#' + i + '').val();
  8.                 $.post('../page/comparer.php', { reponse: reponse, i:i }, function (donnees) {
  9.                     if (donnees == 0) {
  10.                         nbreErreur = 1;
  11.                         document.getElementById(i).className = "mauvaiseReponse";
  12.                         document.getElementById("evaluation" ).value = Number(document.getElementById("evaluation" ).value) - 0.5;
  13.                     } else if (donnees == 1) {
  14.                         document.getElementById(i).className = "bonneReponse";
  15.                     }
  16.                 })
  17.             }
  18.             if (nbreErreur == 0) {
  19.                 document.getElementById("exerciceTermine" ).value = "Oui";
  20.                 enregistrerEvaluation();
  21.             }
  22.         }
  23.  return false;
  24.     })
  25. });
  26. function enregistrerEvaluation() {
  27. var nbreTentative = $("#nbreTentative" ).val();
  28. var evaluation = $("#evaluation" ).val();
  29. $.post('../page/envoyer.php', { nbreTentative: nbreTentative, evaluation: evaluation }, function () { })
  30. }


Le fichier comparer.php

Code :
  1. <?php
  2.     if(isset($_POST['reponse']) && !empty($_POST['reponse'])) {
  3.         try{
  4.             $bddIntervention = new PDO('mysql:host=localhost;dbname=maBaseDeDonnees;charset=utf8','monIdentifiant','monMotDePasse',
  5.             array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  6.         }
  7.         catch (Exception $e){
  8.             die('Erreur : ' . $e->getMessage());
  9.         }
  10.         $chReponse = $bddIntervention->prepare('SELECT reponse FROM reponses');
  11.         $chReponse->execute();
  12.         $reponse = $chReponse->fetch();
  13.         $reponses = unserialize($reponse['reponse']);
  14.         $chReponse->closeCursor();
  15.         $emplacement = $_POST['i'] - 1;
  16.         if($_POST['reponse'] != $reponses[$emplacement]){
  17.             echo 0;
  18.         }else{
  19.             echo 1;
  20.         }
  21.     }
  22. ?>


le fichier envoyer.php

Code :
  1. <?php
  2.     if(isset($_POST['nbreTentative'],$_POST['evaluation']) && !empty($_POST['nbreTentative']) && !empty($_POST['evaluation'])){
  3.         try{
  4.             $bddIntervention = new PDO('mysql:host=localhost;dbname=maBaseDeDonnees;charset=utf8','monIdentifiant','monMotDePasse',
  5.             array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  6.         }
  7.         catch (Exception $e){
  8.             die('Erreur : ' . $e->getMessage());
  9.         }
  10.  $in = $bddIntervention->prepare("INSERT INTO candidatReponses (nbrTentatives, nbrPoints) VALUES(:nbrTentatives, :nbrPoints)" );
  11.  $in->bindValue('nbrTentatives', $_POST['nbreTentative'], PDO::PARAM_INT);
  12.  $in->bindValue('nbrPoints',  $_POST['evaluation'],  PDO::PARAM_INT);
  13.  $in->execute();
  14.  $in->closeCursor();
  15. }
  16. ?>


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 :
  1. if (nbreErreur == 0) {
  2.                 document.getElementById("exerciceTermine" ).value = "Oui";
  3.                 enregistrerEvaluation();
  4.             }


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
n°2401979
mechkurt
Posté le 01-12-2021 à 10:04:47  profilanswer
 

Ok, donc tu le fait en AJAX, c'est probablement mieux même si c'est un peu plus compliqué... ^^
Il faut que tu comprennes que quand tu envoie une requête AJAX au serveur, sa réponse n'est pas instantané, par contre vu que ton appel est dans une fonction anonyme, le script JS de ta page continue son exécution...
Donc quand tu fais une boucle sur l'envoi de tout tes posts, la réponse a ces posts se fait plus tard, par contre l’exécution de ta boucle continue et tu atteint le if sans que les réponses ai été reçu (sans compter que y'a ptet un problème de portée de ta variable aussi du coups).
 
Bref, soit tu récupères toutes tes solutions en un appel et tu testes toutes tes réponses "en une fois" (ça me semble mieux car ça limite le nombre de requêtes au serveur), soit tu met tes réponses dans un tableau et tu testes a chaque fois que tu as une réponse si toutes sont bien arrivées (en vérifiant la longueur de ton tableau par exemple).


---------------
D3
n°2402090
kewan
Posté le 01-12-2021 à 18:45:31  profilanswer
 

Bonjour, merci pour les infos.  :jap:

mechkurt a écrit :

tu récupères toutes tes solutions en un appel et tu testes toutes tes réponses "en une fois"


Si je teste tout en une fois est-ce qu'il est possible en suite de passer en vert les bonnes réponses et de passer en rouge les mauvaises ?


Message édité par kewan le 01-12-2021 à 18:46:34
n°2402142
mechkurt
Posté le 02-12-2021 à 09:44:05  profilanswer
 

Oui bien sur, tu peux faire ce que tu veux ! ^^
 
Peut être qu'il serait plus simple pour toi dans un premier temps de soumettre ton form en ajax, de vérifier chaque valeur, de renvoyer le code html avec les bonnes classes et de le ré-afficher avec un code de ce genre :
$('form#formulaire').html(retour_serveur);
 
https://api.jquery.com/jquery.post/


---------------
D3
n°2402491
kewan
Posté le 04-12-2021 à 07:50:50  profilanswer
 

Bonjour,
 
Voilà où j'en suis :
 
Le formulaire :

Code :
  1. <!DOCTYPE html>
  2. <html lang="fr">
  3.     <head>
  4.         <meta charset="utf-8"/>
  5.         <title>Exercice</title>
  6.         <style>
  7.             .mauvaiseReponse{background-color: rgba(255, 0, 0, 0.5);}
  8.             .bonneReponse{background-color: rgba(0, 128, 0, 0.5);}
  9.         </style>
  10.     </head>
  11.     <body>
  12.         <form id="formulaire" method="POST">
  13.             Réponse 1 : <input type="text" name="1" id="1" value="1"/><br>
  14.             Réponse 2 : <input type="text" name="2" id="2" value="1"/><br>
  15.             Réponse 3 : <input type="text" name="3" id="3" value="1"/><br>
  16.             <input type="submit" value="Corriger"/><br>
  17.             Nombre de tentatives : <input type="text" name="nbreTentative" id="nbreTentative" value="0" size="5" readonly="readonly"/><br>
  18.             Nombre de points : <input type="text" name="evaluation" id="evaluation" value="3" size="5" readonly="readonly"/><br>
  19.             Exercice terminé : <input type="text" name="exerciceTermine" id="exerciceTermine" value="Non" size="5" readonly="readonly"/>
  20.         </form>
  21.         <div id="afficher"></div>
  22.         <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
  23.         <script type="text/javascript" src="../js/script2.js"></script>
  24.     </body>
  25. </html>


 
Le script :

Code :
  1. $(document).ready(function () {
  2. $("#formulaire" ).submit(function () {
  3.         if (document.getElementById("exerciceTermine" ).value == "Non" && verifierSiComplet() != 0) {
  4.             var reponse1 = $('#1').val();
  5.             var reponse2 = $('#2').val();
  6.             var reponse3 = $('#3').val();
  7.             var nbreTentative = $('#nbreTentative').val();
  8.             var evaluation = $('#evaluation').val();
  9.             var exerciceTermine = $('#exerciceTermine').val();
  10.             $.post('../page/comparer2.php', {
  11.                 reponse1: reponse1,
  12.                 reponse2: reponse2,
  13.                 reponse3: reponse3,
  14.                 nbreTentative: nbreTentative,
  15.                 evaluation: evaluation,
  16.                 exerciceTermine: exerciceTermine
  17.             }, function (donnees) {
  18.                 $('#formulaire').html();
  19.                 $('#formulaire').html(donnees);
  20.             })
  21.         }
  22.  return false;
  23.     })
  24. });
  25. function verifierSiComplet() {
  26. for (var i = 1; i <= 3; i++){
  27.  if (document.getElementById(i).value == "" ) {
  28.             alert("Impossible de corriger, il manque au moins une réponse." );
  29.             return 0;
  30.  }
  31.     }
  32. }
  33. function enregistrerEvaluation() {
  34. var nbreTentative = $("#nbreTentative" ).val();
  35. var evaluation = $("#evaluation" ).val();
  36. $.post('../page/envoyer.php', { nbreTentative: nbreTentative, evaluation: evaluation }, function () { })
  37. }


 
Le fichier comparer :

Code :
  1. <?php
  2.  include("/var/www/tp/_connexionBddIntervention.php" );
  3.  $chReponse = $bddIntervention->prepare('SELECT reponse FROM reponses');
  4.  $chReponse->execute();
  5.  $reponse = $chReponse->fetch();
  6.  $reponses = unserialize($reponse['reponse']);
  7.  $chReponse->closeCursor();
  8.  $erreur = 0;
  9.  $nbreTentative = $_POST['nbreTentative'] + 1;
  10.  for ($i = 1; $i <= 3 ; $i++) {
  11.   if($_POST['reponse'.$i] != $reponses[$i - 1]){
  12.    $erreur = 1;
  13.    ?>Réponse <?php echo $i;?> : <input type="text" name="<?php echo $i;?>" id="<?php echo $i;?>" class="mauvaiseReponse" value="<?php echo $_POST['reponse'.$i];?>"><br><?php
  14.   }else{
  15.    ?>Réponse <?php echo $i;?> : <input type="text" name="<?php echo $i;?>" id="<?php echo $i;?>" class="bonneReponse" value="<?php echo $_POST['reponse'.$i];?>"><br><?php
  16.   }
  17.  }
  18.  ?><input type="submit" value="Corriger"/><br><?php
  19.  if($erreur == 1){
  20.     ?>
  21.    Nombre de tentatives : <input type="text" name="nbreTentative" id="nbreTentative" value="<?php echo $nbreTentative;?>" size="5" readonly="readonly"/><br>
  22.    Nombre de points : <input type="text" name="evaluation" id="evaluation" value="<?php echo $_POST['evaluation'] - 0.5;?>" size="5" readonly="readonly"/><br>
  23.    Exercice terminé : <input type="text" name="exerciceTermine" id="exerciceTermine" value="Non" size="5" readonly="readonly"/>
  24.   <?php
  25.  }else{
  26.   ?>
  27.    Nombre de tentatives : <input type="text" name="nbreTentative" id="nbreTentative" value="<?php echo $nbreTentative;?>" size="5" readonly="readonly"/><br>
  28.    Nombre de points : <input type="text" name="evaluation" id="evaluation" value="<?php echo $_POST['evaluation'];?>" size="5" readonly="readonly"/><br>
  29.    Exercice terminé : <input type="text" name="exerciceTermine" id="exerciceTermine" value="Oui" size="5" readonly="readonly"/>
  30.   <?php
  31.  }
  32. ?>


 
Je suis pas très fan de ce code, renvoyer le code html n'est pas très flexible.
 
Je ne sais pas comment récupérer l'information que l'exercice est terminé pour pouvoir faire appel à la fonction enregistrerEvaluation().


Message édité par kewan le 04-12-2021 à 07:53:37
n°2402717
mechkurt
Posté le 06-12-2021 à 11:00:55  profilanswer
 

C'est très verbeux, pourquoi dupliquer ton code html dans chaque partie du else alors que seule une infime partie diffère ?
Par exemple :

Code :
  1. for ($i = 1; $i <= 3 ; $i++) {
  2.   $classe = 'bonneReponse';
  3.   if($_POST['reponse'.$i] != $reponses[$i - 1]){
  4.    $erreur = 1;
  5.    $classe = 'bonneReponse';
  6.   }
  7.    ?>Réponse <?php echo $i;?> : <input type="text" name="<?php echo $i;?>" id="<?php echo $i;?>" class="<?php classe $i;?>" value="<?php echo $_POST['reponse'.$i];?>"><br><?php


De la même manière au lieu d'envoyer toutes tes variables après les avoir récupéré, soumet carrément ton formulaire en ajax.
https://api.jquery.com/serialize/
 
Enfin si tu veux étudier une nouvelle piste moins lourde que de renvoyer tout l'html, tu peux renvoyer un tableau en json et faire l'application des classes et du résultat en javascript coté client...


---------------
D3
n°2403044
rufo
Pas me confondre avec Lycos!
Posté le 08-12-2021 à 08:02:08  profilanswer
 

Attention, le coup d'envoyer du json au navigateur pour mettre à jour une partie de la mage web, c'est en général pas exploitable par les personnes ayant un handicap visuel, leur lecteur d'écran ne détectant pas les changements et ne sachant pas à quel endroit les changements ont été fait. :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2403097
mechkurt
Posté le 08-12-2021 à 14:47:25  profilanswer
 

Oui c'est vrai que y'a aussi le soucis de l’accessibilité dans ce cas (mais il envoie déjà de l'html en ajax :- /).


---------------
D3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Exercice html, php, mysql, javascript

 

Sujets relatifs
Excel+PHP/Mysqlhébergement de page html
Mediawiki : pb avec génération de javascript dans un articleEncodage RSA Javascript Vs Java
un problème de lien php dans le html[Résolu] Pb de regexp avec Mysql
MySQL : forcer la position d'un résultat ?Javascript suggestion dans textarea
HTML Select et OnClick() ne fonctionne pas sur SafariJavascript API / Recuperer le resultat
Plus de sujets relatifs à : Exercice html, php, mysql, javascript


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR