为什么PHP总是重定向到同一页面?

时间:2012-11-29 20:21:00

标签: php if-statement

我已经写了这个小的php页面,它应该通过url中的值重定向用户。但脚本似乎不起作用。我错过了什么?

<?php
if ($choice=="stb")
  $redirect="http://www.webpage1.com/";

    elseif ($choice=="player")
        $redirect="http://www.alternativewebpage.com/"; 

    else
        $redirect="http://www.world-tvpro.com/";

header( 'Location: '.$redirect ) ;
?>

如果页面在我的服务器上保存为script.php,我会像这样执行它:http://mypage.com/script.php?choice=stb ..然后将被重定向到www.webpage1.com,但我被重定向到{{3无论我写什么。

5 个答案:

答案 0 :(得分:1)

您依赖于名为register_globals的功能,这很危险。不要让查询字符串参数在脚本中设置全局变量,而是使用$_GET超全局:

if ( isset($_GET['choice']) && $_GET['choice'] === 'stb' ) {

例如。

答案 1 :(得分:0)

您需要使用$_GET['choice'](或isset($_GET['choice']) ? $_GET['choice'] : null)。

答案 2 :(得分:0)

这似乎对我有用,有时候不会在你的陈述中使用{}会导致问题。

<?php
if ($_GET['choice'] == "stb")
{
    $redirect="http://www.webpage1.com/";
} elseif ($_GET['choice'] == "player") {
    $redirect="http://www.alternativewebpage.com/"; 
} else {
    $redirect="http://www.world-tvpro.com/";
}
header( 'Location: '.$redirect );
?>

此外,$ _GET ['choice']是从url查询字符串中获取变量的方式。

答案 3 :(得分:0)

PHP使用一系列超级全局数组将信息从客户端传递到服务器。它们如下:

 $_GET, $_POST, $_COOKIE and $_REQUEST

在您的情况下,由于您将url中的值作为查询参数传递,因此您应该使用$ _GET来检索选项:

$choice = $_GET['choice'];

注意:也可以使用$ _REQUEST检索它,因为请求是一个包含$ _GET,$ _POST和$ _COOKIE的所有值的超全局数组。

您只需使用请求执行与上述相同的操作:

$choice = $_REQUEST['choice'];

希望这有帮助。

答案 4 :(得分:0)

如果您在整个$choice = isset($_GET['choice']) ? $_GET['choice'] : false;语句上方添加IF,那么代码就可以了。

此外,虽然IF语句很好,但case语句也可以很好地工作:

$choice = isset($_GET['choice']) ? $_GET['choice'] : false;
switch($choice){
    case "stb":
        $redirect = 'http://www.webpage1.com/'; break;
    case "player":
        $redirect = 'http://www.alternativewebpage.com/'; break;
    default:
        $redirect = 'http://www.world-tvpro.com/';
}
header("Location: ".$redirect);
exit;