Afficher résultat SQL dans des colonnes

Catalina -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,

Je me tourne vers vous car je sèche complètement...
Je programme mon site en voulant afficher le résultat d'une requête dans plusieurs colonnes mais je bloque...
Ma requête est bonne et le résultat s'affiche bien mais dans une seule colonne...

$sql_select_dep = $db->query("SELECT dep_id FROM " . DB_PREFIX . "dep WHERE parent_id='" . $parent_id . "') " . $dep_query . " ORDER BY order_id ASC, name ASC");

Comme ce sont les départements, cela me fait une page super longue !!!

J'aimerai pouvoir diviser ce résultat sur 7 colonnes et 12 lignes mais je n'y arrive pas...
Même en insérant un tableau et en appelant ma variable (<?=$dep_box_content;?>) ça ne marche pas : le tableau se met bien au dessus mais les infos sont en 1 seule colonne et dessous !!!

Help !!

Merci à tous,

Cathy qui ne sait plus comment faire....!!!

8 réponses

  1. wyllos Messages postés 165 Statut Membre 5
     
    tu peux calculer le nombre d'enregistrement et ensuite tu fais

    if($nbr<12)
    {
    echo "<div id="row1"></div>";
    }
    .....
    0
    1. Catalina
       
      euh... je ne sais pas comment on calcule le nombre d'enregistrement.... :(
      Et je ne sais pas où placer ton code :(
      Après la requête ?
      Juste avant l'affichage de <?=$dep_box_content;?> ?
      Merci à toi :)
      0
  2. wyllos Messages postés 165 Statut Membre 5
     
    a la suite de ta requete tu peux faire

    $num_rows = mysql_num_rows($dep_query);

    for($i=0;$i<sizeof($num_rows);$i++)
    {
    if($i<12)
    {
    echo "<div id="row1"> ton premier tableau</div>";

    }
    if ($i>12 && $i<24)
    {
    echo "<div id="row2">ton second tableau</div>;
    }
    ..........
    }
    0
    1. Catalina
       
      rien à faire.... ça ne marche pas...
      0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    essayes avec du CSS comme ça:

    <?php
    
    $sql_select_dep = $db->query("SELECT dep_id FROM " . DB_PREFIX . "dep WHERE parent_id='" . $parent_id . "') " . $dep_query . " ORDER BY order_id ASC, name ASC");
    
    $i=1;
    $open_div=0;
    $close_div=0;
    while($row=mysql_fetch_assoc($sql_select_dep)){
    	if($i==1){
    		echo '<div id="colonnes" style="width:50px; float:left;">'; // tu peux mettre le style CSS à part si tu veux
    		$open_div++;
    	}
    	echo $row['dep_id'];
    	$i++;
    	if($i>12){
    		$i=1;
    		echo '</div>';
    			$close_div++;
    	}
    
    }
    //on rajoute une femeture de balise div si elle manque,( si le nombre de dep n'est pas un multiple de 12 !)
    if($close_div<$open_div){
    	echo '</div>';
    }
    0
    1. Catalina
       
      bon ben là j'ai carrément une belle erreur :)

      Une erreur Mysql est survenue :

      * L'opération que vous essayez d'exécuter est invalide
      * Erreur Mysql : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY order_id ASC, name ASC' at line 2
      * SQL Query: SELECT dep_id FROM base_dep WHERE parent_id='') ORDER BY order_id ASC, name ASC
      0
  4. Alain_42 Messages postés 5413 Statut Membre 904
     
    tu dois avoir un pb avec la syntaxe de ta requette

    je ne connais pas cette methode
    0
    1. Catalina
       
      Bon, je viens de tenter un brillant :

      <?
      $sql_select_deps = $db->query("SELECT dep_id FROM " . DB_PREFIX . "deps WHERE
      parent_id='" . $parent_id . "' AND (user_id=0 OR user_id='" . "')
      " . $deps_query . " ORDER BY order_id ASC, name ASC");

      $num=11;
      $width=100/$num;
      $cnt=0;

      $deps_content="<tr>";
      $taa=0;

      while ($cat_details = $db->fetch_array($sql_select_deps))
      {
      $taa++;
      if ($cnt==$num){
      $deps_content.="</tr></div>";
      $cnt=0;
      }
      $deps_content.='<a href="deps.php?parent_id=' . $cat_details['dep_id'] . '">' . $dep_lang[$cat_details['dep_id']] . '</a></td>';
      $cnt++;
      }
      ?>
      <?=$dep_content;?>

      Tout marche royalement bien sauf que je n'ai pas un affichage sous forme de tableau mais tous les départements s'affichent comme ça en haut de ma page :

      Ain (01)Aisne (02)Allier (03)Alpes-de-Hte-Provence (04)Alpes-Maritimes (06)Ardèche (07) Ardennes (08)Ariège (09) Aube (10)Aude (11)Aveyron (12Bas-Rhin (67)Bouches-du-Rhône (13)Calvados (14)Cantal (15)Charente (16)Charente-Maritime (17)Cher (18)Corrèze (19)Corse-du-Sud (2A)Côte-d'Or (21)Côtes-d'Armor (22)Creuse (23)Deux-Sèvres (79)Dordogne (24)Doubs (25)Drôme (26)Essonne (91)Eure (27)Eure-et-Loir (28)Finistère (29)Gard (30)Gers (32)Gironde (33).................

      Pas top hein... :(

      J'ai zappé quoi là ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    tu ne peux pas afficher avec une table et des tr td il faut absolument passer par les div et du CSS

    essayes comme ça:
    <?php
    $sql_select_deps = $db->query("SELECT dep_id FROM " . DB_PREFIX . "deps WHERE
    parent_id='" . $parent_id . "' AND (user_id=0 OR user_id='" . "')
    " . $deps_query . " ORDER BY order_id ASC, name ASC");
    
    $num=11;
    $width=100/$num;
    $open_div=0;
    $close_div=0;
    $taa=0;
    $deps_content='';
    while ($cat_details = $db->fetch_array($sql_select_deps))
    {
    	if($taa==0){
    		//premier de la colonne on ouvre le div
    		$deps_content.='<div id="colonnes" style="width:'.$width.'; float:left;">';
    		$open_div++;
    	}
    	$deps_content.='<a href="deps.php?parent_id=' . $cat_details['dep_id'] . '">' . $dep_lang[$cat_details['dep_id']] . '</a>';
    	$taa++;
    
    
    
    	if ($taa>$num){
    		//on a atteint le dernier de la colonne
    		$taa=0;
    		$deps_content.="</div>"; //on ferme le div
    		$close_div++;
    		}else{
    			echo '<br />';
    		}
    
    
    }
    //on rajoute une femeture de balise div si elle manque,( si le nombre de dep n'est pas un multiple de 12 !)
    if($close_div<$open_div){
    	echo '</div>';
    }
    
     echo $dep_content;
     ?>
    0
    1. Catalina
       
      rhaaaaaaaaa

      ça m'affiche la liste des département tout en bas à gauche et superposés l'un sur l'autre en dégradé arf !!
      0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    il faut modifier ça:$width=100/$num;


    par
    $width=500/$num;
    


    et $deps_content.='<div id="colonnes" style="width:'.$width.'; float:left;">';
    par:

    $deps_content.='<div id="colonnes" style="width:'.$width.'px ; float:left;">';
    0
    1. Catalina
       
      rien à faire... ça m'affiche toujours les départements dans une colonne à gauche en bas et superposés les uns sur les autres... même en augmentant le $width...
      pffff je vais me manger une glace tiens, ça va me rafraichir les neurones :)
      si vous avez d'autres suggestions, je suis preneuse après ma glace lol
      0
  8. Alain_42 Messages postés 5413 Statut Membre 904
     
    je ne sais pas si tu es toujours à l'écoute, mais une autre solution sans le CSS, avec seulement table et tr td

    <?php
    $sql_select_deps = $db->query("SELECT dep_id FROM " . DB_PREFIX . "deps WHERE
    parent_id='" . $parent_id . "' AND (user_id=0 OR user_id='" . "')
    " . $deps_query . " ORDER BY order_id ASC, name ASC");
    
    //on va stocker les resultats dans un array pour pouvoir afficher ensuite comme on veut
    $array_resultats=array();
    while ($cat_details = $db->fetch_array($sql_select_deps)){
    
    	$array_resultats[]='<a href="deps.php?parent_id=' . $cat_details['dep_id'] . '">' . $dep_lang[$cat_details['dep_id']] . '</a></td>';
    
    }
    
    //nombre de resultats
    $nb_resultats=sizeof($array_resultats);
    //parametres modifiables
    $nb_par_colonne=12;
    //calculs nbr de colonnes necessaires
    $nb_col=ceil($nb_resultats/$nb_par_colonne); //arrondi entier superieur
    
    //affichage des colonnes
    $deps_content= '<table>';
    
    for($i=0;$i<$nb_par_colonne;$i++){
    	$deps_content.= '<tr>';
    	for($c=0;$c<$nb_col;$c++){
    		$index=$i+($nb_par_colonne*$c);
    		if(isset($array_resultats[$index])){
    			$deps_content.= '<td>'.$array_resultats[$index].'</td>';	
    		}else{
    			$deps_content.='&nbsp'; //on remplit ce qui reste avec un espace pour avoir le bon nombre de td à chaque ligne
    		}
    	}
    	$deps_content.= '</tr>';
    }
    $deps_content.='</table>';
    
    echo $dep_content;
    
    ?> 
    0
    1. Catalina
       
      toujours à l'écoute car toujours pas de solution lol
      je vais tenter ça ce soir, après le bain de ma princesse, son repas, le repas de mon mari et moi même, le rangement de la cuisine... bref, assez tard lol
      je te tiens informé du résultat,
      merci 1000 fois !!
      0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    comme il pleut j'ai eu un peu de temps pour tester, il y a deux petites erreurs

    a cette ligne:
    $array_resultats[]='<a href="deps.php?parent_id=' . $cat_details['dep_id'] . '">' . $dep_lang[$cat_details['dep_id']] . '</a></td>';
    il y a un </td> en trop

    et la
    echo $dep_content;

    =>
    echo $deps_content;
    
    0