Page 1 sur 1

Affichage d'un tableau dynamique

Posté : 18 août 2005, 10:16
par Elisa
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>

Posté : 18 août 2005, 10:21
par ouckileou
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

Posté : 18 août 2005, 10:41
par Elisa
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?

Posté : 18 août 2005, 10:52
par ouckileou
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

Posté : 18 août 2005, 11:08
par Elisa
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?

Posté : 18 août 2005, 11:12
par Cyrano
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.

Posté : 18 août 2005, 11:13
par ouckileou
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

Posté : 18 août 2005, 11:14
par Elisa
Merci pour cette information. Je me mets en résolu. :P