Cher forum,

Le code en foreach() est faux et c'est pour cela que je vous écris.
Il y a certainement d'autres manières d'écrire ce bout de code, mais j'aimerais aller jusqu'au bout de ma bêtise.
J'aurais besoin de poster la variable d'un input type=hidden dans ma liste déroulante, mais je ne sais pas comment m'y prendre.
Je sais que je pourrais m'y prendre différemment en mettant

<option value="<?php echo $form_ar["id"]; ?>"><?php echo $form_ar["name"];?></option>

plutôt que

<option value="<?php echo $form_ar["ref"]; ?>"><?php echo $form_ar["name"];?></option>

Mais avant ça, mon foreach() est incorrect; j'ai le message d'erreur suivant "Undefined index : name"

Voici le code complet

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "root", "", "test");

$query = "SELECT * FROM 0_form_import";
$result = mysqli_query($mysqli, $query);

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


Merci pour votre aide !

Umable
Bonjour,

La clé "name" n'existe pas dans ton tableau puisque tu as enregistré la donnée avec la clé "text", il faut donc utiliser $form_ar["text"].
Pitet a écrit :
Bonjour,

La clé "name" n'existe pas dans ton tableau puisque tu as enregistré la donnée avec la clé "text", il faut donc utiliser $form_ar["text"].


Merci beaucoup, correction faite et ça tourne PRESQUE rond maintenant !

Quand je récupère les variables sur la page testsuite.php, seule "ref" est bien récupérée; "id" reste toujours à la même valeur : 4.
Est-ce à cause du foreach imbriqué que je n'arrive pas à récupérer l'id du array() ?

Un immense merci pour votre aide !!!
Modifié par Umable (23 Sep 2022 - 14:10)
Salut,

a priori l'imbrication des boucles for est bizarre (d'un point de vue algo) mais je ne sais pas si c'est lié ton problème
Je ne sais pas exactement comment cela fonctionne dans cas la, il se pourrait que cela écrase la valeur de la boucle parent et que cela termine la boucle prématurément (et du coup tu devrais obtenir la première valeur du tableau)

En supposant que cela n'écrase pas la valeur et que cela fait bien la boucle, tu as quand même un problème dans ce que tu génères.

A priori, en supposant qu'il y a 4 éléments dans ton tableau, ce code la :
<input type="hidden" name="hidden" value="<?php echo $form_ar["id"]; ?>">

devrait générer ces 4 lignes la :

<input type="hidden" name="hidden" value="1">
<input type="hidden" name="hidden" value="2">
<input type="hidden" name="hidden" value="2">
<input type="hidden" name="hidden" value="2">


Et vu que c'est 4 fois le même name, ça doit faire une collision dans ton get ou post et tu ne récupères qu'une seule valeur.

Tu dois pouvoir inclure l'id dans le name pour qu'il change à chaque tour de boucle en faisant un truc du genre :
<input type="hidden" name="hidden<?php echo $form_ar["id"]; ?>"" value="<?php echo $form_ar["id"]; ?>">
Mathieuu a écrit :
Salut,
Tu dois pouvoir inclure l'id dans le name pour qu'il change à chaque tour de boucle en faisant un truc du genre :
&lt;input type="hidden" name="hidden&lt;?php echo $form_ar["id"]; ?&gt;"" value="&lt;?php echo $form_ar["id"]; ?&gt;"&gt;


Salut Mathieuu,
Merci pour ta proposition que j'ai appliqué et qui fonctionne.
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];
?>


Sujet résolu !
Modifié par Umable (25 Sep 2022 - 12:56)