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

PHP & Base de données Discussion :

Où positionner un champ caché dans menu déroulant avec boucle


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut Où positionner un champ caché dans menu déroulant avec boucle
    Cher forum,

    Je galère à positionner correctement un input type="hidden" dans le menu déroulant lié à ma base de données.

    Ce champs est censé me renvoyer l'identifiant de l'item sélectionné dans le menu déroulant. La valeur de l'option comprend déjà une donnée nécessaire pour la suite => pas possible d'y placer l'identifiant.
    Si je place la ligne de l'input dans la boucle, ça ne fonctionne pas et en plus les items du menu se trouve en-dehors du menu :
    Nom : 2022-09-21 09 47 25.jpg
Affichages : 226
Taille : 72,1 Ko


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
    $_SERVER = "https://blabla.fr/index.php"; 
     
    if(!isset($_POST['id_form']))
    {
        $id_form = $_POST[$id_form];
    }
     
    if(!isset($_POST['select_form']))
    {
        $id_form = $_POST['id'];
     
        { header("Location: ".$_POST['select_form'].""); }
    } else {
        { header($_SERVER); }
    }
    $form_import_listing = "SELECT * FROM " . TABLE_FORM_I . "";
    $fi_listing = mysqli_query($con, $form_import_listing);
     
    $form_import_selected = "SELECT * FROM " . TABLE_FORM_I . " WHERE id = " . $id_form . "";
    $fi_selected = mysqli_query($con, $form_import_selected);  
    ?>
     
    <body>
    <div id="wrap">
        <div class="container">
        <?php echo "select_form" . $_POST['select_form'] . "/ id_form : " . $_POST['id_form'];?>
            <div class="row">
                <div class="dropdown">
                    <button class="btn btn-warning dropdown-toggle" type="button" data-toggle="dropdown">
                    <span class="caret"></span></button>
                    <form action="" method="post">
                        <select id="dropdown" name="select_form" onchange="this.form.submit()">
     
                        <?php
                        if ($_POST['id_form'] == $row['id'])
                        {
                        ?>
                            <option value="<?php echo $fi_selected['ref'];?>" selected="selected"><?php echo $fi_selected['name']; ?></option>
                        <?php
                        }
                        else 
                        {
                             echo "<option value=''>Sélectionner</option>";                            
                        } 
                        while ($row = mysqli_fetch_array($fi_listing))
                        {
                        ?>
                            <option value="<?php echo $_SERVER . "#" . $row['ref'];?>"><?php echo $row['name']; ?></option>
                            <input type="hidden" name="id_form" value="<?php echo $row['id'];?>" />
                        <?php
                        }
                        ?>
                        </select>
                        <noscript><input type="submit" value="Go" /></noscript>
                    </form>
                </div>
            </div>
    J'ai lu que l'input pouvait être écrit comme de cette manière, mais je ne sais pas comment l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="id[]" value="" />
    Vous auriez une idée pour passer ce hidden ?

    Merci !!

    69gOO

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    si vous avez besoin de plusieurs informations de l'élément choisi dans "TABLE_FORM_I" (que contient cette table ?) il vaut mieux mettre les identifiants dans les valeurs du menu déroulant.
    ensuite dans la page suivante, vous ferez une requête mysql avec cet identifiant pour retrouver la référence, le libellé, etc.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut
    Voici la table :
    Nom : 2022-09-21 11 11 47.jpg
Affichages : 206
Taille : 37,0 Ko

    La page suivante est en fait la même page :
    - on est sur index.php
    - le formulaire du menu déroulant sert à sélectionner le type de fichier que l'on va importer
    - le formulaire s'exécute automatiquement dès la sélection d'un item
    - il renvoie sur index.php#VEP (VEP ou REP, VEW... selon la sélection; cf. BDD) -> d'où l'impossibilité de mettre l'id dans l'option du select.
    - la variable "VEP" alimente la page functions.php pour réaliser un import de données ainsi que l'affichage de ces données, ainsi que la page export.php qui sert à ... exporter des données (entre l'import et l'export, un script construit des écritures comptables qui seront ensuite importé dans un autre logiciel de comptabilité).

    Peut-être que je partirais sur une autre solution. Mais avant j'aimerais comprendre pourquoi <input type=hidden ne passe pas dans un dropdown.
    J'ai lu pas mal de tuto et parcouru beaucoup de forum à ce sujet, mais je n'ai rien trouvé d'équivalent.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    la balise html "select" n'est pas prévue pour avoir des champs "input".
    donc par exemple si je teste ce code dans firefox

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select>
    	<option>valeur 1</option>
    	<input type="hidden"/>
    	<option>valeur 2</option>
    	<input type="hidden"/>
    </select>

    le navigateur corrige et affiche le code suivant :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select>
    	<option>valeur 1</option>
    </select>
    	<input type="hidden"/>
    	<option>valeur 2</option>
    	<input type="hidden"/>

    vous pouvez voir ces corrections avec les outils de développement de votre navigateur.


    en ce qui concerne l'identifiant dans le menu déroulant, le fait de tout mettre dans le même fichier ne change rien au déroulement des requêtes http.
    par contre cela à l'air de vous bloquer au niveau du codage, vous mélangez beaucoup de chose dans le même fichier et au final ce n'est plus très clair pour vous.

    je vous conseille de beaucoup plus découper votre code et vous verrez que ça sera plus clair. vous pouvez par exemple faire cela (chaque morceau pourra aller dans un fichier différent)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // fichier des fonctions qui récupèrent les données de form_i
     
    function tous_form_i()
    {
    	// requête sql qui retourne tous les enregistrement de la table
     
    }
     
    function un_form_i($identifiant)
    {
    	// requête sql qui retourne les données d'un enregistrement de la table
     
    }

    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
    // fichier d'affichage du formulaire
     
    $tous_form_i = tous_form_i();
     
    ?>
    <select name="id_form_i">
     
    	<?php foreach ($tous_form_i as $form_i) {?>
    		<option value="<?php echo htmlspecialchars($form_i["id"]);?>">
    			<?php echo htmlspecialchars($form_i["name"]);?>
    		</option>
    	<?php }?>
     
    </select>


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // fichier de traitement du formulaire
     
    $form_i = un_form_i($_POST["id_form_i"]);
     
    // construction de l'url en fonction du choix du menu déroulant
    $url = "affichage.php#$form_i[ref]";
     
    // redirection
    header("Location: $url");
    exit();

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut
    Merci pour vos retours dont je me suis inspiré.
    Au bout du compte, vu que "la balise html "select" n'est pas prévue pour avoir des champs "input".", l'identifiant a été mis dans l'option, puis il passe dans une variable de session, afin de pouvoir l'utiliser de partout (c'est un script d'import/export de données provenant de multiples formulaires de formats différents).

    En gros, voici le code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    if(isset($_POST["dropdown"]))
    {
        $_SESSION["fis_id"] = $_POST["dropdown"];
     
        $query = "SELECT * FROM 0_form_import WHERE id = " . $_POST["dropdown"] . " AND type = 'ecr'";
        $fis = mysqli_query($mysqli, $query);  
        $fi = mysqli_fetch_array($fis, MYSQLI_BOTH);
     
        $_SESSION["fis_name"] = $fi["name"];
        $_SESSION["fis_ref"] = $fi["ref"];
     
        // Définir la variable de la table à modifier
        $_SESSION["table"] = constant("TABLE_" . $_SESSION["fis_ref"]);
     
        header("Location: index.php#" . $_SESSION["fis_ref"] ."");
    }
     
    ...
     
    <fieldset>
        <form class="form-horizontal" action="index.php" method="post">
            <div class="form-group">
                <div class="col-md-1">
                    <select name="dropdown" onchange="this.form.submit();">
                    <?php 
                    foreach ($form_array as $form_ar)
                    {
                        if(isset($_SESSION["fis_id"]) && $_SESSION["fis_id"] == $form_ar["id"]){$selected = 'selected="selected"';} else { $selected='';}
                    ?>
                        <option value="<?php echo $form_ar["id"]; ?>" <?php echo $selected; ?>><?php echo utf8_encode($form_ar["name"]) . " (" . $form_ar["ref"] . ")";?></option>
                    <?php
                    }
                    ?>
                    </select>
                    <noscript>
                        <input type="submit" value="submit">
                    </noscript>
                </div>
            </div>
        </form>
    </fieldset>
    Merci à vous !
    Sujet résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage d'un champ caché selon choix dans menu déroulant
    Par hyper123 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 15/02/2013, 15h48
  2. [SP-2010] Griser un champ selon le menu déroulant dans un formulaire
    Par sebfreu dans le forum SharePoint
    Réponses: 3
    Dernier message: 24/01/2012, 11h34
  3. Champ caché dans liste déroulante
    Par Dobyan08 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/08/2006, 18h18
  4. Libelle dans menu déroulant
    Par S-kAyN dans le forum Access
    Réponses: 15
    Dernier message: 26/07/2006, 11h40

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