[RESOLU] Alimentation d'un select avec une valeur de la BBD

Eléphant du PHP | 133 Messages

19 mars 2021, 09:50

Bonjour
je fais un formulaire de mise à jour et j'affiche donc les données de ma BDD récupérer par une requête.
Mon problème se situe au niveau du select, je veux que l'on puisse changer la valeur mais la valeur stockée ne s'affiche pas à l'affichage du formulaire,

Code : Tout sélectionner

<option value="<?= $result['Id_Type_Assos'] ?>">
mais s’affiche si je fais F5. J'ai essayé un REFRESH de la page mais ça ne peut pas marcher à cause des includes.

Code : Tout sélectionner

//passage de la variable $_GET pour l'afficher des données à modifier if (isset($_GET['Id_Assos']) && !empty($_GET['Id_Assos'])) { $sql = "SELECT * FROM t_associations INNER JOIN t_type_assos ON t_associations.Id_Type_Assos = t_type_assos.Id_Type_Assos INNER JOIN t_assos_mere ON t_associations.Id_Assos_Mere = t_assos_mere.Id_Assos_Mere WHERE `Id_Assos`=:Id_Assos;"; $query = $db->prepare($sql); $query->bindValue(':Id_Assos', $_GET['Id_Assos'], PDO::PARAM_INT); $query->execute(); $result = $query->fetch(); } ?> <link rel="stylesheet" href="../css/formulaireLarge.css" type="text/css" /> <section> <div class="container-fluid table-responsive"> <h3 class="TitreH1">Modification des informations d'une association</h3> <form enctype="multipart/form-data" method="post"> <div class="form-group row"> <label style="background-color:darkseagreen" for="Id_Type_Assos" class="col-md-3 col-form-label">Modifiez le type d'association:</label> <div class="col-md-3"> <select required name="Id_Type_Assos">; <option value="<?= $result['Id_Type_Assos'] ?>"> </option> <?php // On inclut la connexion à la base try { include("../connect.php"); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } $resultat = $db->query('SELECT Id_Type_Assos, Type_Long FROM t_type_assos where Id_Type_Assos <> 6 ORDER BY Type_Long ASC'); while ($donnees = $resultat->fetch()) { echo '<option value="' . $donnees['Id_Type_Assos'] . '">' . $donnees['Type_Long'] . '</option>'; }; $resultat->execute(); $resultat->closeCursor(); require_once('../close.php'); ?> </select> </div>

Avatar du membre
Mammouth du PHP | 1564 Messages

19 mars 2021, 11:25

Je pense qu'un bon coup de lecture de la doc ne fera pas de mal: https://developer.mozilla.org/fr/docs/W ... ent/Option

Eléphant du PHP | 133 Messages

19 mars 2021, 15:40

Merci pour l'orientation
J'ai écris ceci, mais par défaut je n'ai rien qui s'affiche.

Code : Tout sélectionner

<div class="col-md-9"> <select name="Id_Assos_Mere">; <option value="1" selected required></option> <?php // On inclut la connexion à la base try { include("../connect.php"); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } $resultat = $db->query('SELECT Id_Assos_Mere, Nom_Long FROM t_assos_mere ORDER BY Nom_Long ASC'); while ($donnees = $resultat->fetch()) { echo '<option value="' . $donnees['Id_Assos_Mere'] . '">' . $donnees['Nom_Long'] . '</option>'; }; $resultat->execute(); $resultat->closeCursor(); require_once('../close.php'); ?> </select> </div>

Eléphant du PHP | 133 Messages

19 mars 2021, 15:44

En fait j'ai trouvé à priori c'est comme cela

Code : Tout sélectionner

<select name="Id_Assos_Mere">; <option value="1" selected required>Néant</option>

Mammouth du PHP | 2703 Messages

19 mars 2021, 15:51

si c'est pour une modification, que l'association avait déjà une sélection pour ce champ, forcer une autre valeur déjà présélectionnée, oblige l'utilisateur à resélectionner la bonne valeur dans la liste avant chaque soumission du formulaire. ce n'est pas ergonomique du tout. il faut sélectionner par défaut la valeur déjà sauvée en base, en mettant le selected dans la bonne option.

Eléphant du PHP | 133 Messages

19 mars 2021, 16:48

En effet, je n'avais pas résolu mon problème pour la modification. C'est bon pour la création et mettre une valeur par défaut mais la modification je ne trouve pas. Et pour ta solution sur mon code PHP, je ne trouve pas
il faut sélectionner par défaut la valeur déjà sauvée en base, en mettant le selected dans la bonne option.
Mon code:

Code : Tout sélectionner

<select name="Id_Assos_Mere">; <option value="<?= $result['Nom_Long'] ?>" selected></option> <?php // On inclut la connexion à la base try { include("../connect.php"); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } $resultat = $db->query('SELECT Id_Assos_Mere, Nom_Long FROM t_assos_mere ORDER BY Nom_Long ASC'); while ($donnees = $resultat->fetch()) { echo '<option value="' . $donnees['Id_Assos_Mere'] . '">' . $donnees['Nom_Long'] . '</option>'; }; $resultat->execute(); $resultat->closeCursor(); require_once('../close.php'); ?> </select>

Avatar du membre
Mammouth du PHP | 1564 Messages

19 mars 2021, 16:49

Le required c'est pour le parent (soit select, non option).

Quand c'est "required", le formulaire ne pourra pas être soumis si le champs n'est pas rempli/sélectionné.

Pour ré afficher les champs d'un formulaire, j'ai partagé des fonctions qui se chargent du travail, sur mon site: https://www.c2script.com/scripts/reaffi ... p-s38.html

Eléphant du PHP | 133 Messages

19 mars 2021, 17:19

Super ton site mais j'avoue que je ne trouve pas la solution

Avatar du membre
Mammouth du PHP | 1564 Messages

20 mars 2021, 01:05

Merci, fais un débug sur tes données, voir ce que contient $resultat, $donnees,etc..

Utilise var_dump ou print_r sur ces variables et assure toi qu'elles contiennent des données.

Affiche les erreurs PHP à l'écran.

Eléphant du PHP | 133 Messages

20 mars 2021, 10:10

merci

Eléphant du PHP | 111 Messages

20 mars 2021, 10:57

pas tout lu pas tout vu et super débutant mais ça je l'ai fait comme ça

    
$query = "SELECT DISTINCT type FROM pieces WHERE type LIKE '".$rech."' ORDER BY type DESC";
    try {
        $pdo_select = $pdo->prepare($query);
        $pdo_select->execute();
        $NbreData = $pdo_select->rowCount();    // nombre d'enregistrements (lignes)
        $rowAll = $pdo_select->fetchAll();      // tout dans le meme tableau
} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); } 
?>
</head>
  <body>
    <form>
        <select id="rech" name="rech" size="1" required onChange="rechercher()">
            <?php 
				for ($i=0;$i<$NbreData;$i++){
                echo '<option id="type" value="'.$rowAll[$i]["type"].'">'.$rowAll[$i]["type"].'</option>';
            }
            ?>
        </select>

Avatar du membre
Mammouth du PHP | 1564 Messages

20 mars 2021, 11:37

Que dit le débug ?

Eléphant du PHP | 133 Messages

22 mars 2021, 10:47

Pour mon select je pense avoir régler mon problème comme cecii pour la mise à jour.
C'est à dire qu'à l’ouverture du formulaire, j'affiche ma valeur existante avec

Code : Tout sélectionner

<?= $result['Type_Long'] ?>
et je peux peux la modifier après avoir mis

Code : Tout sélectionner

value="<?= $result['Id_Type_Assos'] ?>"
code complet du select en mise à jour de valeur.

Code : Tout sélectionner

<select required name="Id_Type_Assos">; <option value="<?= $result['Id_Type_Assos'] ?>"> <?= $result['Type_Long'] ?> </option> <?php // On inclut la connexion à la base try { include("../connect.php"); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } $resultat = $db->query('SELECT Id_Type_Assos, Type_Long FROM t_type_assos where Id_Type_Assos =1 or Id_Type_Assos =5'); while ($donnees = $resultat->fetch()) { echo '<option value="' . $donnees['Id_Type_Assos'] . '">' . $donnees['Type_Long'] . '</option>'; }; $resultat->execute(); $resultat->closeCursor(); require_once('../close.php'); ?> </select>

Eléphant du PHP | 133 Messages

22 mars 2021, 10:48

Merci à tous, je post un autre sujet car j'ai un problème sur un formulaire de mise à jour.