不确定为什么在实践中这不起作用,但我想在提交后重新加载页面,但是有多个<select>
。
每个人都有自己的名字,但我怎么知道$_POST
上哪个被更改了,而没有给每个人选择自己的表格。
以下是当前代码:
<form id="productSelectedForm" action="products.php?filter=true" method="post">
<input type="hidden" name="model" value="<?php echo $item['model']; ?>" />
<ul>
<li>
<label><strong>Select available Grade: </strong>
<select id="gradeSelect" class="propChanged" name="grade" onchange="this.form.submit();">
<?php foreach( $props[ 'grade'] as $g) { ?>
<option value="<?php echo $g; ?>">
<?php echo $g; ?>
</option>
<?php } ?>
</select>
</label>
</li>
<li>
<label><strong>Select available Colour:</strong>
<select id="colourSelect" class="propChanged" name="colour" onchange="this.form.submit();">
<?php foreach( $props[ 'colour'] as $g) { ?>
<option value="<?php echo $g; ?>">
<?php echo $g; ?>
</option>
<?php } ?>
</select>
</label>
</li>
<li>
<label><strong>Select available Storage:</strong>
<select id="storageSelect" class="propChanged" name="storage" onchange="this.form.submit();">
<?php foreach( $props[ 'storage'] as $g) { ?>
<option value="<?php echo $g; ?>">
<?php echo $g; ?>
</option>
<?php } ?>
</select>
</label>
</li>
<li>
<label><strong>Select available Network:</strong>
<select id="networkSelect" class="propChanged" name="network" onchange="this.form.submit();">
<?php foreach( $props[ 'network'] as $g) { ?>
<option value="<?php echo $g; ?>">
<?php echo $g; ?>
</option>
<?php } ?>
</select>
</label>
</li>
</ul>
</form>
有没有办法在不使用Javascript和个人表单的情况下执行此操作,我不知道?
由于
阿迪
答案 0 :(得分:0)
从您给定的PHP中可以看出,您没有为SELECT
元素预先选择某个选项,因此浏览器将默认选择第一个。
然后,当用户提交表单时,您无法区分第一个项目的自愿,有意识的选择,或者用户是否只是更改了另一个SELECT
并且没有对此进行任何操作。
我建议使用第一个为空的选项启动每个SELECT
,并且具有空的VALUE
属性,如下所示:
<option value=""><option>
<?php foreach( $props[ 'grade'] as $g) { ?>
<option value="<?php echo $g; ?>">
<?php echo $g; ?>
</option>
<?php } ?>
然后,当您处理$_POST
数据时,您将知道用户是否明确选择该值是否为空,例如:
if (!empty($_POST['grade'])) {
// a grade was specified by the user.
}
虽然您的代码似乎没有跟踪以前做出的选择,但您可能想要这样做,因此您应该以某种方式存储以前的选择。一旦你能够做到这一点,你就可以通过比较以前的值和当前提交的值来找出改变了什么。
您可以使用会话变量来跟踪用户的选择:
session_start();
// detect change and remember current selections
$changed = array();
foreach (array("grade", "colour", "storage", "network") as $key) {
if (isset($_POST[$key])) {
if (empty($_SESSION[$key]) || $_POST[$key] != $_SESSION[$key]) {
$changed[] = $key;
}
$_SESSION[$key] = $_POST[$key];
} else {
$_SESSION[$key] = "";
}
}
此代码运行后,您将在数组中 $ changed 具有更改值的项目列表(例如 [“storage”] )。通常情况下,不应该一次更改多个值(因为您在更改时立即提交),但谁知道......
然后在您的表单中,您应该确保用户保留选定的先前选定的项目,例如,等级:
<select id="gradeSelect" class="propChanged" name="grade" onchange="this.form.submit();">
<?php foreach( $props[ 'grade'] as $g) { ?>
<option value=""></option>
<option value="<?php echo $g; ?>"
<?php if ($g == $_SESSION["grade"]) echo " selected "; ?>
>
<?php echo $g; ?>
</option>
<?php } ?>
</select>