While imbriqué pour affichage de données !

Petit nouveau ! | 1 Messages

19 août 2009, 11:27

j'aimerais faire un petit tableau de bord assez simple mais j'ai un problème avec l'affichage de mes données .

Code : Tout sélectionner

// requête qui prend tous les users de la session avec un niveau 4 $listetic = mysql_query("SELECT * FROM user WHERE id_entite='$sess_entite' AND niveau= '4' ") or die(mysql_error()); $listeticbis = mysql_query("SELECT * FROM user WHERE id_entite='$sess_entite' AND niveau= '4' ") or die(mysql_error()); // requête qui prend toutes les actions111 avec entité de la session $liste = mysql_query("SELECT * FROM action111 WHERE id_entite='$sess_entite'") or die(mysql_error()); echo '<table>'; echo '<tr><td></td><td>Dates<td></td>'; while ($tic = mysql_fetch_array($listetic)) { $user = $tic['nom']; echo '<td>'. $user .'</td>'; } echo'<td>Avancement</td></tr>'; echo'<tr><td></td><td>Début</td><td>Fin</td></tr>'; while ($tic1 = mysql_fetch_array($listeticbis)) { $idtic = $tic1['id_user']; while ($donnees = mysql_fetch_array($liste) ) { $idaction = $donnees['id_action111']; $titre = $donnees['titre_action111']; $date_debut = $donnees['date_debut']; $date_fin = $donnees['date_fin']; echo'<tr><td>'. $titre .'</td><td>'. $date_debut .'</td><td>'. $date_fin .'</td>'; $listeetat = mysql_query("SELECT * FROM action_en_cours WHERE id_action111='$idaction' AND id_user='$idtic'") or die(mysql_error()); while ($etatl = mysql_fetch_array($listeetat)) { $etat = $etatl['etat']; if ($etat == '0') { echo '<td>0</td>'; } if ($etat == '1' ) { echo '<td>1</td>'; } else { echo '<td>null</td>'; } } } echo '</tr><tr>'; } echo '</tr></table>';
Le résultat donnée quand je test c'est qu'il ne m'affiche qu'une seule colonne avec des 0 et 1 et dans la deuxieme j'ai des null mais pas à toutes les lignes et puis des espaces blancs , ce qui ne devrait pas être normal #-o
Si vous pouviez jeter un coup d'oeil ça me ferait plaisir de résoudre ce problème que j'ai depuis hier :cry:

Mammouth du PHP | 881 Messages

19 août 2009, 13:27

Première chose, avant de mettre tes requêtes en code PHP et de les tester dans des contextes complexes, c'est de vérifier tes requêtes dans PhpMyAdmin. Pour cela, tu cliques sur "SQL" et tu copies-colles ta requête dans la case. Après "soumettre", tu supervises le résultat obtenu et tu corriges le tir au besoin. Quand tout est propre et conforme à ton désir, tu peux alors le mettre dans ton code PHP. Ainsi, tu pourras savoir pourquoi tu as des NULL et des 0.

Je remarque aussi que tu as deux requêtes identiques. Pourquoi ne pas reprendre la même? Si tu tiens à avoir deux requêtes identiques, pourquoi ne pas tout simplement copier la première dans une commande comme $a = $b ?

Souvent, au lieu d'avoir des requêtes imbriquées, une bonne jointure de tables fera le travail. Consulte à ce propos les doc et site d'aide MySQL sur les commandes JOIN, LEFT JOIN et RIGHT JOIN
Soyez artisans de paix

Avatar du membre
ViPHP
ViPHP | 3008 Messages

19 août 2009, 15:10

Ne met pas de quote autour des entiers.

AND niveau= '4'
$etat == '0'...etc

Mammouth du PHP | 804 Messages

19 août 2009, 18:28

Bonjour,

Moi j'aurai plutôt fais un code dans ce genre
$listeA ="";
$listeB ="";

$query = mysql_query("SELECT user.nom,id_entite,id_user,action_en_cours.id_action111,action_en_cours.id_user,action111.id_action111,action111.titre_action111,action111.date_debut,action111.date_fin 
FROM user 
LEFT JOIN action_en_cours ON action_en_cours.id_user=user.id_user 
LEFT JOIN action111 ON action111.entite = $sess_entite 
WHERE user.id_entite ='$sess_entite' && niveau= '4'   ");

while ($row = mysql_fetch_array($query))             
         {
               $user = $row['nom'];
			   $idtic = $row['id_user'];
			    
			   $idaction = $row['id_action111'];
               $titre = $row['titre_action111'];
               $date_debut = $row['date_debut'];
               $date_fin = $row['date_fin'];  
			   
			   $idtic = $tic1['id_user'];           
			   $etat[$idtic] = $etatl['etat'];
					 			             
               $listeA.= '<td>'. $user .'</td>';
               $listeB.= '<tr><td>'. $titre .'</td><td>'. $date_debut .'</td><td>'. $date_fin .'</td>';         
		  
                     if ($etat == '0'){
                           echo '<td>0</td>';
                        }
                     if ($etat == '1' ){
                           echo '<td>1</td>';
                        }else{
                        echo '<td>null</td>';
                        }
						
}// fin while
		
   
echo '<table>';

echo '<tr><td></td><td>Dates<td></td>';
      
echo $listeA;     

echo'<td>Avancement</td></tr>';

echo'<tr><td></td><td>Début</td><td>Fin</td></tr>';
            
echo $listeB ;
			
echo '</tr><tr>';    
     
echo '</tr></table>';
j'ai du faire pas mal d'error mais l'idée est la bonne je pense