QCM enregistrer la question quand elle est vue...
Résolu/Fermé
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
-
Modifié le 14 oct. 2017 à 21:49
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 16 oct. 2017 à 15:36
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 16 oct. 2017 à 15:36
A voir également:
- QCM enregistrer la question quand elle est vue...
- Vue satellite en direct gratuit de ma maison - Guide
- Audacity enregistrer son pc - Guide
- Enregistrer en pdf - Guide
- Comment enregistrer une video youtube - Guide
- Enregistrer son ecran - Guide
6 réponses
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
Ambassadeur
1 557
14 oct. 2017 à 22:09
14 oct. 2017 à 22:09
bonsoir, ton explication n'est pas très claire.
je comprends que tu fais un INSERT dès l'apparition de la question pour mémoriser les questions à ne plus montrer.
la suite est assez confuse.
tu écris "cela n'a pas marché", sans expliquer ce qui marche et ce qui ne marche pas.
les INSERT fonctionnent-ils bien, l'information est-elle correcte dans la table info_user?
si je comprends bien, tu es surprise que, dans la table info_user, certaines questions ont le point à 1 et d'autres le point à 0. ai-je bien compris?
je comprends que tu fais un INSERT dès l'apparition de la question pour mémoriser les questions à ne plus montrer.
la suite est assez confuse.
tu écris "cela n'a pas marché", sans expliquer ce qui marche et ce qui ne marche pas.
les INSERT fonctionnent-ils bien, l'information est-elle correcte dans la table info_user?
si je comprends bien, tu es surprise que, dans la table info_user, certaines questions ont le point à 1 et d'autres le point à 0. ai-je bien compris?
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
Ambassadeur
1 557
15 oct. 2017 à 10:27
15 oct. 2017 à 10:27
j'ai peut-être compris ce que tu souhaitais:
le code que tu montres fonctionne bien, mais tu souhaites l'améliorer pour ne pas poser deux fois la même question dans le cas où l'utilisateur n'a pas répondu à la question.
et tu as fais différentes tentatives pour obtenir cela, sans nous montrer le code que tu as essayé, et tu n'es pas content du résultat.
et tu nous demandes des suggestion.
ai-je bien compris?
si oui, je suggère ceci:
- faire le INSERT de $req_q_fait au moment de poser la question, donc après la ligne 105.
- au lieu de faire les INSERT en lignes 74 et 83, faire des UPDATE. une autre possibilité, moins élégante, serait de faire un DELETE avant l'INSERT.
le code que tu montres fonctionne bien, mais tu souhaites l'améliorer pour ne pas poser deux fois la même question dans le cas où l'utilisateur n'a pas répondu à la question.
et tu as fais différentes tentatives pour obtenir cela, sans nous montrer le code que tu as essayé, et tu n'es pas content du résultat.
et tu nous demandes des suggestion.
ai-je bien compris?
si oui, je suggère ceci:
- faire le INSERT de $req_q_fait au moment de poser la question, donc après la ligne 105.
- au lieu de faire les INSERT en lignes 74 et 83, faire des UPDATE. une autre possibilité, moins élégante, serait de faire un DELETE avant l'INSERT.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 11:37
15 oct. 2017 à 11:37
Si je fait un DELETE cela n'a aucun sens vu que la question sera déjà vu par l'utilisateur donc il pourra retombée dessus tot ou tard...
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
Ambassadeur
1 557
15 oct. 2017 à 10:34
15 oct. 2017 à 10:34
autre chose: j'ai l’impression que tu prends des risques en ne suivant pas les conseils suivants à propos de la gestion des erreurs PDO:
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 11:40
15 oct. 2017 à 11:40
Des risques ? Quel risques ?
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 11:45
15 oct. 2017 à 11:45
Car pour me connecter a ma base de données j'ai cela, et j'ai aucune erreur, j'ai juste pas le résultat que j'attend....
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
1 557
>
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
15 oct. 2017 à 11:55
15 oct. 2017 à 11:55
Détectes-tu aussi les erreurs dans les requêtes, comme expliqué?
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 11:59
15 oct. 2017 à 11:59
Mais il en n'a pas d'erreur car tous fonctionne sauf que a mon avis pendant le traitement j'ai des requêtes qui doivent s'effectuer plusieurs fois et je comprend pas pourquoi,...
Mais il est vrai que vu que vous avez pas le code avec la condition supplémentaire il est compliqué de vous rendre compte.
Et je vais mètre vos détections d'erreur comme cela, nous serons au top :)
Mais il est vrai que vu que vous avez pas le code avec la condition supplémentaire il est compliqué de vous rendre compte.
Et je vais mètre vos détections d'erreur comme cela, nous serons au top :)
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
Ambassadeur
1 557
15 oct. 2017 à 12:19
15 oct. 2017 à 12:19
1) à quoi sert la ligne 66?
2) quand l'utilisateur donne une réponse, je pense que ton programme ne vérifie pas que c'est une réponse à la dernière question posée à l'utilisateur.
3) quand l'utilisateur donne une réponse, je pense que ton programme fait comme si c'était la réponse à la prochaine question.
2) quand l'utilisateur donne une réponse, je pense que ton programme ne vérifie pas que c'est une réponse à la dernière question posée à l'utilisateur.
3) quand l'utilisateur donne une réponse, je pense que ton programme fait comme si c'était la réponse à la prochaine question.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 13:51
15 oct. 2017 à 13:51
1) ligne 66 elle sert a réceptionner les informations entré par l'utilisateur.
2) Si il fonctionne très bien, il récupère l'ID de la question, et affiche les propositions suivant cette ID, puis dans la table reponse il y a id / id_question / reponse / correct.
Si correct == 1 alors bravo c'est la bonne réponse sinon Mauvaise réponse.
3) Non a l'heure actuel du code afficher il fonctionne a 100% le seule problème comme je l'est dit si je recharge la page il change de question et cela a l'infinie donc après il est facile de faire un sans faute si tu vas chercher sur internet.
Voila voila, bon je vais voir sa dans la journée pour effectuer une condition pour enregistrer les question non répondu.
2) Si il fonctionne très bien, il récupère l'ID de la question, et affiche les propositions suivant cette ID, puis dans la table reponse il y a id / id_question / reponse / correct.
Si correct == 1 alors bravo c'est la bonne réponse sinon Mauvaise réponse.
3) Non a l'heure actuel du code afficher il fonctionne a 100% le seule problème comme je l'est dit si je recharge la page il change de question et cela a l'infinie donc après il est facile de faire un sans faute si tu vas chercher sur internet.
Voila voila, bon je vais voir sa dans la journée pour effectuer une condition pour enregistrer les question non répondu.
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
1 557
>
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
15 oct. 2017 à 14:12
15 oct. 2017 à 14:12
eh bien, si tu publies l'adresse de ton site, je te montrerai comment tricher facilement.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 14:39
15 oct. 2017 à 14:39
Bas il n'est pas en ligne en faite mais je vais crée une nouvelle table pénalité dès que la question vu par l'user elle est enregistré et dès quel n'est pas dans la table info_user sa enlève des points.... J'aurai plus qu'a comparai les deux....
Oui pour le moment cela est possible mais une fois le problème corriger il est peu probable de tricher vu que je vais mètre un timer en javascript afin de contrôler le temps, et même si cela n'est pas efficace chaque réponse est stocker avec un date time donc pour le classement ce sont les personnes les plus rapide qui serons en tête de liste.
Oui pour le moment cela est possible mais une fois le problème corriger il est peu probable de tricher vu que je vais mètre un timer en javascript afin de contrôler le temps, et même si cela n'est pas efficace chaque réponse est stocker avec un date time donc pour le classement ce sont les personnes les plus rapide qui serons en tête de liste.
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
1 557
15 oct. 2017 à 15:03
15 oct. 2017 à 15:03
je pense que tu peux parfaitement te protéger, simplement, en utilisant complètement
Je pense utile de vérifier à ce moment-là que la réponse correspond bien à la question posée, et, si oui, d'utiliser cette question pour mettre à jour la table info_user (sinon, refuser la réponse).
Je pense que cela éliminera l'anomalie principale que tu observes dans la table info_user.
$_SESSION['Q_id_c']. Tu as fait une partie du travail en l'enregistrant au moment de poser une question, pourquoi ne pas l'exploiter au moment de recevoir une réponse?
Je pense utile de vérifier à ce moment-là que la réponse correspond bien à la question posée, et, si oui, d'utiliser cette question pour mettre à jour la table info_user (sinon, refuser la réponse).
Je pense que cela éliminera l'anomalie principale que tu observes dans la table info_user.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 15:56
15 oct. 2017 à 15:56
Car ça sais un reste du code précédant... Et il y a aucune anomalie je comprend pas, ce code comme je l'est dit fonctionne a 100%
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
Ambassadeur
1 557
15 oct. 2017 à 15:33
15 oct. 2017 à 15:33
il y a un autre problème dans ton code: la page sert soit à poser une question, soit à traiter une réponse.
le code des lignes 16 à 50 contient certaines actions qui doivent être faites dans un seul cas, pas dans les deux.
je te suggère donc de revoir cela, et de déplacer un partie de ce code soit en remplacement de la ligne 66, inutile, soit avant la ligne 105.
le code des lignes 16 à 50 contient certaines actions qui doivent être faites dans un seul cas, pas dans les deux.
je te suggère donc de revoir cela, et de déplacer un partie de ce code soit en remplacement de la ligne 66, inutile, soit avant la ligne 105.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
15 oct. 2017 à 15:54
15 oct. 2017 à 15:54
Mais ligne 66 y a rien, et non il y a aucun problème la page pose la question et les proposition puis récupère la réponse. Rien de plus n'y moins, je comprend pas ce que vous chercher ce code marche.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
16 oct. 2017 à 09:41
16 oct. 2017 à 09:41
Voici un code qui illustre mon problème :
Donc pendant le traitement j'ai un décalage de réponse.... Comme sur mon premier code quand je veux savoir si un utilisateur a répondu ou non car en rechargeant la page la ça met la question dans la base de données.
<?php include "lib/top.php"; include "SQL/cobdd.php"; $sql = "SELECT * FROM info WHERE id NOT IN (SELECT id_info FROM action) ORDER BY RAND()"; $view_i_v = $bdd->query($sql); $v_i_v = $view_i_v->fetch(); $nb_r = $view_i_v->RowCount(); $view = $v_i_v['news']; $id_info = $v_i_v['id']; $vu = "1"; if($nb_r != 0){ $sql2 = "INSERT INTO action(id_info, vu) VALUES(? ,?)"; $req = $bdd->prepare($sql2); $req->execute(array($id_info, $vu)); } if(isset($_POST['ok'])){ if(!empty($_POST['reponse'])){ $reponse = htmlspecialchars($_POST['reponse']); $up_sql = "UPDATE action SET bouton = ? WHERE id_info = ?"; $up_req = $bdd->prepare($up_sql); $up_req->execute(array($reponse, $id_info)); echo "ok"; } } ?> <p>Nous allons crée deux tables une avec des informations qui sont afficher de façon alèatoire.</p> <p>Et une autre avec la détection de vu et l'action de l'uttilisateur.</p> <?php if($nb_r != 0){ echo $view."<br/>".$id_info; ?> <form method="post"> <table> <tr> <td><label for="oui">Oui</label></td> <td><input type="radio" name="reponse" id="oui" value="1" /></td> </tr> <tr> <td><label for="non">Non</label></td> <td><input type="radio" name="reponse" id="non" value="2" /></td> </tr> <tr> <td><input type="submit" name="ok" value="ok" /></td> </tr> </table> </form> <?php }else{ echo "Pu de news ! Vous avez tous lu !"; } include "lib/bot.php"; ?>
Donc pendant le traitement j'ai un décalage de réponse.... Comme sur mon premier code quand je veux savoir si un utilisateur a répondu ou non car en rechargeant la page la ça met la question dans la base de données.
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
1 557
Modifié le 16 oct. 2017 à 10:13
Modifié le 16 oct. 2017 à 10:13
c'est normal, tu as conservé les deux erreurs que je t'ai signalées précédemment en #14:
-) quand l'utilisateur donne une réponse, ton programme ne vérifie pas que c'est une réponse à la dernière question posée à l'utilisateur. cela permet donc de tricher.
-) quand l'utilisateur donne une réponse, ton programme fait comme si c'était la réponse à la prochaine question.
je te rappelle donc ma suggestion en #18:
je pense que tu peux parfaitement te protéger, simplement, en utilisant complètement $_SESSION['Q_id_c']. Tu as fait une partie du travail en l'enregistrant au moment de poser une question, pourquoi ne pas l'exploiter au moment de recevoir une réponse?
Je pense utile de vérifier à ce moment-là que la réponse correspond bien à la question posée, et, si oui, d'utiliser cette question pour mettre à jour la table info_user (sinon, refuser la réponse).
Je pense que cela éliminera l'anomalie principale que tu observes dans la table info_user.
ma suggestion #19 reste utile également.
-) quand l'utilisateur donne une réponse, ton programme ne vérifie pas que c'est une réponse à la dernière question posée à l'utilisateur. cela permet donc de tricher.
-) quand l'utilisateur donne une réponse, ton programme fait comme si c'était la réponse à la prochaine question.
je te rappelle donc ma suggestion en #18:
je pense que tu peux parfaitement te protéger, simplement, en utilisant complètement $_SESSION['Q_id_c']. Tu as fait une partie du travail en l'enregistrant au moment de poser une question, pourquoi ne pas l'exploiter au moment de recevoir une réponse?
Je pense utile de vérifier à ce moment-là que la réponse correspond bien à la question posée, et, si oui, d'utiliser cette question pour mettre à jour la table info_user (sinon, refuser la réponse).
Je pense que cela éliminera l'anomalie principale que tu observes dans la table info_user.
ma suggestion #19 reste utile également.
flo39400
Messages postés
596
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
9 septembre 2021
21
16 oct. 2017 à 15:36
16 oct. 2017 à 15:36
Super sais good merci et désoler de ne pas avoir compris cela avant :)
Voici le code modifier :
Voici le code modifier :
<?php session_start(); include "lib/top.php"; include "SQL/cobdd.php"; $sql = "SELECT * FROM info WHERE id NOT IN (SELECT id_info FROM action) ORDER BY RAND()"; $view_i_v = $bdd->query($sql); $v_i_v = $view_i_v->fetch(); $nb_r = $view_i_v->RowCount(); $view = $v_i_v['news']; $id_info = $v_i_v['id']; $_SESSION['id_info'] = $id_info; $vu = "1"; if($nb_r != 0){ $sql2 = "INSERT INTO action(id_info, vu) VALUES(? ,?)"; $req = $bdd->prepare($sql2); $req->execute(array($id_info, $vu)); } if(isset($_POST['ok'])){ if(!empty($_POST['reponse'])){ $reponse = htmlspecialchars($_POST['reponse']); $up_sql = "UPDATE action SET bouton = ? WHERE id_info = ?"; $up_req = $bdd->prepare($up_sql); $up_req->execute(array($reponse, $_SESSION['id_info'])); } } ?> <p>Nous allons crée deux tables une avec des informations qui sont afficher de façon alèatoire.</p> <p>Et une autre avec la détection de vu et l'action de l'uttilisateur.</p> <?php if($nb_r != 0){ echo $view."<br/>".$id_info; ?> <form method="post"> <table> <tr> <td><label for="oui">Oui</label></td> <td><input type="radio" name="reponse" id="oui" value="2" /></td> </tr> <tr> <td><label for="non">Non</label></td> <td><input type="radio" name="reponse" id="non" value="3" /></td> </tr> <tr> <td><input type="submit" name="ok" value="ok" /></td> </tr> </table> </form> <?php }else{ echo "Pu de news ! Vous avez tous lu !"; } include "lib/bot.php"; ?>
15 oct. 2017 à 00:07
Donc la code afficher celui fonctionne, mais quand j'ai modifier donc pour savoir quel question sont vu par l'utilisateur. Donc j'ai juste fait un "INSERT INTO info_user WHERE id_user, question_fait" ( cette table a id, id_user, question_fait et point en NULL par défaut). Donc après j'ai modifier la partie ou il y a "Bravo bonne réponse !" et "Mauvaise réponse" j'ai placer un UPDATE info_user..... Et résultat j'avais parfois 3 fois la même ligne seule une seule ligne avec le update qui avait pris résultats en 4 questions j'avais fait les 10 questions qui sont autoriser par jour.
Donc je dois être plus méthodique pour que cela fonctionne correctement.
15 oct. 2017 à 09:48
15 oct. 2017 à 11:41
15 oct. 2017 à 10:38
cela empêchera d'avoir des doublons (plusieurs fois la même ligne), et t'aidera à détecter rapidement que ton code ne se comporte pas bien (qu'il essaie de créer des doublons).
15 oct. 2017 à 11:39
Donc je vais modifier et je vous montre cela...