Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2247 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  probleme de tri de la base de donnée (colonne)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de tri de la base de donnée (colonne)

n°1642184
diabolo ci​tron
Avec une paille et des glaçons
Posté le 13-11-2007 à 14:18:43  profilanswer
 

Bonjour,
 
Je veux afficher le contenu de ma base de donnée mais le premier élement de chaque categorie est manquant. C'est une collection de livres dont certaines categories sont identiques. Je fais un tri de mes categories avec ma requete puis affiches les infos relatives à chacune d'entre elle.
Voici le code:

<?
include ('cnx.php');
$select = 'SELECT * FROM tbd ORDER BY categorie';
$result = mysql_query($select,$connexion)  or die ('Erreur : '.mysql_error() );
$categ='';
while ($row = mysql_fetch_array($result)){// chaque fois qu'il y a un resultat dans le tableau il est egal à $row
 if ($categ != $row['categorie']){
?>

<table width="1000" border="1">
  <tr>
   <td width="150"><img src="images/illustrations/<? echo $row['image']; ?>"></td>
    <td><? echo $row['categorie']; ?></td>
  </tr>
</table>
<table width="1000" border="1">
  <tr>
    <td>Edition:<? echo $row['edition']; ?></td>
 <td>Sc&eacute;nario:<? echo $row['scenario']; ?></td>
    <td>Dessin:<? echo $row['dessin']; ?></td>
  </tr>
</table>
<table width="1000" border="1">
  <tr>
    <td>Tome</td>
    <td>N&deg;</td>
    <td>Parution</td>
    <td>1&egrave;re Parution</td>
    <td>Commentaire</td>
  </tr>
<?
 }else{
  echo "<tr>";
  echo "<td>".$row['t_tome']."</td>";
  echo "<td>".$row['n_tome']."</td>";
  echo "<td>".$row['an_paru']."</td>";
  echo "<td>".$row['an_1er_paru']."</td>";
  echo "<td>".$row['commentaire']."<br>ISBN:".$row['isbn']."</td>";
  echo "</tr>";
 }
$categ = $row['categorie'];
}
?>

</table>
 
Pourquoi le premier élement manque a chaque fois? :heink:  
Je pense que c'est dû au "if" et au fait d'attribuer une valeur à $categ en fin de la boucle "while". Il doit exister une methode avec "for" je pense.
Merci de votre aide.

mood
Publicité
Posté le 13-11-2007 à 14:18:43  profilanswer
 

n°1642202
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-11-2007 à 14:33:15  profilanswer
 

vire ton else, il ne sert à rien.
Mets son contenu juste après le if.

n°1642336
diabolo ci​tron
Avec une paille et des glaçons
Posté le 13-11-2007 à 17:23:41  profilanswer
 

Game over!
Si je place le contenu du else juste après if, il ne m'affiche que le second enregistrement de chaque categorie. Le but est de pouvoir afficher une fois la categorie et son image puis les livres qui y correspondent. Si une nouvelle categorie est à afficher on refait un  nouveau tableau avec la nouvelle categorie puis la nouvelle image puis les livres qui s'y rattachent etc...
E ici on ecrit les <td> et les <tr> en dehors du tableau.

n°1642346
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-11-2007 à 17:31:19  profilanswer
 

tu fais tellement n'importe quoi que c'est impossible de s'y retrouver.
Je maintiens néanmoins que le else n'a strictement aucune raison d'être là.

n°1642347
diabolo ci​tron
Avec une paille et des glaçons
Posté le 13-11-2007 à 17:34:59  profilanswer
 

bon bah je vais me debrouiller alors...
Et encore merci pour ton aide.

n°1642401
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 13-11-2007 à 19:34:16  profilanswer
 

As-tu exécuté ta requête directement dans la base de données ?
Est-ce que le premier élément n'a pas une catégorie vide, par hasard, ce qui ferait afficher une ligne (comme dit dans le "else" ) en dehors de tout tableau, donc le navigateur ne la reconnaitrait pas ...
 
en d'autres termes, à quoi ressemble le code généré ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1642495
diabolo ci​tron
Avec une paille et des glaçons
Posté le 13-11-2007 à 23:10:48  profilanswer
 

NewsletTux a écrit :

As-tu exécuté ta requête directement dans la base de données ?
Est-ce que le premier élément n'a pas une catégorie vide, par hasard, ce qui ferait afficher une ligne (comme dit dans le "else" ) en dehors de tout tableau, donc le navigateur ne la reconnaitrait pas ...
 
en d'autres termes, à quoi ressemble le code généré ?


 
La requête a été executé directement dans la base de donnée et celle-ci ne contient aucun champ vide (facile à vérifier, seulement une dizaine d'enregistrement pour le moment). J'ai simplifié le code pour le rendre plus lisible:
 
 
<?
include ('cnx.php');
$select = 'SELECT * FROM matable';
$result = mysql_query($select,$connexion)  or die ('Erreur : '.mysql_error() );
$categ='';
while ($row = mysql_fetch_array($result)){
    if ($serie != $row['categorie']){
        echo "</table>\n";
?>

<table>
  <tr>
    <td width="150"><img src="images/<? echo $row['image']; ?>"></td>
    <td><? echo $row['categorie']; ?></td>
  </tr>
</table>
<table>
  <tr>
    <td>colonne1</td>
    <td>colonne2</td>
    <td>colonne3</td>
    <td>colonne4</td>
    <td>colonne5</td>
  </tr>
<?
     }else{
        echo "<tr>\n";
        echo "<td>".$row['colonne1']."</td>\n";
        echo "<td>".$row['colonne2']."</td>\n";
        echo "<td>".$row['colonne3']."</td>\n";
        echo "<td>".$row['colonne4']."</td>\n";
        echo "<td>".$row['colonne5']."</td>\n";
        echo "</tr>\n";
    }
$categ = $row['categorie'];
}
?>

 
 
Le code généré ne contient aucune balise vide ou fermeture de <table> incorrect.

n°1642498
diabolo ci​tron
Avec une paille et des glaçons
Posté le 13-11-2007 à 23:17:21  profilanswer
 

Après seconde verif, le code source commence effectivement par un </table> d'où une erreur peut survenir effectivement.

n°1642500
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 13-11-2007 à 23:27:20  profilanswer
 

à quoi correspond $serie dans :
 if ($serie != $row['categorie']){  
 
 
PS : je parlais bien du code source final généré dans le navigateur, pas du PHP à l'origine.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1642712
diabolo ci​tron
Avec une paille et des glaçons
Posté le 14-11-2007 à 14:02:49  profilanswer
 

erreur de ma part lors de la recopie il faut lire:
if ($categ != $row['categorie']){  
La table est simple à gérer, 7 champs:
1 chp "categorie"
1 chp "image"
5 champs "colonnes" nommés respectivement 1, 2, 3, 4, 5
elle comporte une dizaine d'enregistrement, seul le premier de chaque categorie ne s'affiche pas quand on la liste avec le code ci-dessus.
PS: Je parlais bien aussi du code source généré au final par le navigateur.
J'ai rajouté un echo "<table>" avent le 'while' ça fait pas très propre mais au moins chaque tableau se trouve ouvert et fermé.
Ici le code HTML n'a pas ou que peu d'incidence sur le traitement des données.

mood
Publicité
Posté le 14-11-2007 à 14:02:49  profilanswer
 

n°1642860
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 14-11-2007 à 16:50:05  profilanswer
 

juste après  
while ($row = mysql_fetch_array($result)){  
rajoute
print_r($row); exit();
 
ça ne te mettra aucune table, ça va juste imprimer le contenu de la première ligne et bloquer le script. Tu sauras ce qu'elle vaut exactement. (pense à regarder le résultat du print_r dans le code source)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1643077
diabolo ci​tron
Avec une paille et des glaçons
Posté le 14-11-2007 à 22:18:32  profilanswer
 

NewsletTux a écrit :

juste après  
while ($row = mysql_fetch_array($result)){  
rajoute
print_r($row); exit();
 
ça ne te mettra aucune table, ça va juste imprimer le contenu de la première ligne et bloquer le script. Tu sauras ce qu'elle vaut exactement. (pense à regarder le résultat du print_r dans le code source)


 
j'ai UNE solution pour un affichage correct (elle vaut ce qu'elle vaut). Lors du premier passage while, on realise quand même la condition if, la fin du tableau (html) ne peut donc pas s'afficher et on repart du while. En répetant le même bout de code hors du if, cela permet d'afficher le premier résultat.
Voici donc le code qui affichera l'ensemble des résultats:  
 
<?
include ('cnx.php');
$select = 'SELECT * FROM matable';
$result = mysql_query($select,$connexion)  or die ('Erreur : '.mysql_error() );
$categ='';
echo "<table>";
while ($row = mysql_fetch_assoc($result)){
    if ($categ != $row['categorie']){
        echo "</table>\n";
?>

<table>
  <tr>
    <td width="150"><img src="images/<? echo $row['image']; ?>"></td>
    <td><? echo $row['categorie']; ?></td>
  </tr>
</table>
<table>
  <tr>
    <td>colonne1</td>
    <td>colonne2</td>
    <td>colonne3</td>
    <td>colonne4</td>
    <td>colonne5</td>
  </tr>
<?
        echo "<tr>\n";
        echo "<td>".$row['colonne1']."</td>\n";
        echo "<td>".$row['colonne2']."</td>\n";
        echo "<td>".$row['colonne3']."</td>\n";
        echo "<td>".$row['colonne4']."</td>\n";
        echo "<td>".$row['colonne5']."<br>ISBN:".$row['isbn']."</td>\n";
        echo "</tr>\n";
$categ = $row['categorie'];
     }else{
        echo "<tr>\n";
        echo "<td>".$row['colonne1']."</td>\n";
        echo "<td>".$row['colonne2']."</td>\n";
        echo "<td>".$row['colonne3']."</td>\n";
        echo "<td>".$row['colonne4']."</td>\n";
        echo "<td>".$row['colonne5']."<br>ISBN:".$row['isbn']."</td>\n";
        echo "</tr>\n";
    }
$categ = $row['categorie'];
}
?>

 
[:anathema] C'est dégeu comme code mais ça marche en attendant mieux.  :ange:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  probleme de tri de la base de donnée (colonne)

 

Sujets relatifs
[Oracle] Tri personnalisé sur colonne[Résolu] Problème de chargement d'image
probleme expressions regulieres phpProbleme de chagement SWF
HTML (?) - Probleme affichage texte trop large.[AS] Typo dynamique, unicode, inserer des caracteres... problème !
[RESOLU]CSS probleme de couleur de fond sur des divs empilés.problème code pour un tri
probleme avec programmation csharp[SDL]Problème de Scrolling
Plus de sujets relatifs à : probleme de tri de la base de donnée (colonne)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR