试图取消我的会话['where']不仅点击我的提交输入..还有页面刷新


trying to unset my session['where'] not only clicking on my submit input... but also with page refresh

我在我的页面上有一个帖子列表,我也有一个搜索帖子的表单。

这是我的表单:

<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']),虽然它不太可靠,因为它是客户端数据,可以被篡改。