QCM enregistrer la question quand elle est vue...
Résolu
flo39400
Messages postés
596
Date d'inscription
Statut
Membre
Dernière intervention
-
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
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
- Vue de profil instagram - Guide
- Comment enregistrer une conversation - Guide
- Enregistrer son ecran - Guide
6 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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.
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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.
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.
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"; ?>
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.
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).
Donc je vais modifier et je vous montre cela...