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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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