Bonsoir, je me demandais comment créer une liste déroulante à partir de ma base de données... Donc j'ai par exemple catégorie Benjamins et puis des sous classes qui font partie de benjamin, vous comprendrez peut-etre mieux avec une image...
Je ne sais pas vraiment comment commencé, quelqu'un aurait une idée?
Merci d'avance!

image:

8 réponses


pege
Auteur
Réponse acceptée

J'ai trouvé la solution les potos, voici le bon code:

$query = "SELECT id, categorie, equipe FROM equipes ORDER BY categorie, equipe";

$categ = "";

echo "<select>";

foreach($pdo->query($query) as $row) {
    if ($categ != $row['categorie']) {
        // rupture de categorie
        if ($categ !== "") {  // s'il y avait un groupe ouvert, on le ferme
            echo "</optgroup>";
        }
        echo "<optgroup label='" . $row['categorie'] . "'>";
        $categ = $row['categorie'];
    }
    echo "<option value='" . $row['id'] . "'>" . $row['equipe'] . "</option>";
}
echo "</optgroup>";
echo "</select>";

Comment est organisé ta base de données ?
Je pense que ça pourrait nous donner une indication pour t'aider ^^

pege
Auteur

A partir de l'image elle ressemble a ceci:

id | catégorie | équipe

1 | HOMMES : U18| HU18A

2 | HOMMES : U18| HU18B

3 | HOMMES : U16| HU16A

4 | HOMMES : U16| HU16B

5 | HOMMES : U16| HU16C

6 | HOMMES : U16| HU16D

...

Ca t'aide?

Bonjour Blackandyellow,
Tu devrais pouvoir t'en tirer en triant tes équipes par catégorie puis en gérant les ruptures de catégorie.
Pour les groupes, il y a la balise optgroup qui fait ça (voir ici)

$query = "SELECT id, categorie, equipe FROM equipes ORDER BY categorie, equipe";

$categ = "";

echo "<select>";

foreach($pdo->query($query) as $row) {
    if ($categ != $row['categorie']) {
        // rupture de categorie
        if ($categ !== "") {  // s'il y avait un groupe ouvert, on le ferme
            echo "</optgroup>";
        }
        echo "<optgroup label='" . $row['categorie'] . "'>"
        $categ = $row['categorie'];
    }
    echo "<option value='" . $row['id'] . "'>" . $row['equipe'] . "</option>";
}
echo "</optgroup>";
echo "</select>";
pege
Auteur

Merci bcp pour ce que tu as déjà fait mais j'ai juste un petit problème...
La liste n'affiche que ca:

Et dans ma base de données il y a ca:

id | catégorie | équipe

1 | cadets| Julien

2 | cadets| Bastien

3 | minimes| Sylvain

Je ne vois pas d'ou le problème pourrait venir

Peux-tu nous montrer le html généré de la liste déroulante ?

pege
Auteur

Biensur, voila:

<select>
    <optgroup label="Cadets">
        <option value="3>Adrien</option>
        <option value=" 5="">Benjamins</option>
        <option value="1>Gaëtan</option>
        <option value=" 4="">Gaëtan</option>
    </optgroup>
</select>

Il manque la quote fermante après value (j'ai édité mon code)
Pour les groupes manquant, la rupture n'est pas détectée
as-tu recopié mon code tel quel ?