[PHP] 2 Boucle While imbriquées.

Fermé
Marco - 3 mars 2012 à 15:47
 Marco - 4 mars 2012 à 07:30
Bonjour,

Voilà, je me trouve confronté à un petit soucis depuis quelques jours.
(Soucis certainement bénin)

J'ai deux boucle while l'une imbriqué dans l'autre, ce afin d'affiché un tableau avec des donnés différentes et tables différentes, en fonction des colonnes et bien entendu des champs associés en bdd.

Dans ma première boulce (1ere table) j'affiche le global de mon tableau, nom de colonnes, et description de celles-ci.

Dans ma seconde boucle (2eme table, correspondant à une colonne en particulier), je souhaite affiché en fonction d'un champ de ma seconde table des données.

Mais je bloque, je n'arrive pas à combiner le tout. Au niveau de ma seconde boucle, je n'arrive à rien !

Voici mon code :


{

echo '<table rules="none" cellspacing="1" cellpadding="3" style="font-size: 12px; background-color: #ADD3FF;border:1px solid #183F77;width: 80%;">';

echo '<tr><th>Description</th><th>Difficulté</th><th>Etat</th><th>Gain</th><th>Détails</th></tr>';

$i = 0;
$select = mysql_query("SELECT * FROM lesquetes ORDER BY id");
while ($sql1 = mysql_fetch_array($select))
{
$i++;

echo '<tr>';
echo '<td align="center">'.htmlentities($sql1['description']).'</td>';
echo '<td align="center">'.htmlentities($sql1['difficulte']).'</td>';


$sql2= "SELECT q1, q2 FROM membres WHERE id='".$idmembre."'";
$sql3 = mysql_query($ssql);
while($arr = mysql_fetch_assoc($sql3))
{

if($arr == "ok"){

echo '<td align="center"><img src="quetes/ok.png" alt="Quete Réussi" /></td>';}
else if($arr == "nook"){
echo '<td align="center"><img src="quetes/nook.png" alt="Quete non Réussi" /></td>';}
}

echo '<td align="center">'.htmlentities($sql1['gains']).'</td>';
echo '<td align="center"><img src="./images/voir.png" align="absmiddle" width="16" height="16" alt="Voir"></td>';
echo '</tr>';
}

echo '</table>';

}

Je coince sur comment à la fois regroupé q1& q2 ($arr).
Mais aussi pour les associés et les différenciés sur mon tableau en fonction de chaque lignes (id).

Je remercie par avance les personnes qui pourront m'aider.
Bien amicalement, Yann.


A voir également:

1 réponse

doctormad Messages postés 430 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 2 avril 2015 99
3 mars 2012 à 16:38
Salut,

Tout d'abord je ne m'étendrais pas sur le mélange php/sql/html....

Il y a peut-être un problème de modèle à la base.

Qu'est ce que contiennent q1 et q2 ?

Pour "regrouper" deux champs sl tu peux utiliser la fonction concat : https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

Si tu veux le faire en php il suffit de faire quelque chose du genre :

$finalField = $result['q1'] . $result['q2'];

Et au passage :
$sql2= "SELECT q1, q2 FROM membres WHERE id='".$idmembre."'";
$sql3 = mysql_query($ssql);

Ca ne peut pas fonctionner : $sql3 = mysql_query($sql2); serait mieux ^^
0
Bonsoir,
Et merci de ta réponse.
Pour le $ssql j'ai modifié les variables de mon code avant de le posté pour permetre une meilleure compréhension. Mais j'ai oublié celle-ci apparament !

Sur l'original cette variable est bel et bien corrigé.

q1 et q2 correspondent à des quêtes.
q1 et q2 contiennent un champ nook par défaut qui passe en ok quand le membre valide la quete.

J'ai essayé avec la manière ennoncé plus haut :

$lesquetes = $arr['q1'] . $arr['q2'];

Mais du coup cela ne m'affiche rien.

Merci beaucoup.
0
doctormad Messages postés 430 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 2 avril 2015 99
3 mars 2012 à 18:25
Désolé mais j'ai du mal à comprendre, dans ta base de données que contiennent q1 et q2 ?

Encore une fois je pense qu'il y a peut-être un problème de modèle à la base. Peut tu poster le schéma de ta base ? (sur ton interface phpmyadmin tu peux faire un export de la base complète)

Sinon dans le code posté si tu fais while($arr = mysql_fetch_assoc($sql3))

alors tu récupèreras le résultat avec :

$arr['q1'] ou $arr['q2']
0
Re,
q1 et q2 sont des champs se trouvant sur la table membres.

Qu'entends tu par un soucis à la base ?

Je ne vais pas poser ici un export complet de ma bdd.

Pour le résultat c'est bien ce que je souhaite récupéré.
$arr['q1'] & $arr['q2'] mais les dissocier en fonction des id.

exemple:

quete 1 : description difficulté etat gain

Je récupère tout sauf "etat" dans table 1 et l'affiche dans mon tableau.
Pour l'état de cette quete n1, je le vérifie dans la table des membres.

De même pour la quete n2 etc ...
0
doctormad Messages postés 430 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 2 avril 2015 99
3 mars 2012 à 21:28
Bon je comprends vraiment rien à ton truc, quand tu fais select q1, q2 from table, ça te retourne deux champs de table, q1 et q2 c'est tout.

Encore une dernière fois c'est ton modèle qui pose problème le pense.

Sans plus de détails je ne peux pas t'aider plus que ça, bonne chance.
0
Bonjour,
Si je fait un select q1, q2 from table ça me retourne le contenu de q1 et q2.
Soit, en fonction du membre, et en fonction de si il a ou non réussi l'épreuve : ok ou nook.

Que devrais-je corrigé penses-tu à mon tableau ? Ou a ma façon d'afficher ?

Merci tout de même d'avoir essayer de m'aider.
Bien amicalement.
0