Page 1 sur 1

Pbm sur creation de tableau dynamique

Posté : 11 juin 2008, 15:54
par romca
Bonjour à tous,
Suite à une requête SQL je cherche a intégrer les résultats dans un tableau et ce tableau est construit dynamiquement en fonction du nombre de colonnes demandées dans la requête et du nombre de lignes du résultat (pour être universel en fonction de la requete).
La 1ère ligne qui affiche le nom des attributs de la BDD est ok mais je n'arrive pas à obtenir les lignes de résultats alignées aux colonnes correspondantes, je n'ai même rien du tout en résultat. Je pense que le pbm est dans la boucle While mais ou ?? Merci si vous pouvez m'aider:

L'affichage que j'obtiens est celui-ci:
1
6
NomML PrenomML EmailML TelBurML TelPortML InterimML


TEST Page HTML
Et le code est de la page entière est celui ci:
<html>
<body>

<?php 
// Echo de test: echo "test echo de Rech1_ZoneGestion.php".'<br>'; 
include ("ConnectBDD.php");

if ($_POST["varBatiment"]) // vérifie que c'est bien la variable d'environnement POST qui est envoyée alors on peut exectuer la suite
//car les variables peuvent provenir de données "pirates" par exemple.... 
{
	$varBatiment=$_POST["varBatiment"];
	//echo de test: echo $varBatiment;

	$query="SELECT NomML,PrenomML,EmailML,TelBurML,TelPortML,InterimML FROM mlocal,zone WHERE Zone.NumZone=mlocal.NumZoneML AND Batiment='$varBatiment'";
	$result=mysql_query($query); 
	if(!$result){
		echo "La requete de Recherche1_ZoneGestion.php a echouée".mysql_error();
		exit();
		}
	
	/////////// Creation du Tableau avec les valeurs obtenues de la BDD/////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////
	$nbreLignes=mysql_num_rows($result);// On compte le nombre de lignes du résultat pour faire autant de lignes dans la tableau
	echo $nbreLignes.'<br>';
	$nbreChamps=mysql_num_fields($result);	// On compte le nombre de champs dans la BDD ( le nbre de colonnes)
	echo $nbreChamps.'<br>';
	
	$tableau='<table border=1>'; // Construction du début du tableau
	// On va créér la 1ère ligne du tableau avec le nom des colonnes de la table obtenue par la requete
	$tableau=$tableau.'<tr>';
		for ($j=0;$j<=$nbreChamps;$j++)// Sur la 1ère ligne on va insèrer le nom des champs de la table
		{	
			$Champ=mysql_fetch_field($result);
			$NomChamp[$j]=$Champ->name; // recupération du nom des champs da la table obtenue après la requete 
			$tableau=$tableau.'<td>'.$NomChamp[$j].'</td>';
					
		}
		$tableau=$tableau.'</tr>';// On vient de  créér la 1ère ligne avec le nom des champs
			
	// Création du tableau des résultats
	// A chaque ligne "ligneResult" on va insérer les valeurs des colonnes "j" récupérées dans la BDDD
while ($ligneResult=mysql_fetch_assoc($result))// On charge le pointeur de la ligne de résultat.
//mysql_fetch_assoc permet d'adresser le tableau à partir de nom du champ de la colonne.
{
	// ne sert plus car il y a le while: for ($i=0;$i<=$nbreLignes;$i++) // On boucle sur la i ème ligne
	//{			
					
		$tableau=$tableau.'<tr>'; 
		for ($j=0;$j<=$nbreChamps;$j++) // On boucle sur la j ème colonnes
		{ 
			$Champ=mysql_fetch_field($result);
			$NomChamp[$j]=$Champ->name; // recupération du nom des champs da la table 
			{			
			
			$tableau=$tableau.'<td>'.$ligneResult[$NomChamp[$j]].'</td>';// On créé toutes les cellules dans la même ligne
			}
		}
		$tableau=$tableau.'</tr>';// Fin de la i ème ligne complète		
	//}
	
	
}	
$tableau=$tableau.'</table>';
echo $tableau; // envoi du tableau complet		
	
	/*while ($ligne=mysql_fetch_array($result))
		{ 
		echo $ligne['NomML'].'<br>';
		echo $ligne['PrenomML'].'<br>';
		echo $ligne['EmailML'].'<br>';
		echo $ligne['TelBurML'].'<br>';
		echo $ligne['InterimML'].'<br>';
		}
		*/
	mysql_free_result ($result);
	mysql_close($connect_serveur);

}

?>
<br>TEST Page HTML
</body>
</html>
[/php]

Posté : 11 juin 2008, 23:37
par Hywan
Hey :),

Est-ce que tu es déjà sûr que ta requête fonctionne ? Est-ce que tu l'as essayé dans PhpMyAdmin par exemple ?
On va commencer par là :).

Posté : 12 juin 2008, 12:36
par steph29
Dans ton while (recuperation des lignes)
tu fait:
for ($j=0;$j<=$nbreChamps;$j++) // On boucle sur la j ème colonnes 
        {  
            $Champ=mysql_fetch_field($result); 
            $NomChamp[$j]=$Champ->name; // recupération du nom des champs da la table  
            {             
             
            $tableau=$tableau.'<td>'.$ligneResult[$NomChamp[$j]].'</td>';// On créé toutes les cellules dans la même ligne 
            } 
        }
malheureusement tu ecrase ton tableau des noms de champs créé plus haut, en plus avec des valeurs de tes lignes! donc forcement tu recupere pas grand chose...

en plus je vois trop a quoi servent les accolades...

dans ton code source généré je pense que tu as une succession de '<tr></tr>' (autant que de ligne de ta requete)

donc je ferais plutot comme ca:
for ($j=0;$j<=$nbreChamps;$j++) // On boucle sur la j ème colonnes 
        {
            $tableau=$tableau.'<td>'.$ligneResult[$NomChamp[$j]].'</td>';// On créé toutes les cellules dans la même ligne 
        }
si tu as encore des problemes, tu peux nous afficher le code sourcé généré, c'est plus partique pour voir les erreurs de td, de table mal fermée, etc.

Edit: je susi meme sur que le code généré est de la forme:

Code : Tout sélectionner

<table> <tr><td>champ1</td><td>champs2</td>[...]</tr> <tr>1</tr> <tr>6</tr> <tr></tr>[...] // multiplié par le nb de lignes, -2 :twisted: </table>

Posté : 12 juin 2008, 21:07
par romca
Bonjour à vous 2,
Pour répondre à HyWaN, oui j'avais fais le test avant de la requête dans PHPMyAdmn, elle fonctionnait.

Pour répondre à Steph29, eh bien c'est ok maintenant ! J'ai compris mon erreur par rapport à la boucle While. Je sais pas comment te remercier ! un café HTML ?
:D

Je n'ai pas pensé à afficher le code source, je prend note pour les prochains bugs, c'est une super idée merci. (J'ai essayé là maintenant, et de toute façon j'ai un Frame en page d'acceuil alors...).

Merci encore à vous !

Bonne soirée.
[/img]

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

[RESOLU] Re: Pbm sur creation de tableau dynamique

Posté : 12 juin 2008, 21:11
par romca
Bonjour à tous,
Suite à une requête SQL je cherche a intégrer les résultats dans un tableau et ce tableau est construit dynamiquement en fonction du nombre de colonnes demandées dans la requête et du nombre de lignes du résultat (pour être universel en fonction de la requete).
La 1ère ligne qui affiche le nom des attributs de la BDD est ok mais je n'arrive pas à obtenir les lignes de résultats alignées aux colonnes correspondantes, je n'ai même rien du tout en résultat. Je pense que le pbm est dans la boucle While mais ou ?? Merci si vous pouvez m'aider:

L'affichage que j'obtiens est celui-ci:
1
6
NomML PrenomML EmailML TelBurML TelPortML InterimML


TEST Page HTML
Et le code est de la page entière est celui ci:
<html>
<body>

<?php 
// Echo de test: echo "test echo de Rech1_ZoneGestion.php".'<br>'; 
include ("ConnectBDD.php");

if ($_POST["varBatiment"]) // vérifie que c'est bien la variable d'environnement POST qui est envoyée alors on peut exectuer la suite
//car les variables peuvent provenir de données "pirates" par exemple.... 
{
	$varBatiment=$_POST["varBatiment"];
	//echo de test: echo $varBatiment;

	$query="SELECT NomML,PrenomML,EmailML,TelBurML,TelPortML,InterimML FROM mlocal,zone WHERE Zone.NumZone=mlocal.NumZoneML AND Batiment='$varBatiment'";
	$result=mysql_query($query); 
	if(!$result){
		echo "La requete de Recherche1_ZoneGestion.php a echouée".mysql_error();
		exit();
		}
	
	/////////// Creation du Tableau avec les valeurs obtenues de la BDD/////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////
	$nbreLignes=mysql_num_rows($result);// On compte le nombre de lignes du résultat pour faire autant de lignes dans la tableau
	echo $nbreLignes.'<br>';
	$nbreChamps=mysql_num_fields($result);	// On compte le nombre de champs dans la BDD ( le nbre de colonnes)
	echo $nbreChamps.'<br>';
	
	$tableau='<table border=1>'; // Construction du début du tableau
	// On va créér la 1ère ligne du tableau avec le nom des colonnes de la table obtenue par la requete
	$tableau=$tableau.'<tr>';
		for ($j=0;$j<=$nbreChamps;$j++)// Sur la 1ère ligne on va insèrer le nom des champs de la table
		{	
			$Champ=mysql_fetch_field($result);
			$NomChamp[$j]=$Champ->name; // recupération du nom des champs da la table obtenue après la requete 
			$tableau=$tableau.'<td>'.$NomChamp[$j].'</td>';
					
		}
		$tableau=$tableau.'</tr>';// On vient de  créér la 1ère ligne avec le nom des champs
			
	// Création du tableau des résultats
	// A chaque ligne "ligneResult" on va insérer les valeurs des colonnes "j" récupérées dans la BDDD
while ($ligneResult=mysql_fetch_assoc($result))// On charge le pointeur de la ligne de résultat.
//mysql_fetch_assoc permet d'adresser le tableau à partir de nom du champ de la colonne.
{
	// ne sert plus car il y a le while: for ($i=0;$i<=$nbreLignes;$i++) // On boucle sur la i ème ligne
	//{			
					
		$tableau=$tableau.'<tr>'; 
		for ($j=0;$j<=$nbreChamps;$j++) // On boucle sur la j ème colonnes
		{ 
			$Champ=mysql_fetch_field($result);
			$NomChamp[$j]=$Champ->name; // recupération du nom des champs da la table 
			{			
			
			$tableau=$tableau.'<td>'.$ligneResult[$NomChamp[$j]].'</td>';// On créé toutes les cellules dans la même ligne
			}
		}
		$tableau=$tableau.'</tr>';// Fin de la i ème ligne complète		
	//}
	
	
}	
$tableau=$tableau.'</table>';
echo $tableau; // envoi du tableau complet		
	
	/*while ($ligne=mysql_fetch_array($result))
		{ 
		echo $ligne['NomML'].'<br>';
		echo $ligne['PrenomML'].'<br>';
		echo $ligne['EmailML'].'<br>';
		echo $ligne['TelBurML'].'<br>';
		echo $ligne['InterimML'].'<br>';
		}
		*/
	mysql_free_result ($result);
	mysql_close($connect_serveur);

}

?>
<br>TEST Page HTML
</body>
</html>
[/php]
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]