继续提交提交的表格

时间:2013-07-24 19:52:59

标签: php

好的,我有登录的重定向功能。下面是一些代码:

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

问题是如果输入错误的登录凭据,位置输入字段的值将变为空。但如果输入错误然后输入右边,则不会重定向。这是为什么?如何保留重定向网址?

3 个答案:

答案 0 :(得分:0)

第二次到达此页面时,它基本上是一个完整的重新加载,PHP再次完成整个表单处理。但是,这一次,请求在制作表单时没有“重定向”参数。但是,有一个“位置”参数,源自您隐藏的表单输入。我会说你有两个不错的选择:

  • 更改“位置”或“重定向”,以便始终使用相同的参数名称
  • 让底部附近的PHP代码决定使用“位置”,或者如果不可用,请“重定向”。

答案 1 :(得分:0)

我这样做了:

<form action="?page=login<?=isset($_GET['redirect']) ? '&redirect='.urlencode($_GET['redirect']) : ''?>" method="post">

答案 2 :(得分:0)

您将“重定向”作为隐藏字段注入表单。这是一个好的开始。但是您将其名称更改为“位置”。将隐藏字段的名称设置为“重定向”,它将被正确重新提交。我相信这是你的初衷。