Salut à tous,
Voilà j'ai un petit soucis qui me turlupine depuis approximativement 48h...
Je code en php un mini jeu concours très simple. Il y a 100 cases, derrière 3 des cases se cachent des cadeaux, derrières les 97autres c'est perdu.
Le jeu est fonctionnel et possède 2 tables SQL principales que j'aimerais utiliser dans un autre cas et c'est là le pb.
1/ la table "gain" avec 3 colonnes gain1, gain2, gain3 en INT. Elle a une seule ligne qui détermine si tel ou tel porte est gagnante
2/ la table "part" qui détermine les dotations : partnom = nom de la dotation, partdescr = description de la dotation etc... et numlot qui lorsqu'elle est éqgl à gain1 ou 2 ou 3 affiche la dotation correspondante
J'aimerais afficher le nom de la dotation en fonction du numéro de case gagnante. J'ai codé ça :
$reqgain = $bdd->query('SELECT gain1, gain2, gain3 FROM gain ');
$gainres = $reqgain->fetch();
$gain1 = $gainres['gain1'];
$gain2 = $gainres['gain2'];
$gain3 = $gainres['gain3'];
$reqpart = $bdd->prepare('SELECT * FROM part WHERE numlot = ? ');
$reqpart-> execute(array($gain1, $gain2, $gain3));
$partres = $reqpart->fetch();
if ($partres['numlot'] == $gain1)
{
echo $partres['partnom'].'//';
}
if ($partres['numlot'] == $gain2)
{
echo $partres['partnom'].'//';
}
if ($partres['numlot'] == $gain3)
{
echo $partres['partnom'].'//';
}
Bien sur ça ne marche pas. Le problème ce situe ici je pense :
$reqpart-> execute(array($gain1, $gain2, $gain3));
car lorque j'enlève les deux autres variabes, ça marche pour le
$gain1... $reqpart-> execute(array($gain1));
Je suis novice en PHP/SQL... c'est surement qu'un problème de syntaxe mais j'ai tout essayé et je trouve pas de solution pour mettre les 3 var dans le array...
Merci beaucoup d'avance pour votre aide précieuse. ****
à plus
Bonjour,
Le "?" corresponds a une variable que vous souhaitez.
Donc soit il vous faut demander les 3 valeurs en même temps sur une même requête, soit exécuter 3 fois la requête avec les diffférents gain.
$reqpart = $bdd->prepare('SELECT * FROM part WHERE numlot = ? OR numlot = ? OR numlot = ?');
$reqpart-> execute(array($gain1, $gain2, $gain3));
$partres = $reqpart->fetch();
ou
$reqpart = $bdd->prepare('SELECT * FROM part WHERE numlot = ? ');
$reqpart->execute(array($gain1));
$partres1 = $reqpart->fetch();
$reqpart->execute(array($gain2));
$partres2 = $reqpart->fetch();
$reqpart->execute(array($gain3));
$partres3 = $reqpart->fetch();
A tester.
Bonjour,
Merveilleux la seconde méthode fonctionne parfaitement !
La première cependant ne me donne que le résultat du $gain3... ce qui est bizarre.
Je vais donc utiliser votre seconde méthode, si vous avez une explication pour le bug de la première je suis prenneur.
En tout cas merci beaucoup !
Super,
Oui il récupère seulement le dernier enregistrement.
Il faut non pas faire un fetch sur le résultat mais un fetchAll et parcourir le tableau qui vous sera retourné
Je vais tester ça mais ça m'a l'air finalement un peu plus complexe que l'autre réponse.
Une nouvelle fois merci !