根据 $_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 标签