Problème dans un système de points
Fermé
Mickael86480
Messages postés
660
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
11 mars 2021
-
Modifié par Mickael86480 le 19/02/2012 à 01:03
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 - 28 févr. 2012 à 14:10
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 - 28 févr. 2012 à 14:10
A voir également:
- Problème dans un système de points
- Restauration systeme - Guide
- Créer une carte avec des points - Guide
- Points de suite word - Guide
- Comment refaire le système d'un ordinateur - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
2 réponses
A moins que ce soit volontaire,etant donné que les points ne peuvent aller qu'en décroissant, pourquoi ne pas stopper le quizz dès que l'utilisateur tombe à 0 point plutôt que de lui reposer une question ?
Sinon, ta portion de code PHP suivante est a l'intérieur de balise Javascript, en général ca fait pas bon ménage. Le problème vient du fait que question est une variable déclarée en JS, et que tu essayes de la traiter en tant que PHP, ca ne peut pas fonctionner.
Sinon, ta portion de code PHP suivante est a l'intérieur de balise Javascript, en général ca fait pas bon ménage. Le problème vient du fait que question est une variable déclarée en JS, et que tu essayes de la traiter en tant que PHP, ca ne peut pas fonctionner.
<?php if(question == 0){ echo 'point = 100;'; } else if(!empty($_POST['point'])){ echo 'point = '.$_POST['point'].';'; } else if(question > 0 && $_POST['point'] == 0){ echo 'point = 0;'; } else if(empty($_POST['point'])){ echo 'point = 20;'; } if(!empty($_POST['question'])) { echo 'question = '.$_POST['question'].';'; } ?>
Sombresonge
Messages postés
106
Date d'inscription
mardi 7 février 2012
Statut
Membre
Dernière intervention
19 avril 2015
9
19 févr. 2012 à 11:16
19 févr. 2012 à 11:16
var question = $_POST['question']
Normal qu'il te sorte NaN, vu que tu tentes d'affecter une valeur PHP à une variable Javascript (comme dit plus haut, ça ne fonctionne pas).
Le mieux, ce serait d'enregistrer ta valeur PHP dans un élément (un input hidden par exemple), et de le récupérer via ton JS avec getElementById(id_input).value.
Sinon pour ta portion de code, tu devrais quand même la sortir des balises script. Ca ne t'empêche pas d'afficher ton texte au même endroit précis.
Mickael86480
Messages postés
660
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
11 mars 2021
35
19 févr. 2012 à 15:34
19 févr. 2012 à 15:34
Le hidden je le fais dans le script JS, je ne sais pas si c'est ici mais c'est bizarre car sa fonctionne, c'est juste quand point = 0 que sa coince.
<input type="hidden" value="' + question + '" name="question">
Mickael86480
Messages postés
660
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
11 mars 2021
35
19 févr. 2012 à 22:12
19 févr. 2012 à 22:12
$_POST['question'] c'est pour le php, et pour le JS c'est comment car je pense qu'en résolvant ce problème, tout serai ok pour la suite.
merci
merci
Sombresonge
Messages postés
106
Date d'inscription
mardi 7 février 2012
Statut
Membre
Dernière intervention
19 avril 2015
9
20 févr. 2012 à 13:11
20 févr. 2012 à 13:11
A mon avis, ce serait vraiment plus simple si tu incluais dans ton formulaire 2 champs hidden "question" et "point", et surtout de ne pas les placer dans des balises script car techniquement c'est incorrect niveau code. Il est possible que ça fonctionne sous certains navigateurs pas trop sensible (du genre IE), mais il y aura forcément des bugs sur des navigateurs plus propre.
Tu fais donc deux champs hidden, et a chaque validation de formulaire, tu modifies les valeurs en questions EN PHP. (avec value="$_POST['question']").
Dans ton cas, le JS il est juste là pour contrôler tes champs et afficher à l'utilisateur où il se situe, mais le calcul réel des points doit se faire au niveau du PHP..
Une fois le formulaire valider, tu traites les données comme suit :
Et à partir de là tu fais tes contrôles pour savoir quoi afficher à l'utilisateur.
Tu fais donc deux champs hidden, et a chaque validation de formulaire, tu modifies les valeurs en questions EN PHP. (avec value="$_POST['question']").
Dans ton cas, le JS il est juste là pour contrôler tes champs et afficher à l'utilisateur où il se situe, mais le calcul réel des points doit se faire au niveau du PHP..
Une fois le formulaire valider, tu traites les données comme suit :
$question = $_POST['question']; $point= $_POST['point']; $reponse = $_POST['reponse ']; // le champ indiquant si la réponse était juste ou fausse if($reponse == false) { $point -= 10; }
Et à partir de là tu fais tes contrôles pour savoir quoi afficher à l'utilisateur.
Mickael86480
Messages postés
660
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
11 mars 2021
35
Modifié par Mickael86480 le 20/02/2012 à 14:25
Modifié par Mickael86480 le 20/02/2012 à 14:25
ok merci je vais tester ça et je te tiens au courant
Mickael86480
Messages postés
660
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
11 mars 2021
35
20 févr. 2012 à 14:38
20 févr. 2012 à 14:38
Je te mets en gras les modifs que j'ai apporté, dit moi si c'est à quoi tu pensais :
<?php // On démarre la session AVANT d'écrire du code HTML session_start(); ?> <html> <head> <title>Capitale</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <meta name="generator" content="HAPedit 2.6"> </head> <body bgcolor="#FFFFaa"> <?php include ("connection.php"); $point = $_POST['pts']; $identifiant = $_SESSION['pseudo']; $question = $_POST['qts'] + 1; $passage = rand(1, 2); if($question <= 5){ if($passage == 1) $id = rand(1, 10); if($passage == 2) $id = rand(11, 20); } if(($question > 5) && ($question <= 10)){ if($passage == 1) $id = rand(21, 30); if($passage == 2) $id = rand(31, 40); } if(($question > 10) && ($question <= 15)){ if($passage == 1) $id = rand(41, 50); if($passage == 2) $id = rand(51, 60); } if(($question > 15) && ($question <= 20)){ if($passage == 1) $id = rand(61, 70); if($passage == 2) $id = rand(71, 80); } //niveau facile if($question <= 5){ if($question == 1){ ?> <script language="JavaScript"> alert("Niveau 'facile' du quizz"); </script> <?php $time = mktime(date(G), date(i), date(s)); $requetedebut = "UPDATE quizz SET debut=".$time." WHERE identifiant=\"".$identifiant."\""; mysql_query($requetedebut); } if($question == 2){ $requetefinale = "SELECT * FROM 'quizz' WHERE identifiant like ('".$identifiant."')"; $show = mysql_query($requetefinale)or die(mysql_error()); while ($data = mysql_fetch_array($show)){ $essai = $data['essaiscap'] + 1; $requeteessai = "UPDATE 'quizz' SET essaiscap=\"".$essai."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requeteessai)or die(mysql_error()) ; } } $requete = "SELECT * FROM capitale WHERE niveau=1 AND passage=".$passage." AND id=".$id.""; $query = mysql_query($requete); } if($question == 6){ ?> <script language="JavaScript"> alert("Niveau 'moyen' du quizz"); </script> <?php } //niveau moyen if(($question > 5) && ($question <= 10)){ $requete = "SELECT * FROM capitale WHERE niveau=2 AND passage=".$passage." AND id=".$id.""; $query = mysql_query($requete); } if($question == 11){ ?> <script language="JavaScript"> alert("Niveau 'dur' du quizz"); </script> <?php } //niveau dur if(($question > 10) && ($question <= 15)){ $requete = "SELECT * FROM capitale WHERE niveau=3 AND passage=".$passage." AND id=".$id.""; $query = mysql_query($requete); } if($question == 16){ ?> <script language="JavaScript"> alert("Niveau 'expert' du quizz"); </script> <?php } //niveau expert if(($question > 15) && ($question <= 20)){ $requete = "SELECT * FROM capitale WHERE niveau=4 AND passage=".$passage." AND id=".$id.""; $query = mysql_query($requete); } if(($question >= 1) && ($question <= 20)){ while($bonnereponse = mysql_fetch_array($query)){ echo'<table><center><font size="2" face="verdana"><b>Quelle est la capitale de '.$bonnereponse['nom_pays'].' ?</b><br><br></center></table>'; echo'<br>qts:'.$question.'<br>pts:'.$_POST['point'].''; echo'<div id="Reponse"> <center><b>Total des points : '; if(!empty($_POST['point'])) echo ''.$_POST['point'].''; else if($question == 1) echo '100'; else if(($_POST['point'] == 0)/* && ($question < 1)*/) echo '0'; echo '</b></center></div> <div id="Question" align="center"> <table> '; echo '</b></center></table></div> <div id="Choix" align="center"> <table><center> '; echo'<div id="Faux"> <center><b> </b></center></div><br>'; //autres réponses if($question <= 5){ $requeteglobal = "SELECT * FROM capitale WHERE niveau=1 AND passage=".$passage." ORDER BY capitale"; $queryglobal = mysql_query($requeteglobal); } if(($question > 5) && ($question <= 10)){ $requeteglobal = "SELECT * FROM capitale WHERE niveau=2 AND passage=".$passage." ORDER BY capitale"; $queryglobal = mysql_query($requeteglobal); } if(($question > 10) && ($question <= 15)){ $requeteglobal = "SELECT * FROM capitale WHERE niveau=3 AND passage=".$passage." ORDER BY capitale"; $queryglobal = mysql_query($requeteglobal); } if(($question > 15) && ($question <= 20)){ $requeteglobal = "SELECT * FROM capitale WHERE niveau=4 AND passage=".$passage." ORDER BY capitale"; $queryglobal = mysql_query($requeteglobal); } while($mauvaisereponse = mysql_fetch_array($queryglobal)){ echo'<center><input type="radio" name="Liste" id="'.$mauvaisereponse['capitale'].'" onClick="Radio();">'.$mauvaisereponse['capitale'].'</center><br> <input type=hidden name=qts value='.$question.'> <input type=hidden name=pts value='.$point.'>'; } if($question == 0){ echo 'point = 100;'; } else if(!empty($_POST['point'])){ echo 'point = '.$_POST['point'].';'; } else if($question > 0 && $_POST['point'] == 0){ echo 'point = 0;'; } else if(empty($_POST['point'])){ echo 'point = 20;'; } if(!empty($_POST['question'])) { echo 'question = '.$_POST['question'].';'; } ?> <script type="text/javascript"> function Radio() { if (document.getElementById('<?php echo $bonnereponse['capitale']; ?>').checked == true) { question = question + 1 document.getElementById('Reponse').innerHTML = '<center><b>Total des points : ' + point +'</b></center>'; document.getElementById('Question').innerHTML = '<br><center><b>Question n° : ' + question +'</b></center>'; document.getElementById('Choix').innerHTML = '<br><b>Bonne réponse <?php echo $bonnereponse['capitale']; ?></b><br><br><form action="capitale.php" method="POST"><input type="hidden" value="' + point + '" name="point"><input type="hidden" value="' + question + '" name="question"><input type="submit" value="Capitale suivante" name="boutonquestion"></form>'; } else { point = point - 10 document.getElementById('Reponse').innerHTML = '<center><b>Total des points : ' + point +'</b></center>'; } } </script> <?php } } if($question == 21){ $time = mktime(date(G), date(i), date(s)); $requetefin = "UPDATE quizz SET fin=".$time." WHERE identifiant=\"".$identifiant."\""; mysql_query($requetefin); $requetefinale = "SELECT * FROM 'quizz' WHERE identifiant like ('".$identifiant."')"; $show = mysql_query($requetefinale)or die(mysql_error()); while ($data = mysql_fetch_array($show)){ $essai = $data['essaiscap']; //si on bat le meilleur score if($point > $data['capitale']){ if($essai < 1){ echo'<center><b>Vous avez battu votre meilleur score, félicitation, il passe de '.$data['capitale'].' à '.$point.'</b></center>'; } if($essai == 1){ echo'<center><b>Votre meilleur score est '.$point.', bravo.</b></center>'; } $requete = "UPDATE 'quizz' SET capitale=\"".$point."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; $requete = "UPDATE 'quizz' SET meilleurcap=\"".$essai."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; $tempsdebut = $data['debut']; $tempsfin = $data['fin']; $tps = $tempsfin - $tempsdebut; if($essai == 1){ $requetemeilleur = "UPDATE 'quizz' SET meilleurtpscap=\"".$tps."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requetemeilleur); } else if($data['meilleurtpscap'] > $tps){ $requetemeilleur = "UPDATE 'quizz' SET meilleurtpscap=\"".$tps."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requetemeilleur); $requetemeilleur = "UPDATE 'quizz' SET meilleurcap=\"".$essai."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requetemeilleur); } else{ $requetemeilleur = "UPDATE 'quizz' SET meilleurtpscap=\"".$tps."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requetemeilleur); } } //si on ne bat pas le meilleur score if($point < $data['capitale']){ if($essai < 1){ echo'<center><b>Vous n\'avez pas battu votre meilleur score, dommage, il est de '.$data['capitale'].' et vous avez réalisé '.$point.'</b></center>'; } if($essai == 1){ echo'<center><b>Votre meilleur score est '.$point.', bravo.</b></center>'; $tempsdebut = $data['debut']; $tempsfin = $data['fin']; $tps = $tempsfin - $tempsdebut; $requete = "UPDATE 'quizz' SET capitale=\"".$point."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; $requete = "UPDATE 'quizz' SET meilleurcap=\"".$essai."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; $requete = "UPDATE 'quizz' SET meilleurtpscap=\"".$tps."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; } } //si on égalise le meilleur score if($point == $data['capitale']){ if($essai < 1){ echo'<center><b>Vous avez égalé votre meilleur score, bravo, il est toujours de '.$data['capitale'].'</b></center>'; } if($essai == 1){ echo'<center><b>Votre meilleur score est '.$point.', bravo.</b></center>'; $requete = "UPDATE 'quizz' SET capitale=\"".$point."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; $requete = "UPDATE 'quizz' SET meilleurcap=\"".$essai."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; } $tempsdebut = $data['debut']; $tempsfin = $data['fin']; $tps = $tempsfin - $tempsdebut; if($essai == 1){ $requetemeilleur = "UPDATE 'quizz' SET meilleurtpscap=\"".$tps."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requetemeilleur); } if($data['meilleurtpscap'] > $tps){ $requetemeilleur = "UPDATE 'quizz' SET meilleurtpscap=\"".$tps."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requetemeilleur); $requete = "UPDATE 'quizz' SET meilleurcap=\"".$essai."\" WHERE identifiant=\"".$identifiant."\""; mysql_query($requete)or die(mysql_error()) ; } } } echo'<br><center><br><form action="capitale.php" method="post"> <input type="submit" name="recommencer" value="Recommencer"></form></center>'; } ?> </body> </html>
19 févr. 2012 à 02:40
Donc j'ai modifié comme tu me l'as dis, mais ensuite la fonction radio() ne fonctionne plus.
Le problème, je pense, vient de la valeur que prend question, j'ai bien tenté un mais cela ne fonctionne pas car il m'affiche question n° : NaN donc j'ai seulement trouvé qui fonctionne à peu près bien, a part le problème que je vous signale.
En fait, l'affichage est ok, le problème c'est la valeur réelle des points, car lorsque l'utilisateur a 0 pt et qu'il trouve la bonne réponse au lieu d'avoir 0 pt il en a 100. Je pense, je suis pas sur, mais il doit y avoir confusion entre la valeur de point et la valeur de question, car lorsque point = 10 pas de problème pour la suite, il est toujours à 10, de même pour les valeurs négative. Le problème c'est pour le 0, il revient à 100 et comme par hasard, dans le code il y lorsque question = 0, point =100.
Bon je ne sais pas si je suis clair donc je vous mets un lien vers mon site pour que vous voyez par vous même.
http://mickael.bernaudeau.free.fr/index.htm
merci de votre aide