IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Récupérer la première réponse juste d'un jeu


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut [SQL] Récupérer la première réponse juste d'un jeu
    Bonjour à tous...

    Voilà, un jeu simple que j'ai en php, une question, 4 réponses (genre qcm)

    Je souhaite récupérer le visiteur (non inscrit sur le site) qui a fourni la réponse juste le plus rapidement.
    Ensuite j'envois le gagant vers une page et les perdants vers une autre...

    Puis, inscrire ces infos dans ma base sql...

    Je ne sais comment m'y prendre...



    Je cherche, mais ne trouve rien à ce sujet...

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Quand quelqu'un trouve la bonne réponse, ca l'envoie vers un script PHP qui va traiter ca!
    Le plus simple c'est donc de commencer par verrouiller dans la base sql la table qui va contenir le nom du gagnant par exemple. Ensuite, quand la table est verrouillée, tu regardes si quelqu'un a déjà bien répondu, si non, tu mets a jours la base, tu la déverrouilles et tu rediriges l'utilisateur et tu as ton premier gagnant.
    Les suivants (meme 100ms apres) comme ils veulent aussi verrouiller la table ils sont obligés d'attendre que le tout premier l'ait déverrouillée, et quand ca sera fait tu t'apercevras qu'il y a déjà eu un gagnant!

    Voila j'espere avoir été compréhensible

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut
    Merci de répondre... Mais effectivement, pas très clair pour nu newbie comme moi...

    A ce stade, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
            //echo '<form method="post" action="page3.php">';    
     
                require ("connectdb.php");//connection à la base
                //Execution de la requete SQL
                //$reqsql="Select numquest,question,rep1,rep2,rep3,rep4,rep from questionnaire where numquest=".$id;
                $reqsql="SELECT * FROM question order by rand() limit 1";
                $resbase=mysql_query($reqsql,$cnx) or die ("Echec de $sqlquest");
     
     
                while ($quizz=mysql_fetch_assoc($resbase)){
                //$num prend la valeur trouvé dans le champs 0
                $num=$quizz['num'];
                //$question prend la valeur trouvé dans le champs 1
                $question=$quizz['question'];
                //$reponse1 prend la valeur trouvé dans le champs 2
                $reponse1=$quizz['rep1'];
                //$reponse2 prend la valeur trouvé dans le champs 3
                $reponse2=$quizz['rep2'];
                //$reponse3 prend la valeur trouvé dans le champs 3
                $reponse3=$quizz['rep3'];
                //$reponse4 prend la valeur trouvé dans le champs 4
                $reponse4=$quizz['rep4'];
                //$repexact prend la valeur trouvé dans le champs 5
                $repexact=$quizz['rep'];
                }
    $date = date("Y/m/d H:i:s");
    $sql = "INSERT INTO parties (date, question, reponse)
    VALUES('$date','$question','$repexact')";
    mysql_query($sql)
    or die('Erreur SQL !'.$sql.'
    '.mysql_error());           
            //ferme la connection à la base
            mysql_close();
     
     
     
    ?>
    Je prends mes questions au hasard dans la bdd. Au même moment j'enregistre la partie dans la bdd (j'ai X parties par jour...)

    Ensuite, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo '<form method="post" action="home.php">';
    			echo '<input type="radio" name="rep'.$num.'" value="1" />'.$reponse1;
    			      echo '<input type="radio" name="rep'.$num.'" value="2" />'.$reponse2.'<br />';
    			      echo '<input type="radio" name="rep'.$num.'" value="3" />'.$reponse3;
    			      echo '<input type="radio" name="rep'.$num.'" value="4" />'.$reponse4.'<br /><br>';
    				  echo '<input type="submit" value="Go Cash !" ></form>';
    				  ?>
    Qui m'affiche les réponses possibles...

    Voilà où j'en suis...

    Donc, il me manque déjà le script qui va traiter les réponses... Et ensuite, comment verrouille t-on une table?

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Verrouiller des tables MYSQL

    En gros dans ton script qui traite les réponses, la PREMIERE chose a faire c'est de te connecter a la base et de verrouiller la table qui gère les parties. Tous les scripts qui vont la verrouiller se mettent donc en liste d'attente, dans l'ordre du premier arrivé, tout est géré par mysql tu ne t'en préoccuppes pas.

    Une fois que c'est fait, tu fais comme si tout était normal :
    • tu vérifies la réponse choisie par l'utilisateur,
      • si elle est fausse, tu déverrouilles la table (au pire qd le script se termine c'est fait automatiquement mais vaut mieux le faire explicitement).
      • si elle est juste, tu regardes s'il y a déjà un gagnant
        • si non, tu inscris ce gagnant dans la base, tu déverrouilles la table et tu le rediriges sur la page du gagnant
        • si oui tu déverrouilles la table et tu le rediriges vers la page perdante

    Le but de verrouiller la table en fait c'est juste de faire une sorte de "file d'attente" dans l'ordre de réponses au quizz

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut
    Merci, je regarde cela et te tiens au jus...

    Et merci à mathieu d'avoir rétabli les bonnes balises pour mon code... Pas bien réveillé ce matin...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut
    Bon, j'avance, mais me pose une question...

    Est ce qu'avec cette méthode de verrouillage, je vais pouvoir avoir le temps de réponse du gagant...

    C'est un jeu de rapidité, et j'aimerais donner le temps de réponse à chaque participant...

    Merci

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Ben dans ce cas il faut faire le calcul avant de verrouiller la table, parce que quand t'attends qu'un verrou se libère t'es en "pause".

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut
    Si je fais le calcul avant de vérrouiller, et que j'obtiens donc le temps de réponse de chaque participant, est ce que j'ai encore besoin de verrouiller?

    Et comment fait on pour calculer ce temps entre l'affichage des réponses et le clic sur le bouton valider?

  9. #9
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Citation Envoyé par syl2042
    Si je fais le calcul avant de vérrouiller, et que j'obtiens donc le temps de réponse de chaque participant, est ce que j'ai encore besoin de verrouiller?

    Et comment fait on pour calculer ce temps entre l'affichage des réponses et le clic sur le bouton valider?
    Tu n'auras pas moyen de savoir pour une personne donnée si elle est la plus rapide puisque tu ne peux pas connaitre le temps des autres personnes. Le fait de verrouiller la table c'est pour etre sur que "entre le moment où tu lis dans la table "aucun gagnant" et le moment où tu écris "je suis le gagnant" tu n'as pas qqn d'autre qui fait exactement pareil (a 3ms pres) et qui va donc penser qu'il a gagné aussi.

    Pour l'histoire du temps, quand tu génères ton formulaire avec la question, tu peux ajouter une date/un timestamp qui correspond à l'heure a laquelle la personne a eue la question. Mais ca pose un probleme de sécurité, le mieux va etre de passer par les sessions (il y a des cours du developpez.com qui en parlent)

    Par contre j'ai pas compris, si quelqu'un lit le questionnaire a 00h pile et répond en une minute, est ce qu'il est gagnant par rapport a celui qui le lit a 00h00min30s et qui répond en 40s (donc plus vite mais après lui) ???
    Parce que dans ce cas tu t'en fiches de savoir le temps que chacun met a répondre, le seul truc intéressant c'est : le temps du plus rapide (qui correspond a l'heure a laquelle il a répondu moins l'heure a laquelle le questionnaire a été créé (date que tu peux stocker dans la base))

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut
    Merci de tes explications...

    Non, en fait la question apparait pendant un laps de temps qui est le même pour tous.. (compte à rebours)
    Les réponses apparaissent à la fin du compte à rebours...

    Et là, je fais gagner le plus rapide à répondre...

  11. #11
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    D'accord, donc ca répond a ma question : le premier a verrouiller la table sera aussi le plus rapide de tous (s'il a la réponse juste bien sur)
    Il suffit donc que dans ta table tu stockes la date exacte a laquelle ton questionnaire est disponible.
    Au début du script qui vérifie la réponse tu commences par stocker dans une variable la date a laquelle la personne a répondu.
    Si la personne répond faux, ben tu ignores
    Si la personne répond juste, alors tu peux savoir a partir de cette variable et de la date stockée dans la base le temps exact qu'il a mis a répondre!

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Par défaut
    Cela me semble très bien ceci et cela correspond plus à ce que je tentais...

    J'avais déjà inscrit dans la table l'heure d'affichage du questionnaire par partie (Plus de 200 parties par jour)...

    je continue et merci encore...

Discussions similaires

  1. [SQL] récupérer sélection dans liste déroulante
    Par nerick dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/12/2005, 11h30
  2. [SQL] Récupérer des variables de formulaire dans une requête SQL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/11/2005, 18h44
  3. Réponses: 7
    Dernier message: 27/03/2005, 10h34
  4. [VB.NET] [SQL] Pb requête sql, récupérer des params. ?
    Par Pleymo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/02/2005, 20h15
  5. Réponses: 3
    Dernier message: 28/11/2003, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo