Poster input=hidden dans dropdown avec boucle
RésoluGoo -
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
- Poster input=hidden dans dropdown avec boucle
- Winmend folder hidden - Télécharger - Confidentialité
- Comment poster une vidéo sur tiktok - Guide
- Input signal not found ✓ - Forum Matériel & Système
- Mon pc s'allume et s'éteint en boucle - Forum Matériel & Système
- Input not supported - Forum Ecran
4 réponses
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
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);
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);
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]; ?>