Liste de membres triés par ordre alphabétique
Résolu
Angecorse
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
Angecorse Messages postés 37 Date d'inscription Statut Membre Dernière intervention -
Angecorse Messages postés 37 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une liste de membres en BDD dans la table "membres" avec nom, prénom, adresse,...
J'aimerais 2 choses:
1/ Qu'en haut de ma page web s'affiche les lettres de l'alphabet (dans l'ordre alphabétique bien sûr) uniquement si au moins un membre, dont le nom commence par cette lettre, est trouvé dans la BDD.
EX: A - B - C - E - G - I - K - L - N - P...
2/ Que lorsqu'une de ces lettres est cliquée, tous les membres, dont le nom commence par cette lettre, s'affichent dans l'ordre alphabétique
Voici le code que j'ai, à savoir que je travaille avec le framework "foundation":
J'ai une liste de membres en BDD dans la table "membres" avec nom, prénom, adresse,...
J'aimerais 2 choses:
1/ Qu'en haut de ma page web s'affiche les lettres de l'alphabet (dans l'ordre alphabétique bien sûr) uniquement si au moins un membre, dont le nom commence par cette lettre, est trouvé dans la BDD.
EX: A - B - C - E - G - I - K - L - N - P...
2/ Que lorsqu'une de ces lettres est cliquée, tous les membres, dont le nom commence par cette lettre, s'affichent dans l'ordre alphabétique
Voici le code que j'ai, à savoir que je travaille avec le framework "foundation":
<?php
include_once ('includes/dbconnect.php');
$nbmembre = NBMEMBRESDISPLAY;
$membres = $db->query("SELECT id, titre, firstname, lastname, adress, resume FROM membres ORDER BY JE NE SAIS PAS QUOI METTRE ICI LIMIT $nbmembre");
?>
<h3>Derniers membres inscrits</h3>
<ul class="medium-block-grid-2 small-block-grid-1" data-equalizer>
<?php foreach ($membres as $membre): ?>
<li data-equalizer-watch>
<div class="lastMembre">
<a class="block" href="membre.php?id=<?php echo $membre->JE_NE_SAIS_PAS_QUOI_METTRE_ICI; ?> ">
<p>
<span><?php echo $membre->titre & $membre->lastname & $membre->firstname; ?></span>
<br />
<span class="adress"><?php echo $membre->adress; ?></span>
<br />
<?php echo text::limit($membre->resume, NBCARACTERESDISPLAY); ?>
</p>
</a>
</div>
</li>
<?php endforeach; ?>
</ul>
A voir également:
- Liste de membres triés par ordre alphabétique
- Comment trier par ordre alphabétique sur excel - Guide
- Liste déroulante excel - Guide
- Triez ce tableau par ordre alphabétique des prénoms ✓ - Forum Excel
- Classer les applications par ordre alphabétique iphone - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum Excel
1 réponse
Salut,
Quelques pistes de solutions possibles :
1. Tu peux utiliser la requête suivante pour récupérer la première lettre des noms de ta table membres :
Il suffit alors de parcourir les résultats pour générer la liste des lettres, par exemple :
2. Il faut modifier la requête de sélection des membres pour prendre en compte le paramètre 'lettre' si celui-ci existe :
Attention aux injections sql ! Dans l'exemple ci-dessus le paramètre $_GET['lettre'] est concaténé directement dans la requête sql (faille). Tu dois échapper ce paramètre avant la concaténation avec une des méthodes suivantes selon l'API utilisé :
- requête préparée ou PDO::quote() pour l'API PDO
- mysqli_real_escape_string() pour l'API Mysqli
Bon dév
Quelques pistes de solutions possibles :
1. Tu peux utiliser la requête suivante pour récupérer la première lettre des noms de ta table membres :
SELECT DISTINCT LEFT(firstname, 1) AS lettre FROM membres ORDER BY lettre
Il suffit alors de parcourir les résultats pour générer la liste des lettres, par exemple :
<a href="liste-membres.php?lettre=A">A</a> <a href="liste-membres.php?lettre=B">B</a> <a href="liste-membres.php?lettre=C">C</a>
2. Il faut modifier la requête de sélection des membres pour prendre en compte le paramètre 'lettre' si celui-ci existe :
if (!empty($_GET['lettre'])) { $membres = $db->query("SELECT id, titre, firstname, lastname, adress, resume FROM membres WHERE LEFT(firstname, 1) = '" . $_GET['lettre']) . "' ORDER BY firstname LIMIT $nbmembre"); } else { $membres = $db->query("SELECT id, titre, firstname, lastname, adress, resume FROM membres ORDER BY firstname LIMIT $nbmembre"); }
Attention aux injections sql ! Dans l'exemple ci-dessus le paramètre $_GET['lettre'] est concaténé directement dans la requête sql (faille). Tu dois échapper ce paramètre avant la concaténation avec une des méthodes suivantes selon l'API utilisé :
- requête préparée ou PDO::quote() pour l'API PDO
- mysqli_real_escape_string() pour l'API Mysqli
Bon dév
Oui, en règle générale j'encapsule les $_GET ;)
Je vais le mettre en oeuvre et reviens posté la solution si et quand tout sera ok ;)
See ya !