0

わかりましたので、ログイン用のリダイレクト機能があります。いくつかのコードを次に示します。

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

問題は、間違ったログイン資格情報を入力すると、場所の入力フィールドの値が空になることです。ただし、間違って入力してから右に入力すると、リダイレクトされません。何故ですか?リダイレクト URL を保持するにはどうすればよいですか?

4

3 に答える 3

0

このページに 2 回目にアクセスすると、基本的に完全なリロードが行われ、PHP がフォーム全体の処理を再度実行します。ただし今回は、フォームを作成するときにリクエストに「redirect」パラメーターはありません。ただし、非表示のフォーム入力に由来する「場所」パラメーターがあります。2 つの良い選択肢があると思います。

  • 「場所」または「リダイレクト」のいずれかを変更して、常に同じパラメーター名を使用するようにします
  • 一番下にある PHP コードで、「場所」を使用するか、それが利用できない場合は「リダイレクト」を使用するかを決定します。
于 2013-07-24T20:00:48.060 に答える
0

「リダイレクト」を非表示フィールドとしてフォームに挿入します。それは良いスタートです。ただし、その名前を「場所」に変更します。非表示フィールドの名前を「redirect」に設定すると、適切に再送信されます。これが最初の意図だったと思います。

于 2013-07-24T21:31:18.297 に答える