Afficher le resultat d'une requête dans plusieurs DIV

Eléphant du PHP | 70 Messages

17 déc. 2008, 14:44

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

Eléphant du PHP | 254 Messages

17 déc. 2008, 14:53

Salut,

Peux tu préciser ta question s'il te plait

Eléphant du PHP | 70 Messages

17 déc. 2008, 14:56

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?

Eléphant du PHP | 353 Messages

17 déc. 2008, 15:09

A première vu déjà utilise un table.
C'est bien pour cela qu'il est fait :D

Tu n'as rien codé pour le moment ?

Eléphant du PHP | 70 Messages

17 déc. 2008, 15:19

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.

Eléphant du PHP | 353 Messages

17 déc. 2008, 15:32

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(); 
?> 

Eléphant du PHP | 70 Messages

17 déc. 2008, 15:46

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?

Eléphant du PHP | 353 Messages

17 déc. 2008, 15:49

Que veux tu afficher dans des colonnes différentes au juste?

Lettre A
Nom 1 Nom2 Nom 3

Un truc dans ce genre ?

Eléphant du PHP | 70 Messages

17 déc. 2008, 16:01

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

ViPHP
AB
ViPHP | 5818 Messages

17 déc. 2008, 18:35

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.

Eléphant du PHP | 70 Messages

17 déc. 2008, 18:42

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.

ViPHP
AB
ViPHP | 5818 Messages

17 déc. 2008, 18:52

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.
Modifié en dernier par AB le 18 déc. 2008, 02:58, modifié 1 fois.

Eléphant du PHP | 70 Messages

17 déc. 2008, 19:20

Merci de te pancher sur mon problème. :D

ViPHP
AB
ViPHP | 5818 Messages

18 déc. 2008, 03:08

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 ?

Eléphant du PHP | 70 Messages

18 déc. 2008, 11:26

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