Poster input=hidden dans dropdown avec boucle

Résolu/Fermé
Goo - 20 sept. 2022 à 15:48
 Goo - 25 sept. 2022 à 13:00

Cher forum,

Je galère à poster correctement ma variable dans un champ caché d'un formulaire de menu déroulant lié à ma base de données.

Si je place la ligne de l'input dans la boucle, ça ne fonctionne pas (et le menu déroulant est en plus tout cabossé : seul un item est présent dans le menu).

    <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>

Où faut-il positionner l'hidden ?

Merci pour votre aide !


Windows / Opera 90.0.4480.84

A voir également:

4 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
20 sept. 2022 à 16:49

Bonjour,

pourquoi tu ne renseignes pas seulement le value de tes options avec la valeur souhaitée ?

Sinon, il te faudra passer par du JS


0

Bonjour Jordane,

Pour répondre à ta question, c'est parce que la valeur de l'option contient de quoi alimenter l'URL; j'ai construit le code de cette manière, mais n'ayant pas la logique de programmation, c'est peut-etre alambiqué. Voici le code en début de script :

<?php
$_SERVER = "https:///index.php"; 

if(!isset($_POST['select_form'])) {
    $id_form = $_POST['id_form'];

    { 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 = " . $form_import . "";
$fi_selected = mysqli_query($con, $form_import_selected);  
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
20 sept. 2022 à 18:29

Tu ne sembles pas utiliser ta variable 

  $id_form  puisque tu rediriges vers une autre page...
0
69goo Messages postés 2 Date d'inscription samedi 9 avril 2022 Statut Membre Dernière intervention 15 novembre 2022
Modifié le 20 sept. 2022 à 19:16

La page reste la même.

On passe juste de http://www.blabla.com/index.php à http://www.blabla.com/index.php#xxx  par exemple ("xxx" dépendant de l'item sélectionné dans le menu déroulant.

Vu ta remarque, le problème viendrait de

$_SERVER

?

Et je viens de voir une erreur dans une requête

$form_import_selected = "SELECT * FROM " . TABLE_FORM_I . " WHERE id = " . $id_form . "";
$fi_selected = mysqli_query($con, $form_import_selected);  

et non

$form_import_selected = "SELECT * FROM " . TABLE_FORM_I . " WHERE id = " . $form_import . "";
$fi_selected = mysqli_query($con, $form_import_selected);  
0

Pour résoudre le problème, je suis parti sur la proposition précédente de Jordane.

J'ai placé l'identifiant et la référence en valeur des options, qu'ensuite je décortique dans une autre page grâce à la fonction explode.

Voici le code:
test.php

<?php
$form_array = array(array('id' => '-', 'params' => '<a class="dropdown-item">', 'name' => "Sélectionner", 'ref' => '', 'params' => '</a>'));
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH))
{
    $form_array[] = array('id' => $row["id"],
                          'params' => '<a class="dropdown-item">',
                          'name' => $row["name"],
                          'ref' => $row["ref"],
                          'params' => '</a>'
                           );
}
?>
<body>
<form action="test.php" method="post">
    <select name="dropdown" onchange="this.form.submit();">
    <?php
    foreach ($form_array as $form_ar)
    {
    ?>
        <option value="<?php echo $form_ar["id"] . "_" . $form_ar["ref"]; ?>"><?php echo $form_ar["name"];?></option>
    <?php
    }
    ?>
    </select>
    <noscript>
        <input type="submit" value="submit">
    </noscript>
</form>
</body>

functions.php

<?php
if(isset($_POST['dropdown']))
{
    $fi_selected = explode("_",$_POST['dropdown']);
    $fis_id = $fi_selected[0];
    $fis_ref = $fi_selected[1];
?>
0