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

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
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
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
Catalina
 
rien à faire.... ça ne marche pas...
0
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
tu dois avoir un pb avec la syntaxe de ta requette

je ne connais pas cette methode
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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