Page 1 sur 2
Afficher le resultat d'une requête dans plusieurs DIV
Posté : 17 déc. 2008, 14:44
par Toons43
Bonjour,
J'ai fait des recherches sur le net mais je n'ai rien trouvé de concluant pour mon problème.
Je souhaite afficher le résultat d'une requête SQL dans plusieurs colonnes (car le résultat est long). Les colonnes seraient des DIV avec un float left. Mais je ne sais pas du tout comment faire.
Merci d'avance pour vos réponses
Posté : 17 déc. 2008, 14:53
par furiouslol
Salut,
Peux tu préciser ta question s'il te plait
Posté : 17 déc. 2008, 14:56
par Toons43
Et bien en fait je fais une requête dans ma BDD ou j'affiche des noms par ordre alphabétique, et je souhaite que l'affichage se fasse dans 3 colonnes (DIV) car le résultat est très long. Comment faire?
Posté : 17 déc. 2008, 15:09
par yaug
A première vu déjà utilise un table.
C'est bien pour cela qu'il est fait
Tu n'as rien codé pour le moment ?
Posté : 17 déc. 2008, 15:19
par Toons43
J'ai codé ma requette mais pour l'affichage je ne sais pas comment faire. Pour l'instant j'ai ça :
<?php
mysql_connect("serveur", "utilisateur", "mdp"); // Connexion à MySQL
mysql_select_db("bdd"); // Sélection de la base
echo
'<h4 class="title">Tous nos noms</h4>',"\n ";
$retour = mysql_query("SELECT DISTINCT SUBSTRING(Nom,1,1) AS N FROM matable ORDER BY Nom") or die(mysql_error());//selection de la première lettre des noms
echo '<div id="liste_nom">',"\n ";
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle
{
echo '<div class="lettre">',$donnees['N'],'</div>',"\n ";
echo '<ul>',"\n ";
$N = $donnees['N'];
$retour2 = mysql_query("SELECT * FROM matable WHERE Nom LIKE '".$N."%' ORDER BY Nom") or die(mysql_error());
while ($donnees = mysql_fetch_array($retour2)) // On fait une boucle
{
echo '<li>',$donees['Nom'],'</li>',"\n ";
}
echo '</ul>',"\n ";
}
echo '</div>',"\n ";
mysql_close(); ?>
Le résultat s'affiche sur une colonne, normal puisque je ne sais pas comment faire pour l'afficher sur plusieurs.
Posté : 17 déc. 2008, 15:32
par yaug
Déjà un premier soucis.
Tu fais une requêtes qui entraine un nombre indéterminé d'autres requêtes via ta boucle while.
Ce genre de chose est à éviter totalement.
Fait plutôt un truc dans le genre
<?php
mysql_connect("serveur", "utilisateur", "mdp"); // Connexion à MySQL
mysql_select_db("bdd"); // Sélection de la base
//On fait la requête
$query = "SELECT
SUBSTRING(Nom,1,1) AS Lettre,
Nom
FROM matable
ORDER BY Lettre, Nom";
$retour = mysql_query($query) or die(mysql_error());//selection de la première lettre des noms
//On construit notre tableau
$string = '<h4 class="title">Tous nos noms</h4>\n';
$string .= '<table id="liste_nom">';
$last_lettre = '';
while ($data = mysql_fetch_assoc($retour)) // On fait une boucle
{
$tmp_str = "";
$current_lettre = $data['Lettre'];
$current_nom = $data['Nom'];
//On entame une nouvelle lettre
if($last_lettre != $current_lettre)
{
$tmp_str .= '<tr><th class="lettre">'.$current_lettre.'</th></tr>';
}
//On affiche la liste des noms liés à cette lettre
$tmp_str .= '<tr><td>'.$current_nom.'</td></tr>';
$string.= $tmp_str;
$last_lettre = $current_lettre;
}
$string .= '</table>';
echo $string;
mysql_close();
?>
Posté : 17 déc. 2008, 15:46
par Toons43
Merci pour ce code, je l'ai mis en place,l'affichage revient au mêm, mais si il est plus propre tant mieux. Maintenant comment afficher la liste de résultat sur plusieurs colonne de même taille?
Posté : 17 déc. 2008, 15:49
par yaug
Que veux tu afficher dans des colonnes différentes au juste?
Lettre A
Nom 1 Nom2 Nom 3
Un truc dans ce genre ?
Posté : 17 déc. 2008, 16:01
par Toons43
Non je veux juste que la liste ne soit pas trop longue. Un truc du style
Code : Tout sélectionner
A D G
Nom1 Nom1 Nom1
Nom2 Nom2 Nom2
Nom3 Nom3 Nom3
B E H
Nom1 Nom1 Nom1
Nom2 Nom2 Nom2
Nom3 Nom3 Nom3
C F I
Nom1 Nom1 Nom1
Nom2 Nom2 Nom2
Nom3 Nom3 Nom3
Voila, je sais pas si c'est possible
Posté : 17 déc. 2008, 18:35
par AB
Tu pourrais peut-être enregistrer le résultat de ta requête dans un tableau et ensuite utiliser les fonctions des tableaux (array_chunk par exemple), ce sera plus facilement manipulable.
Posté : 17 déc. 2008, 18:42
par Toons43
Heu, je suis débutant en php et la je vois pas du tout ce que je dois faire. Si tu peux me preciser un peu ta réponse
Au passage j'ai trouvé ça sur le forum mais comment l'adapter à mon cas ?
http://www.phpfrance.com/forums/voir_reponse-272580.php
Merci.
Posté : 17 déc. 2008, 18:52
par AB
M'oui j'ai répondu en ne regardant que ton dernier post, donc oublies array_chunk qui n'est peut-être pas adapté quoique...
Je regarde plus en détail et te répondrai plus tard si j'ai le temps mais pas certain.
Sinon le lien que tu as trouvé est peut-être une bonne piste.
Posté : 17 déc. 2008, 19:20
par Toons43
Merci de te pancher sur mon problème.

Posté : 18 déc. 2008, 03:08
par AB
J'ai regardé un peu mais finalement je ne vois pas ce que tu veux.
Si tu classe les noms en fonction de leur première lettre toutes tes colonnes ne pourront pas être d'une hauteur identique ? Ou alors il te faudra plusieurs colonnes avec la même lettre ...
Plutôt qu'un exemple abstrait pourrais-tu donner un exemple réel de ce que tu veux comme affichage en fonction d'un jeu d'enregistrement concret ?
Posté : 18 déc. 2008, 11:26
par Toons43
Bonjour,
Tout d'abord merci d'avoir refléchi à mon problème. De mon côté j'ai trouvé un site qui fait exactement ce que je voudrais, c'est 1001reductions.com, qui proposent des codes de réductions. Sur sa page tous les marchands, il liste des marchands par ordre alphabétique exactement comme j'aimerai faire avec des divs. Comment fait-il?
Enfin voila c'est exactement ce que je souhaite faire, si quelqu'un a une idée