隐藏的输入使foreach循环/ PHP的值错误(最后一个)

时间:2019-03-14 10:08:04

标签: php

我看到有人问过这个问题,但是尽管要花很多时间,但还是无法解决我的问题。我有一个表单,它通过foreach循环从数据库中加载值:

<div class="form-group">
    <label for="lstFiches" accesskey="n">Selectionner la fiche de frais : </label>
    <select id="lstFiches" name="lstFiches" class="form-control">
        <?php
        foreach ($lesFiches as $key => $uneFiche) {
            $idVisiteur = $uneFiche['idVisiteur'];
            $nom = htmlspecialchars($uneFiche['nom']);
            $prenom = htmlspecialchars($uneFiche['prenom']);
            $etatFiche = htmlspecialchars($uneFiche['idEtat']);
            $moisFiche = $uneFiche['mois'];
            $numAnnee = substr($moisFiche, 0, 4);
            $numMois = substr($moisFiche, 4, 2);
            $montantValide = ($uneFiche['montantValide']);
            $dateModif = ($uneFiche['dateModif']);
            ?> 
        <option selected value="<?php echo $selectedKey = $key ?>">
                <?php echo $prenom . ' ' . $nom . ' ' . ':' . ' ' . $numMois . '/' . $numAnnee . ' (' . $etatFiche . ')' ?> </option>
            <?php
        }
        ?>  
    </select>
    <input type="hidden" name="lstFichesKey" value="<?php echo $selectedKey; ?>" > 
</div>
        <div class="form-group">

我担心的是,即使selected提供了正确的值(这里我尝试使用键作为索引,但我可能是数组中的另一个值,例如$ moisFiche),隐藏的输入始终会返回列表中最后加载的值

我试图更改输入隐藏格式,例如:

    <input type="hidden" name="lstFichesKey[]" value="<?php echo $selectedKey; ?>" >
 </div>

但是它没有改变,所以我想我必须做另一件事才能获得正确的值。但说实话,我对此很执迷(我是初学者)。你能帮我吗

非常感谢

编辑:

我需要稍后重用我的值,当我进行第二次POST时,它们会丢失。因此,我基本上只是想保存它们,以便以后重用它们。我以为我需要隐藏字段

2 个答案:

答案 0 :(得分:0)

您必须了解,在服务器将HTML输出发送到浏览器之前,所有PHP代码均已处理。在这里,您要求PHP在HTML的某个位置生成<option>标签,并在这些标签内循环,在设置它们的值的同时,将$key的值分配给变量$selectedKey。该变量是在循环的第一次迭代期间创建的,并且在每次迭代之后都会更新。

但是随后您要求PHP在循环之后的隐藏输入的$selectedKey属性内打印value的值。 $selectedKey始终是$key中最后一个$lesFiches的值。

首先,由于您的<select>位于表单内,因此您不需要将所选键的值存储在隐藏的输入中。然后,如果您真的想这样做,就必须使用客户端脚本(也称为Javascript),因为一旦完成加载,PHP就不再意识到用户的交互。

也许如果您解释了您想要实现的目标,社区可以为您提供帮助。

答案 1 :(得分:0)

如果有任何其他新手想将下拉值放入隐藏值中(尽管据我所知这可能不是必需的),则我使用@Ki Jey推荐的Javascript;

这是我的工作方式,正在工作:

<select id="lstFiches" name="lstFiches" class="form-control" onchange="getSelectValue();">
                <?php
                foreach ($lesFiches as $uneFiche) {
                    $idVisiteur = $uneFiche['idVisiteur'];
                    $nom = htmlspecialchars($uneFiche['nom']);
                    $prenom = htmlspecialchars($uneFiche['prenom']);
                    $etatFiche = htmlspecialchars($uneFiche['idEtat']);
                    $moisFiche = $uneFiche['mois'];
                    $numAnnee = substr($moisFiche, 0, 4);
                    $numMois = substr($moisFiche, 4, 2);
                    $montantValide = ($uneFiche['montantValide']);
                    $dateModif = ($uneFiche['dateModif']);
                    ?>
                    <option selected value="<?php echo $idVisiteur . "," . $moisFiche . "," . $nom . "," . $prenom . "," . $etatFiche ?>">
                        <?php echo $prenom . ' ' . $nom . ' ' . ':' . ' ' . $numMois . '/' . $numAnnee . ' (' . $etatFiche . ')' ?> </option>
                    <?php
                }
                ?>  
            </select>
            <script>
                function getSelectValue()
                {
                    var selectedValue = document.getElementById("lstFiches").value;
                    console.log(selectedValue);
                    $('#hiddenInput').val(selectedValue);
                }
            </script>
            <div class="form-group">
                <input type ="hidden" name="hiddenInput" id="hiddenInput" />
                <button class="btn btn-default" type="submit">Valider</button></div>
        </div>

您必须引用脚本(如果将脚本放入main.js之类的文件中,则需要另外一行):

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

感谢您将我带入正轨!