8768 sujets

Développement web côté serveur, CMS

Bonsoir,

Je reviens vers vous pour un autre souci.

J'ai bien essayé de chercher la solution par moi-même, mais je n'y arrive pas tout seul.

Je souhaite afficher des données provenant d'une base, mais uniquement les données correspondantes à un champ.
Je m'explique. J'ai une BDD clients comme suit :
upload/1642352989-84072-bddclt.png

Je souhaite afficher les noms et prénoms des clients. Lorsque je fais :

 <div class="col-lg-6 mb-4 form-group">
                    <label class="d-inline pl-4" for="nomclient">Je participe au voyage de</label>
                    <select class="form-control" id="nomclient" name="nomclient">
                        <?php
                        foreach ($bdd->query('SELECT * FROM client') as $row) {
                            echo '<option value="' . $row['nomclient'] . '">' . $row['prenomclient'] . ' ' . $row['nomclient'] . ' </option>';
                        }
                        ?>
                    </select>
                </div>

J'affiche tous les prenoms et noms des clients, mais ce que je souhaite c'est de n'afficher que les prénoms et noms des clients dont le code agence est GEO5100 par exemple.
Je pensais faire ça :

 <div class="col-lg-6 mb-4 form-group">
                    <label class="d-inline pl-4" for="nomclient">Je participe au voyage de</label>
                    <select class="form-control" id="nomclient" name="nomclient">

                        <?php
                        if (!empty($_POST['nomclient'])) {
                            $codeagence = ($_POST['codeagence']);
                            $nomagence  = ($_POST['nomagence']);
                        }
                        foreach ($bdd->query('SELECT * FROM client WHERE codeagence = ?') as $row) {
                            echo '<option value="' . $row['nomclient'] . '">' . $row['prenomclient'] . ' ' . $row['nomclient'] . ' </option>';
                        }
                        ?>
                    </select>
                </div>


Mais visiblement ce n'est pas la solution, car il ne m'affiche rien !

Est-ce que quelqu'un peut m'aider SVPL ?

P.S. : Je viens de tester la requête SQL suivante dans MySQL ça fonctionne :

SELECT * FROM client WHERE codeagence = 'GEO51100';

J'ai uniquement les prénoms et noms de l'agence GEO51100 qui s'affichent. Mais comment ajouter cette condition dans mon foreach ?
Modifié par Loutschi (16 Jan 2022 - 18:52)
Modérateur
Bonjour,

Tu ne dois faire qu'un seul SELECT à l'extérieur du foreach. La réponse que te renvoie la base est en fait une sorte de liste contenant toutes les lignes de la table respectant les conditions que tu mets après WHERE dans le SELECT.

Exemple court :

$codeagence = $_POST['codeagence'];
$r = $bdd->prepare('SELECT * FROM client WHERE codeagence = ?');
$r->execute(array($codeagence));
// À ce stade, $r contient toutes les lignes de la table "client" qui ont comme codeagence celui qui se trouve dans $_POST['codeagence']
// on met ces lignes dans un tableau php, il y a d'autres manières de faire
$liste = $r->fetchAll(); 
// on commence l'affichage du "select"
echo '<select name="nomclient">';
// pour chaque élément du tableau, on affiche une balise "option"
foreach($liste as $a)
  echo '<option value="'.$a["nomclient"].'">'.$a["nomclient"].'</option>';
// on finit l'affichage du "select"
echo '</select>';

Amicalement,
Modifié par parsimonhi (16 Jan 2022 - 20:05)
Meilleure solution
Super fabuleux !! Mille mercis

Très franchement je n'y serais jamais arrivé sans ton aide. Smiley merci

En fait, je dois m'habituer à décortiquer mon code par petits bouts qui s'enchaînent au lieu de tout vouloir mettre sur une requête.

Encore merci, très belle soirée ++ Smiley good