0

我想确保将 $_GET 变量设置为我的 URL 中另一个变量的值。如果没有,那么我想重新加载页面/网址以显示设置变量。这是我使用的代码:

session_start(); 
$openfile = $_SESSION['openfile'];
//check if $GET variable isset to the current $SESSION variable
if($_GET['file'] !== $_SESSION['openfile'] && !empty($_SESSION['openfile'])){
//if not then create new URL string
  $hloc = basename($_SERVER['PHP_SELF']).'?file='.$openfile;
//change location to new URL string
  header("Location: $hloc");
}

我不明白为什么它不起作用。任何帮助都会很棒。谢谢。

编辑:问题是 url 没有反映标题信息应该是什么。如果页面然后再次重新加载,这将自行修复。然而,这显然不是我想要的。

4

4 回答 4

2
if(isset($_GET['file'])) {
   //its set means value is not equal to null or false
} else {
   //its not set so redirect
}

http://php.net/manual/en/function.isset.php

于 2013-03-26T18:13:41.257 回答
0

我发现了问题。

这是由于脚本后面的标题信息不正确。

于 2013-03-29T19:49:46.387 回答
0

您能否提供一个示例 URL,以便我们查看它是否正在焦化?除此之外,试试这个。请注意$hloc现在如何在引号之外:

session_start(); 
//check if $GET variable isset to the current $SESSION variable
if($_GET['file'] !== $_SESSION['openfile'] && !empty($_SESSION['openfile'])){
//if not then create new URL string
  $hloc = basename($_SERVER['PHP_SELF']).'?file='.$openfile;
//change location to new URL string
  header("Location: " . $hloc);
}
于 2013-03-26T18:13:19.690 回答
0

有一个错误。Undefined variable: openfile.

更改此行

$hloc = basename($_SERVER['PHP_SELF']).'?file='.$openfile;

$hloc = basename($_SERVER['PHP_SELF']).'?file='.$_SESSION['openfile'];

由于 $openvariable 已设置(根据海报评论),因此唯一的错误是:未设置 SESSION 变量或 GET 变量。由于以下代码完美运行。

<?php
session_start(); 
$_SESSION['openfile']='foo';
$_GET['file']='bar';
$openfile = $_SESSION['openfile'];
//check if $GET variable isset to the current $SESSION variable
if($_GET['file'] !== $_SESSION['openfile'] && !empty($_SESSION['openfile'])){
//if not then create new URL string
  $hloc = basename($_SERVER['PHP_SELF']).'?file='.$openfile;
//change location to new URL string
  header("Location: $hloc");
}
?>

从语法上看,您的代码看起来很完美,因此请正确检查是否设置了 GET 变量和会话变量。

首先暂时评论此声明。 header("Location: $hloc");放:

echo $_GET['file'];
echo $_SESSION['openfile'];

在 if 条件之前检查输出。它将帮助您跟踪和了解错误。

于 2013-03-26T18:16:36.197 回答