好的,我有登录的重定向功能。下面是一些代码:
if ($sukces) {
$_SESSION['id'] = $row['id'];
if($_POST['location'] != '') {
header('Refresh: 1;url='.$_POST['location'].'');
echo message('You have logged in.<br>Press <a href="'.$_POST['location'].'">here</a> if you are not returned automatically.');
return false;
} else {
header("Location: /home");
}
} else {
// login failed
exit();
}
if($_POST['location'] != '') {
header('Refresh: 1;url='.$_POST['location'].'');
} else {
header("Location: /account");
}
<form action="?page=login" method="post">
<input type="hidden" name="location" value="<?=isset($_REQUEST['redirect']) ? htmlspecialchars($_REQUEST['redirect']) : ''?>">
E.g:
http://localhost/?page=login&redirect=%2Fforum%2F%3Faction%3Dpost%26boardid%3D1
问题是如果输入错误的登录凭据,位置输入字段的值将变为空。但如果输入错误然后输入右边,则不会重定向。这是为什么?如何保留重定向网址?
答案 0 :(得分:0)
第二次到达此页面时,它基本上是一个完整的重新加载,PHP再次完成整个表单处理。但是,这一次,请求在制作表单时没有“重定向”参数。但是,有一个“位置”参数,源自您隐藏的表单输入。我会说你有两个不错的选择:
答案 1 :(得分:0)
我这样做了:
<form action="?page=login<?=isset($_GET['redirect']) ? '&redirect='.urlencode($_GET['redirect']) : ''?>" method="post">
答案 2 :(得分:0)
您将“重定向”作为隐藏字段注入表单。这是一个好的开始。但是您将其名称更改为“位置”。将隐藏字段的名称设置为“重定向”,它将被正确重新提交。我相信这是你的初衷。