Affichage d'un tableau dynamique

Eléphant du PHP | 179 Messages

18 août 2005, 10:16

Bonjour à tous!

Voici un script qui a été élaboré en partie sur le forum. Il est censé afficher un tableau dynamique. Malheureusement, seule la première ligne s'affiche. J'ignore si c'est un problème de requête. Mais j'opte plutôt pour le système d'alternance. Merci pour votre aide.
<?php
$couleur1 = '#ffcc00';
$couleur2 = '#ffffe0';
?>

<table class="tableau">
<table width=2000 rules="cols" border=0 cellspacing=0 cellpadding=10>

<!-- titres-->

<tr bgcolor="<?php echo $couleur1; ?>">
<td><b>Id</b></td>
<td><b>Nom</b></td>
<td><b>Autre nom</b></td>
<td><b>Groupe</b></td>
<td><b>Spécialité</b></td>
<td><b>Présentation</b></td>
<td><b>Inf.compl.</b></td>
<td><b>Pays d'origine</b></td>
<td><b>Adresse</b></td>
<td><b>Tel</b></td>
<td><b>Fax</b></td>
<td><b>Site société </b></td>
<td><b>NomReprFr </b></td>
<td><b>AdresseReprFr</b></td>
<td><b>TelReprFr</th>
<td><b>FaxReprFr </b></td>
</tr>


<?php
#connection à la base et sélection de la table et des champs#
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
	FROM societes s, groupes g WHERE s.RefGroupe=g.IdGroupe ORDER BY IdSociete";
	$result=mysql_query($requete)or die(mysql_error());

$cptCouleur = 1;
while ($val=mysql_fetch_array($result))
{
$couleur = ($cptCouleur % 2 == 0)?$couleur1:$couleur2;
?>

<tr bgcolor="<?php echo $couleur; ?>">
<td> <?php print ($val["IdSociete"]);?> </td>
<td> <?php print ($val["NomSociete"]);?> </td>
<td> <?php print ($val["AutreNomSociete"]);?> </td>
<td> <?php print ($val["NomGroupe"]);?> </td>
<td> <?php print ($val["Specialite"]);?> </td>
<td> <?php print ($val["Presentation"]);?> </td>
<td> <?php print ($val["InfCompl"]);?> </td>
<td> <?php print ($val["PaysOrigine"]);?> </td>
<td> <?php print ($val["Adresse"]);?> </td>
<td> <?php print ($val["Tel"]);?> </td>
<td> <?php print ($val["Fax"]);?> </td>
<td> <?php print ($val["SiteSociete"]);?> </td>
<td> <?php print ($val["NomReprFr"]);?> </td>
<td> <?php print ($val["AdresseReprFr"]);?> </td>
<td> <?php print ($val["TelReprFr"]);?> </td>
<td> <?php print ($val["FaxReprFr"]);?> </td>
</tr>


<?php
$cptCouleur++;
}
mysql_close($lien);
?>

</table>
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 août 2005, 10:21

moi j'opte pour un problème de requête :)

ou plutôt je pense que ta requête ne renvoie qu'un seul résultat, je ne vois pas trop comment l'alternance des couleurs influerait

mais bon pour en être sur, rajoute ça après ton mysql_query :
$nbResultats = mysql_num_rows($result);
echo 'Il y a '.$nbResultats.' résultat(s)';
à partir de là on verra ;)
mysql_num_rows -- Retourne le nombre de lignes d'un résultat MySQL
=> http://fr2.php.net/mysql_num_rows

Eléphant du PHP | 179 Messages

18 août 2005, 10:41

J'ai fait le test. Il me trouve 0 résultat. En revanche il semblerait que lorsque RefGroupe=null, il ne m'affiche pas les résultats. Lorsque je modifie et que je mets un groupe, ô miracle du PHP, ça s'affiche. Est-ce que je peux modifier ma requête pour qu'elle prenne le "null" en compte?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 août 2005, 10:52

oui avec une jointure externe : http://www.laltruiste.com/document.php? ... nture.html

Code : Tout sélectionner

SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr FROM societes s LEFT OUTER JOIN groupes g ON s.RefGroupe = g.IdGroupe ORDER BY IdSociete
même les lignes de sociétés qui ne sont pas liées à groupes seront prises en compte

Eléphant du PHP | 179 Messages

18 août 2005, 11:08

OUAOUH :love1: C'est le rêve ces jointures! Je n'imaginais pas de telles subtilités. Merci ça marche!

Une petite question. Si je veux faire un petit texte disant: La base contient X groupes, Y sociétés et Z produits. Est-ce que j'ai plus intérêt à utliser la fonction COUNT ou mysql_num_rows?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Mammouth du PHP | 19672 Messages

18 août 2005, 11:12

La différence est au niveau de l'exécution:
- COUNT va s'Exécuter en SQL et ça retournera directement le nombre;
- mysql_num_rows va obliger le SGBD à extraire tout et ensuite tu rajoutes une instruction PHP qui récupère le nombre.

Donc un COUNT sera à priori plus approprié, mais ça dépend toujours des circonstances.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 août 2005, 11:13

OUAOUH :love1: C'est le rêve ces jointures! Je n'imaginais pas de telles subtilités. Merci ça marche!
dans l'idéal ta requête de base (la toute première) devrait même être faite comme ça :

Code : Tout sélectionner

SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite, s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr FROM societes s INNER JOIN groupes g ON s.RefGroupe=g.IdGroupe ORDER BY IdSociete
la jointure est bien en évidence, le WHERE étant reservé au filtrage : date supérieure à aujourd'hui, age <= 20 ... etc
le INNER ne va prendre que les lignes qui remplissent la condition
Une petite question. Si je veux faire un petit texte disant: La base contient X groupes, Y sociétés et Z produits. Est-ce que j'ai plus intérêt à utliser la fonction COUNT ou mysql_num_rows?
ça dépend :
si tu n'as pas besoin des résultats, une requête avec COUNT(*) sans hésiter : plus rapide
on a pas besoin de se ramener 200 000 résultats si c'est juste pour les compter

maintenant si tu affiches les résultats, et que c'est juste une info en plus, personnellement j'utiliserai cette fonction, pas la peine de faire une autre requête SQL

Eléphant du PHP | 179 Messages

18 août 2005, 11:14

Merci pour cette information. Je me mets en résolu. :P
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!