Afficher résultat SQL dans des colonnes
Catalina
-
Alain_42 Messages postés 5413 Statut Membre -
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....!!!
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:
- Afficher résultat SQL dans des colonnes
- Comment faire des colonnes sur word - Guide
- Resultat foot - Télécharger - Vie quotidienne
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Afficher calendrier outlook dans google agenda - Guide
8 réponses
tu peux calculer le nombre d'enregistrement et ensuite tu fais
if($nbr<12)
{
echo "<div id="row1"></div>";
}
.....
if($nbr<12)
{
echo "<div id="row1"></div>";
}
.....
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>;
}
..........
}
$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>;
}
..........
}
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>';
}
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
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
tu dois avoir un pb avec la syntaxe de ta requette
je ne connais pas cette methode
je ne connais pas cette methode
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à ?
<?
$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à ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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:
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;
?>
il faut modifier ça:$width=100/$num;
par
et $deps_content.='<div id="colonnes" style="width:'.$width.'; float:left;">';
par:
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;">';
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
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
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.=' '; //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;
?>
Et je ne sais pas où placer ton code :(
Après la requête ?
Juste avant l'affichage de <?=$dep_box_content;?> ?
Merci à toi :)