【问题标题】:Why do my session variables unset when I don't call the href that unsets it当我不调用取消设置的 href 时,为什么我的会话变量会取消设置
【发布时间】:2013-12-21 19:17:54
【问题描述】:

在我的 PHP 程序中,我有几个链接都链接到同一页面。它的作用是根据我的操作更新当前站点,然后我通过 GET 发送新信息,或者如果我需要取消设置会话。

在指向同一页面的一个链接中,我调用 unset($_SESSION['search']),而在另一个链接中,我调用 GET 来对信息进行排序。但是当我调用 GET 链接而不是未设置的链接时,我的会话变量无论如何都会被重置。

一切都在 view.php 中完成

这是我未设置的链接

<a href="view.php<?php unset($_SESSION['search']); ?>">View All</a>

我的 GET 链接

<th><a href="view.php?id=<?php echo 'id';?>">ID</a></th>

<th><a href="view.php?id=<?php echo 'itemName';?>">Item Name</a></th>

<th><a href="view.php?id=<?php echo 'description';?>">Description</a></th>

<th><a href="view.php?id=<?php echo 'supplierCode';?>">Supplier</a></th>

<th><a href="view.php?id=<?php echo 'cost';?>">Cost</a></th>

当我调用未设置的链接时,我需要它来重置会话变量。但是当我调用获取链接时,我需要保留会话变量。

我能做些什么来做到这一点?

调用这些链接时我的 php 操作

if (isset($_SESSION['search'])) {

    $sql_query = "SELECT * FROM inventory WHERE description LIKE '%".$_SESSION['search']."%' ORDER BY ".$id." ASC";

    $check = true;
}


else if ($_POST && !(Trim($_POST['search']) === '')) {

    $search = $link->real_escape_string($_POST['search']);

    $_SESSION['search'] = $search;

    $sql_query = "SELECT * FROM inventory WHERE description LIKE '%".$_SESSION['search']."%' ORDER BY ".$id." ASC";

    $check = true;
}

else {
    $sql_query = "SELECT * FROM inventory ORDER BY ".$id." ASC";

}

因为每当我重定向回 view.php 时 $_SESSION['search'] 总是被重置,所以当我按下 get 链接时总是会调用最后一个 else,即使我需要它留下来!

【问题讨论】:

  • 你将它设置为 $search 是空白的
  • @dagon 在同一页面中有一个表单,我在其中获得了 search 的值

标签: php session


【解决方案1】:

您未设置的链接结构似乎只是在“查看全部”链接的 href 内联的“搜索”变量上调用 unset()。无论如何,这将使它无法设置“搜索”。看起来像这样的东西对你有用:

<a href="view.php?unset=1">View All</a>

然后在你的 php 动作中:

if ($_GET['unset'] == 1) {
        unset($_SESSION['search']);
}
if (isset($_SESSION['search'])) {
        $sql_query = "SELECT * FROM inventory WHERE description LIKE '%".$_SESSION['search']."%' ORDER BY ".$id." ASC";
        $check = true;
}

【讨论】:

  • 这不起作用,因为当我将 'unset' 设置为 id 时,它会破坏程序,因为数据库调用任何要排序的 id 并且没有任何东西被称为 unset 所以它会中断。
  • 尝试使用替代变量名来取消设置搜索值。答案已更新。
  • 可能更好,您可以将“查看全部”链接简单地设置为 查看全部,然后将 PHP 操作的条件更改为:如果(empty($_GET['id'])) { unset($_SESSION['search']); }
  • annnnnd 非常感谢您!现在另一件事坏了,但看起来更容易修复......
  • 太棒了,很高兴为您提供帮助。 :)
猜你喜欢
  • 1970-01-01
  • 2016-10-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2010-11-04
相关资源
最近更新 更多