为什么我的重定向在 PHP 中不起作用


Why is my redirect not working within PHP?

根据 $_GET 重定向用户时遇到问题

此文件称为忘记.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 = 不在数组中的"某些东西"($mode_allowed(,那么它只会停留在同一页面上。

谢谢

这是您更新的代码。

<?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

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

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

首先使用

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))
{...}

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