Afficher des resultats de requete dans des tableaux [RESOLU]

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher des resultats de requete dans des tableaux [RESOLU]

Re: Afficher des resultats de requete dans des tableaux [RESOLU]

par moogli » 16 juin 2011, 15:23

;)

il y a un bouton "marquer résolus" sur les réponses si tu pouvais cliquer dessus ;)

@+

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 16 juin 2011, 11:11

J'avais pas vu ton message Moogli !

Effectivement j'ai testé et ca marche !!!

Donc en fait, pas besoin de boucle là dessus !

C'est impec ! ;) =D>

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 16 juin 2011, 11:07

Purée, ca m'énerve cette boucle, je tourne autour et je vois pas ! :x

Je viens de modifier un truc et cette fois ca répète X fois le domaine.
Ca fait :
Domaine 1
Applis

Domaine 2
Applis 2

Domaine 2
Applis

etc.

Domaine X
Applis X

J'ai juste changé ça :
    		<td align="center" colspan="2" width="300" style="border-width:thin; border-style:dashed; border-color:#666666"><b>DOMAINE</b> :<?php echo $result_liste_domaine['nom_domaine']; // $tab_domaine[$i];?></td>

Re: Afficher des resultats de requete dans des tableaux

par moogli » 16 juin 2011, 10:40

heu wé mais nan, $result_liste_domaine['nom_domaine']; c'est pas un tableau que ça contient mais une chaine de caractère (le nom du domaine) donc pas besoin de while la dessus


tu peux donc virer
$tab_domaine[] =$result_liste_domaine['nom_domaine'];
// boucle sur le tableau
$i=0;
while ($i<=$nbre_domaine)
{
if(isset($tab_domaine[$i]))
{
et la requete SQL devient :
$sql_liste_applis = 'SELECT nom_appli,nom_domaine FROM t_applications WHERE nom_domaine ="'.mysql_real_escape_string($result_liste_domaine['nom_domaine']).'"';

oublie pas de virer le $i++ et les } en trop à la fin du code (fermeture du if et du while supprimé).

@+

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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>

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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...

Re: Afficher des resultats de requete dans des tableaux

par moogli » 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 :)

@+
@+

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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].'"';

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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
	}
}
?>

Re: Afficher des resultats de requete dans des tableaux

par moogli » 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>
@+

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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.

Re: Afficher des resultats de requete dans des tableaux

par Dralex76 » 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 !

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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

Re: Afficher des resultats de requete dans des tableaux

par moogli » 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>
 
@+

Re: Afficher des resultats de requete dans des tableaux

par Imer2008 » 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>