La première bonne réponse gagne. PHP

Résolu/Fermé
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 - 24 avril 2012 à 22:29
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 - 27 avril 2012 à 01:39
Bonjour à tous,

J'ai créé un quiz sur mon site et je voudrais créer un code qui permettrait au premier membre qui donne une bonne réponse à la dernière question de gagner. Je pensais donc à rajouter dans ma BDD une table "gagnant" de type INT et de valeur 0, et la faire passer à 1 seulement pour le premier membre qui donne la bonne réponse et laisser la valeur 0 pour les autres. Mais je ne sais pas comment m'y prendre pour faire ceci. Alors si vous avez une petite idée, ou carément une autre solution, n'hésitez pas :)

4 réponses

Table gagnant:

Membre
Date/heure/min(ID)
Question(FK)

N'enregistrer que question n'a pas de réponse, donc aucun résultat encore enregistré.
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
24 avril 2012 à 23:02
Merci d'avoir répondue aussi vite Atrer,

Enfet je me suis trompé, je veux juste rajouter la colonne "gagnant" à ma table quiz.
Mais comment mais je veux que sa soit plus précis que des minutes et des secondes justement.
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 220
Modifié par baladur13 le 28/04/2012 à 13:50
Salut,

Je dirais que si le quiz est bon, on regarde dans le champ "gagnant" si il y a une valeur égal à 1...si il n'y a rien, on change la valeur à 1 du membre qui a répondu correctement le premier.

Bref, un truc du style :
$query = mysql_query("SELECT gagnant FROM matable WHERE gagnant=1"); 
if(mysql_num_rows($query) == 0) 
{ 
$result=mysql_query("UPDATE matable SET  
gagnant = 1 WHERE id_du_membre = $identifiant_du_membre"); 
} 
else{ 
echo 'Il y a plus rapide que vous!'; 
}

Signature non conforme - Publicité supprimée Modération CCM
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
24 avril 2012 à 23:10
Merci d'avoir répondu tyran44,

Oui, je sais comment vérifier si le champ est égale à 1, mais ce que je veux savoir, c'est comment le passer à 1 seulement pour le premier membre qui répond juste.
0
Profil bloqué
25 avril 2012 à 11:28
si réponse entrée = bonne réponse
alors
update la ligne, mettre champs à 1
fin si
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 220
25 avril 2012 à 11:30
C'est ce que fait la requête juste au dessus puisqu'elle vérifie dans un premier temps si le chiffre 1 existe dans la table "gagnant" et dans un second si le chiffre 1 n'existe pas, la requête suivante enregistre ce chiffre pour le membre. A partir du moment ou il y a un "1" d'enregistré, le code passe sur le "else".
0
Profil bloqué
25 avril 2012 à 12:10
Autant pour moi, je lirai mieux la prochaine fois ;)
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
25 avril 2012 à 09:37
Bonjour,
C'est un jeu "en live" ou sinon, c'est en différé comme sur un forum ?
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
25 avril 2012 à 09:49
Merci d'avoir répondu Assassin Tourist
Enfet il y a un compte a rebours qui délimite le temps des questions donc plusieurs utilisateurs feront le quiz en même temps.
0
AssassinTourist Messages postés 5710 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
25 avril 2012 à 10:00
Le problème, c'est donc l'accès concurrent si j'ai bien saisi ?
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
25 avril 2012 à 10:53
Enfet je veux que seul le nom du gagnant soit affiché sur la page finale donc celui qui répond en premier et juste. Mais le but étant que plusieurs utilisateurs puissent participer en même temps.
0
J'avait compris ça, je n'ai pas de solution pour l'accès concurrent sauf que pour être plus précis que la seconde ça l'est mais ça dépendras à ce niveau là de la vitesse de téléchargement(upload) du FAI et du serveur web...
Avec la proposition que j'ai faite c'est uniquement la première réponse(juste làil faut se tourner vers php pour comparer) qui est envoyée qui est enregistrée, donc on a bien le gagnant à la seconde près.Le fait que sur une base les champs de date sont en secondes y change rien, ce n'est même pas nécessaire de le retenir mais j'ai estimé que cette donnée pouvait être intéressante à conserver(Univers Du Discours @ Merise).
// enfait je me suis trompé, je veux juste rajouter la colonne "gagnant" à ma table quiz.
C'est pas une nouvelle colonne mais une nouvelle table avec jointure(FK= foreign key= clé étrangère). Rajouter une nouvelle colonne c'est faux en terme d'analyse, sauf que je ne connait pas tout les tenants de la demande(une question est elle obligatoirement posée en live, etc...).

Quant à la première solution qui consiste à avoir une valeur par membre c'est lourd: ça oblige à enregistrer pour chaque question tout les membres(dans une autre table qui est liée à question(table) et membre(table)) et pas mal de contrainte d'intégrité qui vont ralentir le traitement(une question peut ne pas avoir de gagnant par exemple, tant que personne à répondu c'est le cas) ainsi que surcharger une table qui n'en as pas besoin+faire du développement inutile.
0
shoub-tcy Messages postés 169 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 23 mai 2012 2
27 avril 2012 à 01:39
Ducoup j'ai trouvé une autre solution plus simple.
J'ai créé une colonne pseudo (clé étrangère) et pour le premier qui répond juste, sont pseudo s'affiche dans la colonne, et j'empêche l'affichage d'autre pseudo en mettant une simple condition du style si la colonne pseudo n'est pas vide alors vous n'avez pas été le premier à répondre juste.
0