[PHP] Continuité d'affichage dans un tableau

Résolu/Fermé
Lilie - 10 mars 2006 à 10:31
 Lilie - 11 mars 2006 à 11:37
Bonjour,

Je viens d'être confrontée à un nouveau problème dans mon catalogue :

Les produits sont réunis en plusieurs catégories. Chaque tableau généré porte le nom de la catégorie.

Admettons les catégories suivantes : Livre et DVD.
Je rentre des références dans EasyPHP et le code me sort mes tableaux.

PROBLEME : si je rentre 5 DVD, puis 3 Livres et puis ensuite 2 DVD, le code va me générer un nouveau tableau de DVD au lieu de compléter celui qui a déjà été créé une première fois.

Voici le code :

<--DEBUT-->

// on détermine la catégorie traitée
$cat_traitee="";
echo ('<table width="500" border="0" cellspacing="0" cellpadding="0" align="center" valign="top">');
while ($row=mysql_fetch_array($result)) {
$etiquette = $row[2];

if ($etiquette == $cat_traitee) {
echo ('
<tr valign="top" >
<td valign="top">
<table border="0" valign="top" cellspacing="1" cellpadding="0" bgcolor="#FFFFFF">
<tr valign="top" class="tableau">
<td width="100" valign="top"><a href="'.$row[4].'" target=_blank ><span class="lienrapide">'.$row[0].'</span></a></td>
<td height="15" valign="top">'.$row[1].'</td>
</tr>
</table>
</td>
</tr>');
$cat_traitee=$etiquette;
}

else {

echo ('<tr valign="top" >');
echo ('<td valign="top" > <br><table width="100%" border="0" valign="top" cellspacing="0" cellpadding="2" bgcolor="#C3DAAC">');
echo ('<tr>');
echo ('<td class="tableau"><b>'.$row[2].'</b></td>');


echo ('</tr>');
echo ('</table></td>');
echo ('</tr>');
echo ('<tr> ');
echo ('<td> ');
echo ('<table border="0" cellspacing="0" cellpadding="2" bgcolor="#FFFFFF">');
echo ('<tr class="tableau"> ');
echo ('<td width="100" valign="top"><a href=" '.$row[4].'"><span class="lienrapide">'.$row[0].'</span></a></td>');
echo ('<td height="15" valign="top">'.$row[1].'</td>');
echo ('</tr>');
echo ('</table>');
echo ('</td>');
echo ('</tr>');
$cat_traitee=$etiquette;
}



}

<--FIN-->

De même que le dernier problème auquel j'ai été confrontée, je suis sûre que la solution tient à peu de choses, mais voilà, je n'arrive pas à trouver.

Help, please?

Merci beaucoup d'avance.
Lilie
A voir également:

2 réponses

Utilisateur anonyme
10 mars 2006 à 11:04
Hello Lilie,
Il doit manquer un peu de code (comme la requete) pour bien comprendre ce que tu veux faire. :)
0
Ha!! Mon sauveur! =D

La requête, la voila. Tout ce morceau est en tout debut du précédent code (héhéhé, c'est celui pour lequel tu m'as déjà aidée pour la visibilité) :

<--DEBUT-->

//connexion à la BdD
$connect = mysql_connect($host, $user, $password) or die (mysql_error());
mysql_select_db($db);

// sélection de la table et des colonnes choisies
$marequete = "SELECT ref_produit , description_produit , categorie_produit , famille_produit , url_produit, visibilite_produit
FROM produit
WHERE famille_produit LIKE '%".$cat."%' AND visibilite_produit = 1
ORDER BY famille_produit ";
$result = mysql_query($marequete, $connect) or die(mysql_error());


<--FIN-->

En fait, si je fait un schéma :

DVD
produit1
produit 2

Livres
produit1
produit2

DVD
produit3


Voilà ce que cela me fait quand je rendre un troisième produit DVD, au lieu de l'ajouter derrière produit2 du tableau DVD, il en a créé un 2ème.
Je précise que dans EasyPHP, tous les produits DVD ou Livre ne sont pas entrés à la suite les un des autres. Mon code fait donc une lecture linéaire de la base au lieu de la fouiller entière avant de passer à une autre cétégorie.

Merci!!!
0
Utilisateur anonyme
10 mars 2006 à 16:32
Re,

Ca manque de lisibilité tout ca. :)

D'après ce que je vois, tu sélectionnes tes produits et tu les ordonnes par famille de produit.
Ensuite, tu crées autant de lignes dans une table qu'il y a de resultats dans le resultset.
$etiquette est la categorie de produit, et tu testes si la catégorie utilisée précedement est la meme que celle en cours.
Si ce n'est pas le cas, tu affiches la nouvelle categorie dans une ligne, puis le produit. Si c'est le cas, tu n'affiche que le produit.
Jusque la, je dois avoir bon. :)

Je ne vois pas d'erreur à priori. Les echo de table de table de table rende la lecture difficile, as tu regardé le code html generé ?
Je suis sur qu'il doit manquer un colspan quelque part...

C'est un probleme html pas php. Je suis sur que cela te rassure. :)
0
Va falloir que je dresse un autel en ton honneur =D

Quoiqu'il en soit, le code HTML généré ne me SEMBLE pas manquer quoique ce soit, mais n'ayant pas l'oil entrainé, je peut me tromper... Je vais reprendre méticuleusement l'épluchage, avec ta suggestion en tête.

J'ai trouvé une parade : quand je rentre mon code dans EasyPHP, il faut demander de classer par categorie. Mais faut que j'arrête de faire ça car quand quelqu'un d'autre entrera des données, il le fera par l'interface administrative et non EasyPHP.


Merci beaucoup pour ton aide!
0
Utilisateur anonyme
11 mars 2006 à 11:09
Hello Lilie,

Pas de WE pour les bosseurs. :)

En fat, il y a un truc que je ne saisis pas lorsque tu dis que tu rentres des données par EasyPhp, EasyPhp est un ensemble de logiciel composé de Apache, PHP, Mysql, phpmyadmin. Je pense donc que tu dois saisir tes données par phpMyAdmin (interface de gestion de MySql). Bref, passons...

Il semble donc que ce soit un probleme d'ordonnancement des résultats.
Je viens de relire ta requete, et c'est ton order by qui n'est pas bon. :)
Au lieu de faire un order by famille_produit à la fin de la requete, fait un order by categorie_produit.
Ca devrait fonctionner nettement mieux maintenant ! :)

0
Lilie > Utilisateur anonyme
11 mars 2006 à 11:37
Oops, oui je dit EasyPHP mais c'est exacteent cela, je parle de l'interface de gestion de MySQL. Seulement après des mois et des mois à dire simplement "Easy PHP" pour simplifier, on prend des habitudes :P

.... Bon, je me sens incroyablemet idiote tout à coup. Alors que je fais ordonner les produits par categorie via phpMyAdmin, cela ne m'est pas venu à l'esprit une seule fois de zyeuter cet order by...
Et tu as raison, c'était là que ça coinçait.

Vivement que je finisse ce site...

Merci beaucoup!!! *se prosterne*
0