Afficher résultat SQL dans des colonnes

Fermé
Catalina - 25 mai 2010 à 17:56
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 2 juin 2010 à 09:58
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....!!!

A voir également:

8 réponses

wyllos Messages postés 160 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 15 septembre 2011 5
25 mai 2010 à 18:23
tu peux calculer le nombre d'enregistrement et ensuite tu fais

if($nbr<12)
{
echo "<div id="row1"></div>";
}
.....
0
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 160 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 15 septembre 2011 5
25 mai 2010 à 18:40
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
rien à faire.... ça ne marche pas...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 mai 2010 à 18:40
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
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 mai 2010 à 20:58
tu dois avoir un pb avec la syntaxe de ta requette

je ne connais pas cette methode
0
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 mai 2010 à 22:32
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
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 mai 2010 à 22:48
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
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
31 mai 2010 à 13:54
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
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 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
2 juin 2010 à 09:58
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