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

时间:2014-06-13 01:20:41

标签: php

我的页面中有一个帖子列表,我还有一个表单来搜索帖子。

这是我的表格:

<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']);    
}

2 个答案:

答案 0 :(得分:1)

另一个快速替代方法是,您可以设置$_SESSION['where'] == ""而不是取消设置,然后您的查询不会受到影响,因为它只包含任何内容。另请注意,您的代码容易受到SQL注入攻击。

答案 1 :(得分:0)

您可以将用户最后访问过的页面存储在会话中,如果它与当前页面相同且没有提交,则您知道它是刷新的。

或者您可以使用referer$_SERVER['HTTP_REFERER']),但它不太可靠,因为它是客户端数据并且可能被篡改。