我看到有人问过这个问题,但是尽管要花很多时间,但还是无法解决我的问题。我有一个表单,它通过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时,它们会丢失。因此,我基本上只是想保存它们,以便以后重用它们。我以为我需要隐藏字段
答案 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>
感谢您将我带入正轨!