我在页面中有两个表单,一个是过滤器,第二个是项目列表,当我将过滤器应用于项目列表表单时,所选值将重置为默认值。对于过滤器,我可以保存选定的值,因为我通过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>
您需要根据$_POST
中的内容设置选择元素的selected
属性。类似于:
$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
获得的任何值。
不幸的是,没有简单的方法可以做到这一点,这也是PHP和web开发人员多年来一直诟病的问题,因为重新填充表单字段从来都不是一件容易和干净的事情。
您未提交的表单中的值不会被发送(通过GET或POST(,因此您需要编写一个自定义的解决方法。
虽然这有点问答;D、 我建议在表单提交时发送一个Ajax调用,将第二个表单的值存储在$_SESSION变量中。
我很抱歉地说,没有简单的替代方案——由于HTTP请求的无状态性质,这是每个程序员都必须努力解决的问题。
为了将问题分解为更简单的形式,我们假设我们没有使用下拉列表的麻烦。你面临的真正问题是从表格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>
<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>
这将把表单中的所有输入发布到您指定的文件中,然后您可以让它做任何您喜欢的事情,例如显示感谢信息。。希望能有所帮助。