Crée lien sur lettre alpha d'une requet MYSQL

emancipation
Invité n'ayant pas de compte PHPfrance

13 août 2008, 10:06

Bonjour,

Je suis debutante et je but sur la mise en place du lien sur mes lettres alpha crée à l'aide d'une boucle for. Ce lien doit faire appel à une requet MYSQL avec le fameux %. Ce qui devrait me permettre d'afficher juste les donnée de ma base commencant pas tel ou tel lettre...

ci joint mon code...
pourriez vous m'aider a savoir quesce qui cloche.
Je vous en remerci par avance

 
<?php include("includes/connexion_plus.php"); 
$connexion = mysql_connect($serveur, $utilisateur, $mot_passe); 
$selection_base = mysql_select_db($base_de_donnees, $connexion); 
// Requête générale de la page 
$prepa_requete = 'SELECT * FROM '.$table_francais. ' LIMIT 60 '; 
$requete = mysql_query($prepa_requete); 

// Préselection de la lettre de tri alphabétique 
$lettre_alphabetique = (empty($_GET['lettre'])) ? '' : $_GET['lettre']; 
// 
// Structure conditionnelle pour la requète SQL : $requete 
if (!empty($_GET['lettre'])) 
{ $tri_alphabetique = "WHERE nom LIKE '".$lettre_alphabetique."%'"; } 
else 
{ $tri_alphabetique = ''; } 
// -------------------------------------------------------------------------------------------------------------------------------- 
$sens = empty($_GET['sens']) ? 'ASC' : $_GET['sens']; 
$sens_du_tri = 'ORDER BY '.$colonne.' '.$sens; 


////////////////////////////////////////////////////////////////// 
$nom = empty($_GET['nom']) ? 0 : $_GET['nom']; 
?> 



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Document sans titre</title> 
</head> 

<body> 
<form method="get" action=""> 
<?php $alphabet = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'; 
$lettre = explode(',', $alphabet); 


for ($i = 0 ; $i < 26 ; $i++) 
{ $lien_liste_alpha = ' <a href="'; 
$lien_liste_alpha.= $_SERVER['PHP_SELF']; 
$lien_liste_alpha.= '?lettre='.$lettre[$i]; 
$lien_liste_alpha.= ($_GET['lettre'] == $lettre[$i]) ? '' : '">'; 
$lien_liste_alpha.= strtoupper($lettre[$i]); 
$lien_liste_alpha.= '</a>'; 
echo $lien_liste_alpha; 
}?> 
<table> 
<tr><td> 
<?php 

$nbr_total=mysql_num_rows($requete); 
$compteur=1; 
$compteur_fin=1; 


while($rech_tab=mysql_fetch_array($requete)){ 

if($compteur==16){ 

echo "</td><td>"; 
$compteur=1; 
} 
?> 

<?php echo '<li>' .$rech_tab['nom']. '</li>'; ?><br /> 

<?php 


if($compteur_fin==$nbr_total && $compteur==5){ 
echo "</td></tr>"; 
} 

$compteur++; 
$compteur_fin++; 

} 


?> 

</table> 
</form> 
</body> 
</html>Configuration: Windows XP

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 août 2008, 10:09

pourriez vous m'aider a savoir quesce qui cloche.
Pour en trouver la cause il faudrait déjà connaître précisément le problème.

Invité
Invité n'ayant pas de compte PHPfrance

13 août 2008, 10:15

le probleme viens d'ici précisement.
Je pense que mon code est completement faux quand je demande dans ma boucle d'appeler la requet sur la recherche sql a l'aide la methode GET.
j'ai compris que c'était comme cela que je pouvais le faire mais j'ai pas trop compris la technique.
la dans mon code quand je clic sur les lettres il me fais rien il me laisse ttes les données de la base sans m'afficher uniquement la requet.
Si vous pourriez m'aider j'en peux plus
je décourage

<?php $alphabet = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z';  
$lettre = explode(',', $alphabet);  


for ($i = 0 ; $i < 26 ; $i++)  
{ $lien_liste_alpha = ' <a href="';  
$lien_liste_alpha.= $_SERVER['PHP_SELF'];  
$lien_liste_alpha.= '?lettre='.$lettre[$i];  
$lien_liste_alpha.= ($_GET['lettre'] == $lettre[$i]) ? '' : '">';  
$lien_liste_alpha.= strtoupper($lettre[$i]);  
$lien_liste_alpha.= '</a>';  
echo $lien_liste_alpha;  
}?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 août 2008, 13:55

Bon déjà il y a un problème dans le code qui te génère l'abcédaire : si la lettre selectionné correspond à la lettre parcouru, alors tu zappe la fermeture de la balise lien, du coup le code html généré ne sera pas correct...
$lien_liste_alpha.= ($_GET['lettre'] == $lettre[$i]) ? '' : '">';

Il y a plusieurs solution à cela, tout dépend de ce que tu veux faire, en voici une qui supprime le lien de la lettre courante :
for ($i = 0 ; $i < 26 ; $i++) { 
  $lien_liste_alpha = '';
  if (!empty($_GET['lettre']) && $_GET['lettre'] != $lettre[$i]) // ajoute le lien
    $lien_liste_alpha = ' <a href=" . $_SERVER['PHP_SELF'] . '?lettre='.$lettre[$i] . '">';   
  $lien_liste_alpha.= strtoupper($lettre[$i]);   
  if (!empty($_GET['lettre']) && $_GET['lettre'] != $lettre[$i]) // ajoute la balise de fin
    $lien_liste_alpha.= '</a>';   
  echo $lien_liste_alpha;   
}
Ceci étant, ton problème vient ensuite de la construction de ta requête. En effet, si tu génères bien la variable $tri_alphabetique avec la partie WHERE de ta requête, ceci n'est pas utilisé (et par ailleurs est fait alors que la requête a déjà été exécutée :))

Il faut revoir le séquencement de ton code :
1. Début du SELECT
2. Ajout du WHERE si nécessaire
3. Ajout du ORDER BY
4. Ajout du LIMIT
5. et seulement alors exécution de la requête :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Emancipation
Invité n'ayant pas de compte PHPfrance

14 août 2008, 00:11

merci pour votre reponse tres rapide,
je vais essayer tt ca...

Emancipation
Invité n'ayant pas de compte PHPfrance

15 août 2008, 20:23

Alors, je ne sais pas si c'est le fais que je rentre de vacances mais j'ai l'impression de tout oublier tres vite et je comprend encors moins qu'il y a 3 semaines.
J'ai cependant essayée, ne serais ce que la petite parti du lien sur les lettres sans me preocuper de la requete. Chaques chose en son tps!! déjà que je capiche pas :( et la qd j'execute (bête et manchante sans doute)
<?php $alphabet = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z';
$lettre = explode(',', $alphabet);

for ($i = 0 ; $i < 26 ; $i++) {  
  $lien_liste_alpha = ''; 
  if (!empty($_GET['lettre']) && $_GET['lettre'] != $lettre[$i]) // ajoute le lien 
    $lien_liste_alpha = '<a href="'; 
	$lien_liste_alpha .= $_SERVER['PHP_SELF'] .'?lettre='.$lettre[$i].'">';    
    $lien_liste_alpha .= strtoupper($lettre[$i]);    
  if (!empty($_GET['lettre']) && $_GET['lettre'] != $lettre[$i]) // ajoute la balise de fin 
    $lien_liste_alpha.= '</a>';    
  echo $lien_liste_alpha;    
} 

voila se que ca m'affiche (apercu html)

/colonne.php?lettre=a">A/colonne.php?lettre=b">B/colonne.php?lettre=c">C/colonne.php?lettre=d">D/colonne.php?lettre=e">E/colonne.php?lettre=f">F/colonne.php?lettre=g">G/colonne.php?lettre=h">H/colonne.ph
p?lettre=i">I/colonne.php?lettre=j">J/colonne.php?lettre=k">K/colonne.php?lettre=l">L/colonne.php?lettre=m">M/colonne.php?lettre=n">N/colonne.php?lettre=o">O/colonne.php?lettre=p">P/colonne.php?lettre=q">Q/colonne.php?lettre=r">R/colonne.php?lettre=s">S/colonne.php?lettre=t">T/colonne.php?lettre=u">U/colonne.php?lettre=v">V/colonne.php?lettre=w">W/colonne.php?lettre=x">X/colonne.php?lettre=y">Y/colonne.php?lettre=z">ZMoteur

la base :
Acma Amour Axis Desires Miracle Malis Glamour Malis Avenes Grachs Blabla Gloche Nina Ricci
///////
au lieu de m'afficher les lettre a,c,d,e,...... et me proposée de cliquer dessu pour afficher uniquement les donnée commencant par tel ou tel lettre. la il maffiche surement ce qui devrait se trouver dans la barre de nav a la suite sans chercher a comprendre et a pres il me balance tte la base
J'ai du mal à m'expliquer je crois. Mais est-ce normal, ai-je fais une betise ????

Merci pour votre aide
[/php]