假设您有一个这样的搜索表单:
<form action="<?php $_PHP_SELF ?>" method="GET">
Some filter:
<select name="filter">
<option value="">Any value</option>
<option value="1">value is 1</option>
etc...
</select>
<input type="submit" value="Search">
</form>
您的索引页面如下所示:
<?php
if($_GET['filter']){
$sql = 'SELECT * FROM table WHERE value=' . $_GET['filter'];
/* prepare, execute blah blah blah etc etc etc */
include 'results.php';
exit();
}
include 'searchform.php';
?>
如果设置了过滤器,这将非常有效。但如果不是,我希望它显示所有结果,而是将页面保留在搜索表单上。如果我将其更改为if($_GET['filiter'] or $_GET['filter'] == ""){
(逻辑上),则只会获取所有未过滤的结果并忽略搜索表单。有什么解决办法吗?
注意:
我知道我可以设置一个隐藏的输入类型<input type="hidden" name="hidden" value="true">
,而不是使用检查过滤器,if($_GET['hidden'] == 'true'){
但它会在 URL 中可见,我不希望这样。我也不想只使用POST
,因为那样过滤器将不可见,而且我更希望如果有人只想更改 URL 中的过滤器,他们可以而不是返回搜索表单。
注意 2 我使用 PDO 来准备和执行,但这与问题无关,因此我没有提供它