当用户成功登录时,PHP更改post目标
这是我的表单,它使用login.php检查用户是否已注册,等等当用户成功登录时,PHP更改post目标,php,redirect,post,iframe,target,Php,Redirect,Post,Iframe,Target,这是我的表单,它使用login.php检查用户是否已注册,等等 <form action="login.php" method="post" target="SHOW"> <ul id="login"> <li> Username:<br /> <input type="text" name="username">
<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标记。如果用户已注册,我想将其重定向回index.php,正如您在php-->header('Location:index.php')末尾看到的那样
问题是iframe不允许重定向。因此,我想将目标从-->target=“SHOW”更改为target=“\u top”或类似的内容。因此,用户在成功登录后将被重定向,而不使用任何JavaScript
我完成此操作的尝试失败-->$href->removeAttribute(“目标”);
$href->setAttribute(“目标”,“顶部”)
这里是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);
}
由于您正在发布到iframe,因此响应采取的任何操作仅对iframe本身的上下文有效,这意味着执行常规HTTP重定向只会更改iframe的内容
如果您想保留iframe(我建议您不要这样做,而是将错误处理和日志记录保留在显示表单的同一控制器/文件中),您可以在iframe响应中使用javascript重定向:
<script type="text/javascript">
parent.location.href = 'http://www.bbc.co.uk/';
</script>
parent.location.href=http://www.bbc.co.uk/';
不太好看,但它可以工作。您尝试过header('Location:index.php');在页面顶部,只是为了检查它是否正常工作header('Location:index.php');工作正常,但是它被发布在iframe中,这一点都没有用。在网页内创建一个小窗口。感谢您的回复。非常感谢。不使用iframe的解决方案是什么?因为,我不希望因为错误而将用户重定向到login.php。我可以寄到别的地方吗?