0

ユーザーが登録されているかどうかなどを確認するために login.php を使用している私のフォームは次のとおりです。

<form action="login.php" method="post" target="SHOW">
        <ul id="login">
            <li>    
                Username:<br />
                <input type="text" name="username"> 
            </li>
            <li>
                Password:<br />
                <input type="password" name="password">
            </li>
            <li>
                Submit:
                <br />
                <input type="submit" name="log in"> 
            </li>
            <li>
            <a href="../../register.php">Register</a></li>
        </ul>
      </form>
<iframe id="iframe" name="SHOW" scrolling="no"></iframe>

私のジレンマは、エラー メッセージを表示するために使用している iframe タグに端を発しています。ユーザーが登録されている場合は、PHP の最後にあるように、ユーザーを index.php にリダイレクトしたいと思います ---> header('Location: index.php');

問題は、iframe でリダイレクトが許可されていないことです。そこで、ターゲットを ---> target="SHOW" から target="_top" などに変更したいと思います。そのため、JavaScript を使用せずにログインに成功すると、ユーザーはリダイレクトされます。

これを達成しようとして失敗しました --> $href->removeAttribute('target'); $href->setAttribute("ターゲット", "_top");

これが login.php です。

<?php 

include 'core/init.php';

if(empty($_POST) === false){
$username = $_POST['username'];
$password = $_POST['password']; 

if(empty($username) || empty($password) === true){
    $errors[] = 'You need to enter a username and password';        
    } else if (user_exists($username) === false){
        $errors[] = 'We can\'t find that username. Have you registered?';
        } else if (user_active($username) === false){
            $errors[] = 'You haven\'t activated your account!';
            } else {
                $login = login($username, $password);
                if($login === false){
                    $errors[] = 'That username/password combination is incorrect';
                    } else {
                        $_SESSION['user_id'] = $login;
                        $href->removeAttribute('target');
                        $href->setAttribute("target", "_top"); 
                        header('Location: index.php');
                        exit();
                        }
                }

                print_r($errors);
}

?>

4

1 に答える 1

0

iframe に POST を実行しているため、応答によって実行されるアクションは iframe 自体のコンテキストに対してのみ有効です。つまり、通常の HTTP リダイレクトを実行すると、iframe のコンテンツのみが変更されます。

iframe を保持したい場合 (これはお勧めしません。代わりに、フォームを表示する同じコントローラー/ファイルにエラー処理とログ記録の両方を保持します)、iframe 応答で javascript を使用してリダイレクトできます。

<script type="text/javascript">
    parent.location.href = 'http://www.bbc.co.uk/';
</script>

きれいではありませんが、うまくいきます。

于 2012-11-28T09:00:26.187 に答える