我在页面中有两个表单,一个是过滤器,第二个是项目列表,当我将过滤器应用于项目列表表单时,所选值重置为默认值。对于过滤器,我可以保存选定的值,因为我通过POST方法提交此表单,但其他未提交的内容可以在页面刷新后保存选定的表单值吗?这是一些第二种形式的代码:
<form name="forma" method="post" onMouseOver="kaina();" onSubmit="return tikrinimas()" action="pagrindinis.php?page=generuoti.php">
<table width="540" border="1" align="center">
<tr>
<td>Client:</td>
<td>MB:</td>
<td>Price:</td>
</tr>
<tr>
<td>
<?php
$query="SELECT name,surname,pers_code FROM Clients";
mysql_query("SET NAMES 'UTF8'");
$result = mysql_query ($query);
echo "<select name=Clients id='clients'>";
echo "<OPTION value=''>- Choose -</OPTION>\n";
while($nt=mysql_fetch_array($result)){
echo "<option value=$nt[pers_code]>$nt[name] $nt[surname]</option>";
}
echo "</select>";
?></td>
</tr>
</form>
答案 0 :(得分:1)
不幸的是,没有简单的方法可以做到这一点,并且PHP和Web开发人员通常会多年来一直受到诽谤,因为重新填充表单字段绝不容易和干净。
您未提交的表单中的值不会被发送(通过GET或POST),因此您只需编写自定义解决方法。
虽然它有点Q&amp; D,但我建议在表单提交上发送一个Ajax调用,以便将第二个表单的值存储在$ _SESSION变量中。
我很遗憾地说没有简单的替代方案 - 由于HTTP请求的无状态特性,这是每个程序员都必须努力的事情。
答案 1 :(得分:1)
您需要根据selected
中的内容设置select元素的$_POST
属性。类似的东西:
$selected = $_POST['Client'];
while($nt=mysql_fetch_array($result)){
if ($selected == $nt[pers_code]) {
echo "<option value=$nt[pers_code] selected="selected">$nt[name] $nt[surname]</option>";
}
else {
echo "<option value=$nt[pers_code]>$nt[name] $nt[surname]</option>";
}
}
另请注意,您应该清理从$_POST
获得的任何值。
答案 2 :(得分:1)
<script type="text/javascript" src="js/jquery1.6.1.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#forma").submit(function(event) {
var 1stformfield = $form.find( 'input[name="misc"]' ).val();
/* stop form from submitting normally */
//event.preventDefault();
$.post("1stformsubmit.php", $("#forma").serialize());
//after it posts you can have it do whatever
//just post code here
$('#iframe1').attr('src', 'iframepage.php?client=' + 1stformfield);
window.frames["iframe1"].location.reload();
return false;
});
});
</script>
<form name="1stform" method="post" action="/">
<input type="text" name="misc" id="misc" />
<input type="submit" name="submit" id="submit" value="submit 1st form"/>
</form>
<iframe id="iframe1" src="" scrolling="no" ></iframe>
iframe页面
<form name="forma" method="post" onmouseover="kaina();" action="/">
<table width="540" border="1" align="center">
<tr>
<td>Client:</td>
<td>MB:</td>
<td>Price:</td>
</tr>
<tr>
<td>
<?php
$selected = $_GET['Client'];
$query="SELECT name,surname,pers_code FROM Clients";
mysql_query("SET NAMES 'UTF8'");
$result = mysql_query ($query);
echo "<select name=Clients id='clients'>";
echo "<OPTION value=''>- Choose -</OPTION>\n";
while($nt=mysql_fetch_array($result)){
echo "<option value=$nt[pers_code]>$nt[name] $nt[surname]</option>";
}
echo "</select>"; ?></td>
</tr>
</form>
这会将表单中的所有输入发布到您指定的文件,然后您可以随意执行任何操作,例如显示感谢信息。希望它有所帮助。
答案 3 :(得分:1)
只是为了将问题分解为更简化的形式,让我们假设我们没有处理下拉菜单的麻烦。您遇到的真正问题是从表单1中获取一个值,即使在表单2提交后也可以使用它。
如果您在表单2上使用与表单1同名的隐藏字段,并根据表单1和表单2的POST数据填充它,它将被“记住”
<? // mostly html with a bit of php. ?>
<form id="f1" method="POST">
<input type ="text" name="f1val" value="<?= htmlspecialchars( array_key_exists( 'f1val', $_POST )?$_POST['f1val']:'' ); ?>">
<input type="submit">
</form>
<form id="f2" method="POST">
<input type="hidden" name="f1val" value="<?= htmlspecialchars( array_key_exists( 'f1val', $_POST )?$_POST['f1val']:'' ); ?>">
<input type ="text" name="f2val" value="<?= htmlspecialchars( array_key_exists( 'f2val', $_POST )?$_POST['f2val']:'' ); ?>">
<input type="submit">
</form>