Afficher des resultats de requete dans des tableaux [RESOLU]

Eléphanteau du PHP | 48 Messages

15 juin 2011, 11:27

Bonjour à tous,

Je me permets de demander votre aide car là je bloque sur un truc qui, j'en suis sûr, est extra simple pour vous.
Je souhaiterais afficher dans des tableaux des données de tables classées par domaine.

De cette table :
t_application
id_application (n° auto)
nom_application
nom_domaine

Je souhaiterais obtenir un tableau répertoriant les applications par domaine

exemple
Domaine : Bureautique
applis:
Word
Excel
Access

Domaine : Web
Applis :
Internet
Creation de pages

Domaine : Comptabilité
Applis :
etc.


Je suis sûr que c'est extra simple mais là j'avoue, je tourne autour du pot et rien ne vient.

Merci à ceux qui me conseilleront !
Modifié en dernier par Imer2008 le 16 juin 2011, 11:26, modifié 1 fois.

Eléphanteau du PHP | 20 Messages

15 juin 2011, 11:40

Salut Immer2008,
le problème est de créer le tableau ou bien de le remplir avec tes données ? Car la création de tableau est entièrement réalisé grace au html et css avec <table> après pour ce qui est de le remplir il s'agit de requête SQL.
Précise ton problème et je te dirai comment faire ^^
Hail to the king!

Eléphanteau du PHP | 48 Messages

15 juin 2011, 11:44

Le problème est de le remplir avec le php.

Le tableau est OK.

Ce que j'ai essayé de faire m'affiche un les données les unes sous les autres dans une cellule et non séparées.

En gros au lieu d'avoir mon exemple du dessus, j'ai :

domaine :
bureautique
comptabilité
web

suivi des noms des applis.

Il y a surement une histoire de boucle à faire mais c'est bien là ou je bloque !

Eléphanteau du PHP | 20 Messages

15 juin 2011, 11:49

D'accord, en effet il y a bien une boucle while a faire. Gràce à la fonction while ($row= mysql_fetch_assoc($marequete)) tu lis ligne par ligne ta base de donné, et doc tu affiche bien les applis qui vont a ton domaine.
Hail to the king!

Eléphanteau du PHP | 48 Messages

15 juin 2011, 11:55

ALors voilà une partie du code que j'ai faite et qui ne "fonctionne" pas :
<?php 
// requete récupérant la liste distincte des domaines triée par ordre alpha
$sql_liste_domaine = "SELECT DISTINCT nom_domaine FROM t_domaine ORDER BY nom_domaine"; 
$req_liste_domaine = mysql_query($sql_liste_domaine) or die('Erreur SQL !'.$sql_liste_domaine.'<br>'.mysql_error());
?>
<table align="center" cellpadding="5" cellspacing="5" width="300">
<tr>
    <td width="300" colspan="2" align="center"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">LISTE DES APPLICATIONS</font></td>
</tr>
<tr>
    <td align="center" colspan="2" width="300" style="border-width:thin; border-style:dashed; border-color:#666666"><b>DOMAINE</b> :
<?php
// boucle pour n'avoir qu'un domaine par cellule --> je dois surement faire une boucle avec if ou for a ce niveau mais je bloque
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))
	{
		echo $result_liste_domaine['nom_domaine']."<br>"; 
		$nomdudomaine =$result_liste_domaine['nom_domaine'];
	}?>
</td>
		</tr>
		<tr>
			<td style="border-right-color:#3399FF; border-right-style:solid; border-right-width:thin;">
			<?php
			// requete récupérant la liste des applications selon le nom du domaine
			$sql_liste_applis = 'SELECT nom_appli,nom_domaine FROM t_applications WHERE nom_domaine ="'.$nomdudomaine.'"'; 
			$req_liste_applis = mysql_query($sql_liste_applis) or die('Erreur SQL !'.$sql_liste_applis.'<br>'.mysql_error());
			while ($result_liste_applis = mysql_fetch_assoc($req_liste_applis))
			{
				echo $result_liste_applis['nom_appli']."<br>";
			}
			?></td>
		</tr>
</table>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juin 2011, 12:34

salut,

il te faut organiser une césure sur le nom de domaine afin de pouvoir réaliser ton affichage.
les tableaux en HTLM

tu peux essayer un truc comme ça
<?php
// requete récupérant la liste distincte des domaines triée par ordre alpha
$sql_liste_domaine = "SELECT nom_appli, nom_domaine FROM t_domaine ORDER BY nom_domaine";
$req_liste_domaine = mysql_query($sql_liste_domaine) or die('Erreur SQL !'.$sql_liste_domaine.'<br>'.mysql_error());
?>
<table align="center" cellpadding="5" cellspacing="5" width="300">
<tr>
    <td width="300" colspan="2" align="center"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">LISTE DES APPLICATIONS</font>

<?php
// boucle pour n'avoir qu'un domaine par cellule --> je dois surement faire une boucle avec if ou for a ce niveau mais je bloque
$nomdudomaine = null;
$nd
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))
        {
		if ($nomdudomaine != $result_liste_domaine['nom_domaine']) {
			$nomdudomaine = $result_liste_domaine['nom_domaine'];
			$nd = true;
			echo <<<eot
			</td>
</tr>
			<tr>
    <td align="center" colspan="2" width="300" style="border-width:thin; border-style:dashed; border-color:#666666"><b>DOMAINE</b>: $nomdudomaine<br>
              </td>
                </tr>
                <tr>
                        <td style="border-right-color:#3399FF; border-right-style:solid; border-right-width:thin;">
eot;
		<?php
		}
		echo $result_liste_domaine['nom_appli'].'<br />';
?>
		</td>
	</tr>
</table>
 
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 48 Messages

15 juin 2011, 13:35

Salut,

A priori, il doit y avoir une erreur car je teste ton code ca me met une erreur :
Parse error: syntax error, unexpected T_WHILE in C:\wamp\www\agent\creation_appli.php on line 80
sur cette ligne là :
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))

Au départ c'était parce qu'il manquait un '}' mais même en le rajoutant j'ai toujours l'erreur.

Je voyais le code de cette facon mais je me trompe peut etre.

Boucle sur les champs nomdudomaine (de 0 à i: i = nombre de nomdudomaine):
<cellule>Afficher le nomdudomaine_i</cellule>
<cellule>Afficher toute la liste des applis du nomdedomaine_i</cellule>
Fin boucle

Eléphanteau du PHP | 20 Messages

15 juin 2011, 13:49

Est ce que tu as essayé de faire ton affichage avec une seule requete puisque nom_domaine est présent dans t_appli ?
Une requete de ce type pourrais te facilité les choses:
SELECT NomDomaine,NomAppli from T_appli where nom_domaine= '.$Nom_Domaine';
L'affichage sera plus simple à partir de la !
Hail to the king!

Eléphanteau du PHP | 48 Messages

15 juin 2011, 14:27

Oui je l'ai déjà effectué cette requête dans mon code.

J'oubliais de préciser :

En fait, je fais une première requête qui me donne la liste distincte des domaines.
$sql_liste_domaine = "SELECT DISTINCT nom_domaine FROM t_domaine ORDER BY nom_domaine";
que je fais afficher ainsi :
echo $result_liste_domaine['nom_domaine']."<br>";
$nomdudomaine =$result_liste_domaine['nom_domaine']; //affectation à la variable $nomdudomaine

Et après je fais une 2ème requête qui me donne la liste des applis en fonction du domaine :
$sql_liste_applis = 'SELECT nom_appli,nom_domaine FROM t_applications WHERE nom_domaine ="'.$nomdudomaine.'"';
Mon souci c'est que :
1- ca m'affiche tous les domaines à la suite
2- ca m'affiche les noms des applis de mon dernier domaine uniquement.

D'où l'idée de la boucle.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juin 2011, 14:59

Salut,

A priori, il doit y avoir une erreur car je teste ton code ca me met une erreur :
Parse error: syntax error, unexpected T_WHILE in C:\wamp\www\agent\creation_appli.php on line 80
sur cette ligne là :
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))
hum a tu regardé la ligbne du dessus ? si tu vire le $nd seul qui traine ça va mieux nan ?

en régle générale la ligne indiqué n'est pas toujours celle où il y a l'erreur ;)
Code corrigé, j'ai donc viré le début de variable en trop et le <?php qui n'avaitp as lieux d'être (je suis allé un peu vite m'enfin ça aurait pu être pire ^^)
<?php
// requete récupérant la liste distincte des domaines triée par ordre alpha
$sql_liste_domaine = "SELECT nom_appli, nom_domaine FROM t_domaine ORDER BY nom_domaine";
$req_liste_domaine = mysql_query($sql_liste_domaine) or die('Erreur SQL !'.$sql_liste_domaine.'<br>'.mysql_error());
?>
<table align="center" cellpadding="5" cellspacing="5" width="300">
<tr>
    <td width="300" colspan="2" align="center"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">LISTE DES APPLICATIONS</font>

<?php
// boucle pour n'avoir qu'un domaine par cellule --> je dois surement faire une boucle avec if ou for a ce niveau mais je bloque
$nomdudomaine = null;
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))
        {
                if ($nomdudomaine != $result_liste_domaine['nom_domaine']) {
                        $nomdudomaine = $result_liste_domaine['nom_domaine'];
                        $nd = true;
                        echo <<<eot
                        </td>
</tr>
                        <tr>
    <td align="center" colspan="2" width="300" style="border-width:thin; border-style:dashed; border-color:#666666"><b>DOMAINE</b>: $nomdudomaine<br>
              </td>
                </tr>
                <tr>
                        <td style="border-right-color:#3399FF; border-right-style:solid; border-right-width:thin;">
eot;
                }
                echo $result_liste_domaine['nom_appli'].'<br />';
        }
                ?>
                </td>
        </tr>
</table>
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 48 Messages

15 juin 2011, 15:34

Bon je continue mes pérégrinations, ca avance mais alors très très lentement.

J'ai réussi à faire une boucle et ca marche à peu près à un détail près...

Au début j'ai bien mon premier domaine avec la liste des applis correspondantes puis j'ai une suite d'erreur du genre :
Notice: Undefined offset: 1 in C:\wamp\www\agent\creation_appli.php on line 86

Puis je me retrouve avec mon 1er domaine avec sa liste d'applis, puis le 2eme domaine avec sa liste d'applis et a nouveau les messages d'erreurs :
Notice: Undefined offset: 1 in C:\wamp\www\agent\creation_appli.php on line 86

etc.

En gros tout en bas de page, j'ai ma liste complète de domaine et d'applis comme je souhaiterais l'avoir... #-o

Voilà mon code :
<?php
// requete récupérant la liste distincte des domaines triée par ordre alpha
$sql_liste_domaine = "SELECT DISTINCT nom_domaine FROM t_domaine ORDER BY nom_domaine";
// On sélectionne toutes les lignes de notre table membres.
$compte = mysql_query('SELECT COUNT(*) AS compt FROM t_domaine');
$nbrs_enreg = mysql_fetch_array($compte);
$nbre_domaine = $nbrs_enreg['compt']-1;
echo $nbre_domaine;
$req_liste_domaine = mysql_query($sql_liste_domaine) or die('Erreur SQL !'.$sql_liste_domaine.'<br>'.mysql_error());
?>
<table align="center" cellpadding="5" cellspacing="5" width="300">
<tr>
    <td width="300" colspan="2" align="center"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">LISTE DES APPLICATIONS</font></td>
</tr>
<tr>
<?php
// tant qu'on a un résultat
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))
{ 
	// on affecte les données dans un tableau
	$tab_domaine[] =$result_liste_domaine['nom_domaine'];
	// boucle sur le tableau
	for ($i=0;$i<=$nbre_domaine;$i++)
	{
	?>
    	<td align="center" colspan="2" width="300" style="border-width:thin; border-style:dashed; border-color:#666666"><b>DOMAINE</b> :
		<?php echo $tab_domaine[$i];?></td>
	</tr>
	<tr>
		<td><?php // requete récupérant la liste des applications selon le nom du domaine
		$sql_liste_applis = 'SELECT nom_appli,nom_domaine FROM t_applications WHERE nom_domaine ="'.$tab_domaine[$i].'"';
		$req_liste_applis = mysql_query($sql_liste_applis) or die('Erreur SQL !'.$sql_liste_applis.'<br>'.mysql_error());
		while ($result_liste_applis = mysql_fetch_assoc($req_liste_applis))
		{
			echo $result_liste_applis['nom_appli']."<br>";
		}
		?></td>
	</tr>
	<?php
	}
}
?>

Eléphanteau du PHP | 48 Messages

15 juin 2011, 16:29

Pour être un peu plus précis sur mes erreures les lignes indiquées sont celles ci :
	<?php echo $tab_domaine[$i];?></td>
et
	$sql_liste_applis = 'SELECT nom_appli,nom_domaine FROM t_applications WHERE nom_domaine ="'.$tab_domaine[$i].'"';

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juin 2011, 16:52

a vu de nez c'est du au moins -1 lors du calcul du nombre de domaine

ceci dit tu n'a pas besoin de connaitre le nombre de domaine tu peux utiliser foreach pour parcourir le tableau, a partir de la tu n'a plus de soucis d'index qui n'existe pas :)

ceci dit je reste sur ma position tu n'a pas besoin de faire une requete dans une boucle, un requete SQL a la base suffit, pour cela tu peux très utiliser [url=http://sqlpro.developpez.com/cours/sqlaz/jointures/}une jointure[/url] entre tes tables tu a deja tous ce qu'il faut opur cela ;)

d'ailleurs je vois pas l'interet du distinct dur la 1ere requete étant donné que dans cette table te ne doit pas avoir de doublon ? (sinon ça va vite être la merde ;) )

donc SELECT nom_domaine FROM t_domaine ORDER BY nom_domaine
SELECT nom_appli, t_domaine.nom_domaine as ndm FROM t_applications app join t_domaine d on app.nom_domaine = d.nom_domaine;

avec ça plus l'exemple de césure que j'ai mis plus haut ça doit rouler :)

@+
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 48 Messages

15 juin 2011, 16:59

J'ai lu le foreach mais bon vu mon niveau avancé dans PHP... ca risque de prendre encore plus de temps !

Dernier essai, j'arrive à virer les UNDEFINED OFFSET grace à un isset, mais le bug c'est :
la boucle tourne comme ca et affiche les domaines à chaque fois (de cette facon):

- tour 0:
Domaine 0
Applis 0

- tour 1:
Domaine 0
Applis 0
Domaine 1
Applis 1

- tour 2:
Domaine 0
Applis 0
Domaine 1
Applis 1
Domaine 2
Applis 2

etc.

donc en gros il répète à chaque fois les domaines...

Eléphanteau du PHP | 48 Messages

16 juin 2011, 10:30

Je poste le code au cas où quelqu'un trouve avant moi l'erreur dans la boucle :
<?php
// requete récupérant la liste distincte des domaines triée par ordre alpha
$sql_liste_domaine = "SELECT nom_domaine FROM t_domaine ORDER BY nom_domaine";
// On sélectionne toutes les lignes de notre table membres.
// on compte combien de domaines pour la boucle plus bas
$compte = mysql_query('SELECT COUNT(*) AS compt FROM t_domaine');
$nbrs_enreg = mysql_fetch_array($compte);
// -1 car début à 0
$nbre_domaine = $nbrs_enreg['compt']-1;
$req_liste_domaine = mysql_query($sql_liste_domaine) or die('Erreur SQL !'.$sql_liste_domaine.'<br>'.mysql_error());
?>
<table align="center" cellpadding="5" cellspacing="5" width="300">
<tr>
    <td width="300" colspan="2" align="center"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">LISTE DES APPLICATIONS</font></td>
</tr>
<?php
// tant qu'on a un résultat
while ($result_liste_domaine = mysql_fetch_assoc($req_liste_domaine))
{ 
	// on affecte les données dans un tableau
	$tab_domaine[] =$result_liste_domaine['nom_domaine'];
	// boucle sur le tableau
	$i=0;
	while ($i<=$nbre_domaine)
	{
	if(isset($tab_domaine[$i]))
	{
	?>
	<tr>
    	<td align="center" colspan="2" width="300" style="border-width:thin; border-style:dashed; border-color:#666666"><b>DOMAINE</b> :
		<?php echo $tab_domaine[$i];?></td>
	</tr>
	<tr>
		<td><?php // requete récupérant la liste des applications selon le nom du domaine
		$sql_liste_applis = 'SELECT nom_appli,nom_domaine FROM t_applications WHERE nom_domaine ="'.$tab_domaine[$i].'"';
		//$i++;
		$req_liste_applis = mysql_query($sql_liste_applis) or die('Erreur SQL !'.$sql_liste_applis.'<br>'.mysql_error());
		while ($result_liste_applis = mysql_fetch_assoc($req_liste_applis))
		{
			echo $result_liste_applis['nom_appli']."<br>";
		}
		?></td>
	</tr>
	<?php
	}
	$i++;
	}
}
?>
</table>