检查变量是否已更改,然后在每次变量更改时取消设置会话 - PHP

时间:2014-08-17 22:10:55

标签: php session-variables

在搜索编程问题的答案时,我在这里阅读了很多有用的信息。我刚刚注册,因为我想问一个关于PHP变量的问题,我无法找到简明的答案。

我想检查PHP变量是否已更改。

我有一个表单字段,用户键入他们的城市,状态为。它存储在$_SESSION['location']

我还有一个存储国家的变量。

$country变量发生变化时,城市,州由于处于会话状态而保留在表单字段中。这是一个问题,因为显然最初输入的城市不适用于被选中的其他国家。

每次国家/地区变量更改时,我都需要取消设置$_SESSION['location'],以便表单字段返回空。我不知道该怎么做。但是下面是我的代码,尝试在if语句中取消设置会话。

// Country Selector
switch ($country) {
    case "USA":
        $example = "San Jose, CA or 94102";
        $placeholder = "city, state, or zip";
        break;
    case "Canada":
        $example = "Toronto, ON";
        $placeholder = "city, state";
        break;
    case "India":
        $example = "New Delhi, Delhi";
        $placeholder = "city, state";
        break;
    default:
        $example = "San Jose, CA or 94102";
        $placeholder = "city, state, or zip";
}

// Location Search
$location = '';
$prev_country = $country;

if ($country == $prev_country) {
    if (isset($_POST['location'])) {
        $_SESSION['location'] = $location = ucwords($_POST['location']);
        header('Location: '.($_SERVER['REQUEST_URI']));
    } elseif (isset($_SESSION['location'])) {
        $location = $_SESSION['location'];
    }
} else {
    unset($_SESSION['location']);
    unset($_POST['location']);
    $location = '';
}

更新

我尝试了使用if ($country == $_SESSION['country'])的建议,但仍然在之前的代码中得到了与之前相同的结果。

      // Location Search
  $location = '';
  $_SESSION['country'] = $country;
  if ($country == $_SESSION['country']) {
  if (isset($_POST['location'])) {
      $_SESSION['location'] = $location = ucwords($_POST['location']);
          header('Location: '.($_SERVER['REQUEST_URI']));
  } elseif (isset($_SESSION['location'])) {
      $location = $_SESSION['location'];
  }
  } else {
      unset($_SESSION['location']);
      unset($_POST['location']);
      $location = '';
  }

2 个答案:

答案 0 :(得分:1)

这两行代码肯定不会给出任何好的结果,因为条件总是会评估为真:

$prev_country = $country;
if ($country == $prev_country) {

您需要做的是检查会话中的值与用户刚刚发送的值:

if($_SESSION['country'] != $_POST['country']) {
    // country changed! do something!
}

答案 1 :(得分:0)

这没有任何意义。

$prev_country = $country;

if ($country == $prev_country) {

if语句将始终为true,因为$ country与$ prev_country相同。您应该检查$ country是否与之前的会话相同(如果您到目前为止没有这样做,请将其保存在那里)。

if ($country == $_SESSION['country']) {
    if (isset($_POST['location'])) {
        $_SESSION['location'] = $location = ucwords($_POST['location']);
        header('Location: '.($_SERVER['REQUEST_URI']));
    } elseif (isset($_SESSION['location'])) {
        $location = $_SESSION['location'];
    }
} else {
    unset($_SESSION['location']);
    unset($_POST['location']);
    $location = '';
}