我在我的页面上有一个帖子列表,我也有一个搜索帖子的表单。
这是我的表单:
<form action="" method="post">
<input type="text" name="search" onclick="if(this.value=='Search:')this.value=''" onblur="if(this.value=='')this.value='Search:'" value="Search:" />
<input type="submit" value="Search" name="sendForm" />
</form>
然后,当我的表单与一些值一起提交时,我存储一个会话与我的sql条件语句,我只得到我的新闻列表,标题像我在输入中写的值。
然后,如果我提交没有任何值的表单,我将取消会话设置,并再次获得所有新闻的列表。
if(isset($_POST['sendForm'])){
$search = $_POST['search'];
if(!empty($search) && $search != 'Search:'){
$_SESSION['where'] = "WHERE title LIKE '%$search%'";
header('Location: dashboard.php?exe=posts/index');
}
else{
unset($_SESSION['where']);
}
}
这个工作得很好,但是我需要点击我的输入搜索来取消我的会话并再次获得所有新闻。
即使我刷新我的页面,我只得到我的新闻标题,我写在我的输入,只有当我点击我的提交按钮,我再次得到我的列表与所有的新闻。
你看到我怎么能解决这个问题,我如何可以取消我的会话不仅点击我的提交,而且与页面刷新,因为我想显示所有的新闻,当我点击我的链接dashboard。php?exe =帖子/指数
我尝试下面的代码在我的页面顶部,但像这样我的搜索表单不工作,不返回任何结果。
if(!empty($_SESSION['where'])){
unset($_SESSION['where']);
}
另一个快速的替代方法是,而不是unset,您可以设置$_SESSION['where'] == ""
,然后您的查询将不会受到影响,因为它只包含什么。还请注意,您的代码容易受到SQL注入攻击。
你可以将用户上次访问的页面存储在session中,如果它与当前页面相同并且没有提交,你就知道这是刷新。
或者你可以使用referer
($_SERVER['HTTP_REFERER']
),虽然它不太可靠,因为它是客户端数据,可以被篡改。