【发布时间】:2012-10-24 10:09:12
【问题描述】:
我使用带有下拉列表的表单制作了一个过滤器。过滤器用于过滤来自 mySQL 数据库的结果。表单与结果在同一页面上处理。我想让过滤器下拉列表在过滤结果后保留过滤器参数。
我过去曾通过使用会话来完成此操作,但那是我使用另一个页面来处理查询的时候。我试图应用同样的理论,但它不起作用。我搜索了这个网站以及谷歌,我只找到了与一个单独的页面相关的答案。
目前,我拥有的代码只会在提交两次后才预填充表单。第一次提交时显示默认设置“选择...”
以下是我的代码的相关部分:
session_start();
if(isset($_SESSION['submitted_filter_values']))
{
extract($_SESSION['submitted_filter_values']);
}
<form action="#filter" method="post" name="filter">
<table>
<tr>
<td>
<select name="prefix">
<option value="">Select...</option>
<option <?php if(isset($prefix) && $prefix == "PDM"){echo "selected=\"selected\"";} ?> value="PDM">PDM</option>
<option <?php if(isset($prefix) && $prefix == "TB"){echo "selected=\"selected\"";} ?> value="TB">TB</option>
<option <?php if(isset($prefix) && $prefix == "JNL"){echo "selected=\"selected\"";} ?> value="JNL">JNL</option>
</select>
</td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" class="btn_150x30" name="submit" value="Filter Results"></td>
</tr>
</table>
</form>
$_SESSION['submitted_filter_values'] = $_REQUEST;
我尝试将会话变量放在不同的位置,但没有奏效。我认为刷新页面可能会起作用,但后来我认为它会像我两次提交表单时一样有效地删除过滤器。需要注意的有趣的一点是,它非常一致,因为它在我每第二次提交时都会正常工作,所以每一次奇数提交它都不会填充,而每一个偶数提交它都会填充。
【问题讨论】:
-
您说您希望在
POSTs 中保留select元素value字段,但您是否也真的希望保留该设置会话范围? -
你在哪里声明 $prefix 变量?
-
@didierc 你提出了一个奇妙的观点。我不一定需要它在会话范围内,我显然刚刚学到了为什么我不尝试让某些东西在不同的应用程序上工作。