IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PDO = remplir balise select + recupérer l'option sélectionnée


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut PDO = remplir balise select + recupérer l'option sélectionnée
    Bonjour,

    Avertissement : je débute, mes connaissances en Php sont ... minuscules
    J'ai donc un petit formulaire, qui commence avec une liste déroulante pour choisir la catégorie.
    Les catégories, c'est une table de ma bdd.
    Donc, au chargement de la page, je créé un PDO pour aller me récupérer les libellés de mes catégories, pour que l'utilisateur puisse choisir.
    Jusqu'ici, tout va bien

    Oui mais ... et après ?
    Si je ne fais rien de +, là l'utilisateur peut bien choisir ce qu'il veut, c'est la 1ère catégorie qui est sélectionnée.
    J'ai fouillé le net, j'ai trouvé un truc, mais qui ne fonctionne pas, et je crois que c'est normal.

    Le code concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <select id="categorieNews" name='categorieNews' 
                                                class='form-control' >
                                            <?php
                                            $db = Database::connect();
                                            $reqOptions = $db->query("SELECT * FROM categories_news");
                                            while($donnees = $reqOptions->fetch()) {
                                                echo '<option value="' . $donnees
                                                        ["libelle"] . '"';
                                                if ($_POST['categorieNews']==$donnees["libelle"]) {
                                                    echo " selected='selected'";
                                                }
     
                                                echo '>' . $donnees["libelle"] . '</option>';
     
                                            }
                                            $reqOptions->closeCursor();
                                            Database::disconnect();
     
                                            ?>
                                        </select>
    A l'évidence, je ne peux pas, à la fois et avec le même PDO, gérer le remplissage au 1er chargement de la page, et la récupération de l'option sélectionnée par l'utilisateur.
    Avouez, c'est ballot

    Bref, à part mettre mes catégories "en dur" (c'est tentant) auriez-vous une solution ?

    D'avance merci.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,
    En organisant son code, on est plus clair et cela ce lis plus facilement, ceci donne quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
       $db = Database::connect();
       $reqOptions = $db->query("SELECT libelle FROM categories_news");
       $libelle = $reqOptions->fetchAll(PDO::FETCH_ASSOC);
      ?>
     
     
    <select id="categorieNews" name='categorieNews' class='form-control' >
       <?php foreach($libelle as $value): ?>
       	<?php if(isset($_POST['categorieNews']) && $_POST['categorieNews'] === $value["libelle"]): ?>
       		<option selected value="<?php echo $value['libelle'] ?>" > <?php echo $value['libelle'] ?> <option>
       	<?php continue;  endif; ?>
       	<option value="<?php echo $value['libelle'] ?> "> <?php echo $value['libelle'] ?> <option>
       <?php endif; ?>
    </select>
     
    <?php 
     Database::disconnect();
    ?>

  3. #3
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Bonjour,

    Le code proposé ne fonctionne pas mon IDE me souligne le dernier <?php endif; ?>, et comme je ne comprends pas le code je ne sais pas corriger.

    Bref, finalement j'ai mis mes catégories "en dur". Après réflexion (et discussion), ça ne pose pas de problème particulier.

    Par contre, c'est bête mais je n'ai pas encore réussi à récupérer ce que l'utilisateur sélectionne.

    Du coup le code html ressemble à ça :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <div class='col-md-12'>
                                        <label for='categorieNews'>Catégorie de la nouvelle</label>
     
                                        <select id="categorieNews" name='categorieNews' 
                                                class='form-control'>
     
                                            <option value="infos">infos</option>
                                            <option value="naissance">naissance</option>
                                            <option value="décès">décès</option>
                                            <option value="santé">santé</option>
                                            <option value="mariage">mariage</option>
                                            <option value="événement climatique">événement climatique</option>
                                            <option value="coupure_eau">coupure_eau</option>
                                            <option value="manifestation">manifestation</option>
     
                                        </select>
                                    </div>

    et le php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!empty($_POST)) {
        $categorieNews = checkInput($_POST["categorieNews"]);
    là je pensais qu'il prendrait l'option sélectionnée ... mais non, il me "prend" la 1ère

  4. #4
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Bon finalement le problème n'est pas là, c'est dans la suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $db = Database::connect();
            $reqCategorie = $db->prepare("SELECT id FROM categories_news WHERE libelle=?");
     
            $reqCategorie->execute(array($categorieNews));
     
            $numCategorie = $reqCategorie->fetchAll();
            print_r($numCategorie);
            $numCategorie = intval(array($numCategorie));
            echo $numCategorie;
            $reqCategorie->closeCursor();
    j'ai mis des echo et des print_r pour savoir ce qu'il fabriquait.
    En fait mon $numCategorie c'est un array dans un array. Moi j'ai besoin du 8, comment je le chope celui-là ?
    Array ( [0] => Array ( [id] => 8 [0] => 8 ) )

  5. #5
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    c'est bon.
    Dans les "value" de mes options, j'ai mis les numéros de catégories, tout simplement.
    Comme ça je récupère un nombre en string, que je converti en nombre, et c'est terminé.

    Ou comment se prendre la tête pour pas grand-chose

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    Puisque tu pars de zéro, tu as tout à fait raison de rédiger d'abord le HTML que tu veux obtenir, et de voir ensuite comment passer à des variables (PHP).

    Prenons d'abord la simple problématique de retenir le "selected" dans le "select".
    Nous sommes d'accord que sur ton "select" en dur, tu veux obtenir un "selected" sur l'option que l'utilisateur a choisie.

    Rangeons là d'abord dans une variable intermédiaire tout bête, ça sera plus facile.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(! empty($_POST['categorieNews'])){
      $choix=$_POST['categorieNews'];
      //et je fais le traitement.
    }
    else{
      //je fais la grève.
    }

    C'est là que je dois t'expliquer un truc assez violent la première fois qu'on le voit, et qui s'appelle la condition ternaire.

    Une condition normale dirait :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($choix=='infos'){
      echo 'selected';
    }
    else{
      //ne fais rien du tout.
    }

    Ca, j'espère que tu comprends. En français, si on a ce choix, et qu'il n'est pas vide, hop, on l'exploitera, sinon... ben rien...


    Passons à la même chose en condition dite ternaire, ça donne

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ($choix=='infos'?'selected':NULL);

    Ici, en une seule ligne, on dit exactement la même chose.
    $choix=='infos' étant la condition, ce qui est après le "?" veut dire "alors", et ce qui est après le ":" veut dire "sinon"...

    Tout cela remis en ordre (alternance PHP et HTML) donnera
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    if(! empty($_POST['categorieNews'])){
      $choix=$_POST['categorieNews'];
    ?>
    <div class='col-md-12'>
      <label for='categorieNews'>Catégorie de la nouvelle</label>
     
      <select id="categorieNews" name='categorieNews' class='form-control'>
        <option value="infos" <?php echo ($choix=="infos"?"selected":NULL); ?> >infos</option>
        <option value="naissance" <?php echo ($choix=="naissance"?"selected":NULL); ?> >naissance</option>
        <option value="décès" <?php echo ($choix=="décès"?"selected":NULL); ?> >décès</option>
        <option value="santé" <?php echo ($choix=="santé"?"selected":NULL); ?> >santé</option>
      </select>
    </div>
    <?php
    }
    else{
      //je fais la grève.
    }
    ?>

    Je te laisse déjà étudier ça.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Sorry,

    ce n'est pas endif; mais endforeach;

  8. #8
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Merci infiniment pour ta pédagogie Dendrite

    J'avais déjà aperçu, ici où là, ce type de syntaxe, mais sans forcément la comprendre ... donc en effet je ne risquais pas de même simplement "penser" à l'utiliser.
    Or, du php sur plusieurs lignes au milieu du html, c'est compliqué. A lire, et à comprendre et donc à identifier les coquilles.

    Enfin du coup là je l'ai fait, c'est assez étrange à écrire, mais en fait ... ça marche et en plus, c'est beau

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/10/2018, 09h57
  2. Modifier l'option sélectionnée dans un select
    Par GLSpirit dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/04/2008, 11h42
  3. Récupérer le libellé de l'option d'une balise SELECT
    Par tixmcprods dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/03/2008, 11h04
  4. balise select et option, récupérer la valeur
    Par yaya0057 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/02/2007, 02h05
  5. 2 options sur la même ligne de la balise select
    Par djibril38 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/08/2006, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo