Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1206 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Pb de boucle While avec 2 bases

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb de boucle While avec 2 bases

n°1947446
enought
Posté le 04-12-2009 à 17:02:07  profilanswer
 

Bonjour à tous,
 
Voila je suis en train de préparer une page ou j'ai besoin d'afficher des données provenant de 2 tables
 
Je m'explique un peu plus
 
J'ai une table activites dont je veux afficher le contenu et une deuxième table qui sera affiché suivant le contenu de la première grâce à un id
 
Mon problème est que j'ai seulement ma première ligne qui s'affiche  
 
voici le code :
 

Code :
  1. <?php
  2.    $activite = "SELECT * FROM activites WHERE privilege='$priv'";
  3.    $query2=mysql_query($activite) or die("Exécution de la requête impossible query2:" .mysql_error());
  4.    $heure = "SELECT * FROM horaires";
  5.    $query3=mysql_query($heure) or die("Exécution de la requête impossible query3:" .mysql_error());
  6.    while ($ligne2=mysql_fetch_array($query2) and ($ligne3=mysql_fetch_array($query3)))
  7.    {
  8.    ?>
  9.                 <tr>
  10.                 <td align="left" class="activite">Atelier :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne2['ateliers'];?></td>
  11.                 </tr>
  12.                 <tr>
  13.                 <td align="left" class="activite">Responsable :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne2['personne'];?></td>
  14.                 </tr>
  15.                 <tr>
  16.                 <td align="left" class="activite">Lieu :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne2['lieu'];?></td>
  17.                 </tr>
  18.                 <tr>
  19.                 <td align="left" class="activite">Participation :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne2['participation'];?></td>
  20.                 </tr>
  21.                 <tr>
  22.                 <td align="left" class="activite2" colspan="3">
  23.                 <?php
  24.    if ($ligne3['id_act'] == $ligne3['id_act'])
  25.    {?> 
  26.                 <table>
  27.    <tr><td align="left" class="activite">participants :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne3['participants'];?></td></tr>
  28.                 <tr><td align="left" class="activite">Jour :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne3['jour'];?></td></tr>
  29.                 <tr><td align="left" class="activite">Horaires :</td><td width="10"></td><td align="left" class="activite2">de <?php echo $ligne3['heure_debut'];?> à <?php echo $ligne3['heure_fin']; ?></td></tr>
  30.                 </table>
  31.                 </td>
  32.                 <?php }
  33.    else
  34.    { ?>
  35.    </td>
  36.    <?php } ?>
  37.                 </tr>
  38.                 <tr>
  39.                 <td align="left" class="activite">Description :</td><td width="10"></td><td align="left" class="activite2"><?php echo $ligne2['descript'];?></td>
  40.                 </tr>
  41.                 <tr>
  42.                 <td align="left" class="activite" height="20"></td>
  43.                 </tr>
  44.                 <?php }
  45.    ?>


 
 
pourriez vous m'aider à résoudre mon problème car je ne trouve pas......
Précision, je suis en plein apprentissage de ce language, donc l'optimisation n'est pas encore au goût du jour  ;)  
 
Merci d'avance pour vos réponses

mood
Publicité
Posté le 04-12-2009 à 17:02:07  profilanswer
 

n°1947452
Fred999
Rabat-joie
Posté le 04-12-2009 à 17:23:02  profilanswer
 

Salut,

 

Pour commencer, deux trucs :

 

1) Ne mets jamais de "select *" dans les requêtes, car :
- tu ne sais pas explicitement ce que tu récupères
- tu récupères potentiellement beaucoup trop d'information par rapport à ce qui est nécessaire
- pour la maintenance, c'est pas top

 

2) Dans les die()

 

PHP te permet d'écrire des chaînes de caractères de deux manières : avec des quotes et avec des guillemets. Pour comprendre la différence, voici un exemple :

 

$machaine = 'test';

 

echo '$machaine';
echo "$machaine"

 

Le premier echo affichera $machaine
Le second echo affichera test

 

Tout ça pour dire que tu as oublié les $ devant le nom des variables dans tes die.

  

Ensuite, voici ton souci : tu ne peux pas utiliser un while() avec deux boucles en même temps, ce n'est pas logique.

 

Il faut utiliser deux boucles impriquées :

 

while (mysql_fetch...1) {

 

 // Je détermine ma seconde requête à partir du résultat de la première
  while (mysql_fetch...2) {
    // Code
  }

 

}

 

Là, dans ton code, tu sélectionnes tous les horaires sans tenir compte de l'activité.


Message édité par Fred999 le 04-12-2009 à 17:23:48
n°1947454
Fred999
Rabat-joie
Posté le 04-12-2009 à 17:24:53  profilanswer
 

Enfin, si tu utilises des classes, le align="left" devrait être dans le CSS...

n°1947463
enought
Posté le 04-12-2009 à 17:51:38  profilanswer
 

Bonsoir,  
merci pour les infos
 
pour les *, je veux effectivement récupérer toutes les infos de ma base c'est donc pour cela que j'ai utilisé ce sigle (pas bien quand même ??)
 
euh... pour mes die, c'est simplement qu'au début, j'avais une erreur de "query empty" et comme j'en ai 2, c'était simplement pour les différencier :)
 
J'ai effectivement essayé dans un premier temps cette solution d'imbriquer 2 while, mais je tombe toujours sur le même résultat c'est à dire que j'ai seulement ma première ligne qui apparaît...
 
Je refais un essai en mettant les 2 while imbriqués

n°1947466
Fred999
Rabat-joie
Posté le 04-12-2009 à 17:57:51  profilanswer
 

Même si tu veux tous les champs, habitue-toi à les écrire explicitement. Le jour où tu devras récupérer le code de qqun d'autre, tu seras bien content de ne pas avoir à aller voir la structure de la table...
 
Pour les chaînes, je voulais dire que  
die("Exécution de la requête impossible $query2:" .mysql_error());
est plus explicite que
die("Exécution de la requête impossible query2:" .mysql_error());
même si ta ligne est correcte.

n°1947469
enought
Posté le 04-12-2009 à 18:05:17  profilanswer
 

enought a écrit :

Bonsoir,  
merci pour les infos
 
pour les *, je veux effectivement récupérer toutes les infos de ma base c'est donc pour cela que j'ai utilisé ce sigle (pas bien quand même ??)
 
euh... pour mes die, c'est simplement qu'au début, j'avais une erreur de "query empty" et comme j'en ai 2, c'était simplement pour les différencier :)
 
J'ai effectivement essayé dans un premier temps cette solution d'imbriquer 2 while, mais je tombe toujours sur le même résultat c'est à dire que j'ai seulement ma première ligne qui apparaît...
 
Je refais un essai en mettant les 2 while imbriqués


 
 
Eh bien c'est une très bonne nouvelle, cela fonctionne !!
 
Merci beaucoup pour votre aide ^^
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Pb de boucle While avec 2 bases

 

Sujets relatifs
[Résolu - PHP] Incrémenter une variable par autre chose que +1Insérer une image dans un bouton ! Pb de taille
PB fonction javascript [RESOLU]Pb acces base de donnée
URGENT : problème shell windows boucle forPb avec un formulaire
appel d'une fonction dans une boucle ne se réalise qu'une foislecture d'un flv (random)
Pb sur formulaire javascriptProblème avec boucle while qui ne s'arrêt pas
Plus de sujets relatifs à : Pb de boucle While avec 2 bases


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR