为什么我的重定向不能在PHP中工作?

时间:2016-02-13 10:17:48

标签: php get header

无法根据$ _GET重定向用户

此文件名为forgot.php

<?php 

       $mode_allowed = array('password');
       if (isset($_GET['mode']) === true && in_array($_GET['mode'], $mode_allowed) === true) {
            echo $_GET['mode'];
       } else {
            header('Location: index.php');
            exit();
       }

?>

<form action="" method="post">
    <div class="form-group">
          <label class="sr-only">Email Address</label>
          <input type="text" name="form-emailaddress" placeholder="Email Address" class="form-emailaddress>
          <button type="submit" class="btn signin">Submit</button>
    </div>
</form>

所以基于php代码,我认为应该做的是在URL中它应该只接受http://localhost/forgot.php?mode=password

然而,如果它是其他任何东西,那么它应该重定向。但它的作用是,如果我将“模式”更改为其他内容或者模式=“某些”不在数组中($ mode_allowed),那么它只会停留在同一页面上。

由于

4 个答案:

答案 0 :(得分:1)

此处;是您的更新代码。

<?php
$mode_allowed = array('password');
       if ((isset($_GET['mode'])) && (in_array($_GET['mode'], $mode_allowed))) {
            echo $_GET['mode'];
       } else {
            header('Location: index.php');
            exit();
       }
?>

您无需在任何地方使用=== true

答案 1 :(得分:0)

您需要检查参数值。您获得mode = password,但如果您还有其他任何内容,则应将用户重定向到上一页。 header('Location:index.php');

或者你可以简单地使用if(isset($_GET['mode']) && $_GET['mode'] == 'password')

答案 2 :(得分:0)

首先使用print_r($_GET);并检查你得到的是什么而不是使用条件还注意我使用trim()来删除任何多余的空间。

if (isset($_GET['mode']) && in_array(trim($_GET['mode']), $mode_allowed))
{...}

或者如果您仍然面临同样的问题,也可以使用$_REQUEST

if (isset($_REQUEST['mode']) && in_array(trim($_REQUEST['mode']), $mode_allowed))
{...}

答案 3 :(得分:0)

问题是因为我在体内调用了这个php标签