登录成功后重定向到新页面
Posted
技术标签:
【中文标题】登录成功后重定向到新页面【英文标题】:Redirecting to a new page after successful login 【发布时间】:2013-02-12 00:03:31 【问题描述】:我确信这个问题之前已经被问过,但我已经彻底寻找答案但无济于事。 (我见过的唯一答案涉及 ajax)但我只使用 javascript、php 和 html。
我有一个 login.php 页面,并且我已经创建了一个 HTML 页面,该页面将在用户成功登录后立即成为登录页面。我该怎么做?
下面是我的登录页面代码和登录后的登陆页面调用transfer.html:
LOGIN.PHP
<div id="content">
<h3>Login to Internet Banking</h3>
<form id="login" action="" method="post">
<p>
<label for="userid">UserID:</label>
<input type="text" name="UserID" id="UserID"/>
</p>
<p>
<label for="PIN">PIN:</label>
<input type="password" name="PIN" id="PIN" />
</p>
<p>
<input type="submit" name="btnSend" value="Login" class="submit_button" />
</p>
</form>
<td> </td>
<p>
Not yet registered?
<a href="registration.php">Click here to register</a>
</p>
<div id="wrap">
<!-- start PHP code -->
<?php
mysql_connect("localhost", "root", "") or die(mysql_error()); // Connect to database server(localhost) with UserID and PIN.
mysql_select_db("registrations") or die(mysql_error()); // Select registration database.
if(isset($_POST['name']) && !empty($_POST['name']) AND isset($_POST['PIN']) && !empty($_POST['PIN']))
$UserID = mysql_escape_string($_POST['name']);
$PIN = mysql_escape_string(md5($_POST['PIN']));
$search = mysql_query("SELECT UserID, PIN, active FROM users WHERE UserID='".$UserID."' AND PIN='".$PIN."' AND active='1'") or die(mysql_error());
$match = mysql_num_rows($search);
if($match > 0)
$msg = 'Login Complete! Thanks';
else
$msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.';
?>
<!-- stop PHP Code -->
<?php
if(isset($msg)) // Check if $msg is not empty
echo '<div class="statusmsg">'.$msg.'</div>'; // Display our message and add a div around it with the class statusmsg
?>
</div>
</div>
【问题讨论】:
你真正想要什么? 看看header() 欢迎来到 Stack Overflow!请不要使用mysql_*
函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果你选择 PDO here is a good tutorial.
首先,您应该在
【参考方案1】:
试试 header("Location:home.php");而不是显示 $msg = '登录完成!谢谢'; 希望对你有帮助。
【讨论】:
这行不通,因为无法在 php 脚本的任何输出之前设置标头。 把你的 php 脚本放在 if(isset($_POST['btnSend']) && $_POST['btnSend']=='Login') 这个代码下。 再一次,应该没有输出。文件的第一行,“”已经是一个输出,所以所有的标题都应该在该行之前设置。 然后使用您的完整网站网址,例如 header("Location:website.com/home.php"); 希望它会工作。 请阅读php.net/manual/ru/function.header.php 了解什么是标题以及如何使用它们。你放什么链接都没有关系,问题是如果你之前有一个输出字符,你就不能设置任何标题。这不起作用: "test " ; 而这会: "test"【参考方案2】:您需要将location
标头设置如下:
header('Location: http://www.example.com/');
当然用你的着陆页的网址替换http://www.example.com
。
在您完成用户登录的地方添加。
注意:重定向时用户会立即被重定向,因此您的消息可能不会显示。
此外,您需要将 PHP 代码移动到文件顶部才能使此解决方案正常工作。
另一方面,请参阅我上面关于使用已弃用的mysql
语句的评论,并考虑使用更新、更安全和改进的mysqli
或PDO
语句。
【讨论】:
【参考方案3】:首先,将所有 PHP 代码移到顶部。没有它,我下面的代码将无法工作。
要进行重定向,请使用:
header('Location: http://www.example.com/');
另外,请考虑我的建议。由于这不是今天的第一个问题,而且您的所有问题都与基础有关,因此您应该考虑阅读一些不错的 PHP 书籍以了解其工作原理。
您可以在此处找到免费书籍的有用链接: https://***.com/tags/php/info
【讨论】:
【参考方案4】:使用 php 代码生成的 Javascript 重定向:
if($match > 0)
$msg = 'Login Complete! Thanks';
echo "<script> window.location.assign('index.php'); </script>";
else
$msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.';
仅限 PHP 重定向:
<?php
header("Location: index.php");
exit;
?>
【讨论】:
您的回答对我的项目来说是一份神圣的礼物。谢谢你好先生! 这个答案有效。使用这种方法有安全问题吗?【参考方案5】:您还可以在登录后提供指向页面的链接,并在 10 秒后使用 javascript 自动重定向。
【讨论】:
【参考方案6】:只需在您使用 PHP 代码提供的最后一条消息之后添加以下代码
打印'window.location.assign("index.php")
【讨论】:
这是 php 还是 javascript ?你能检查一下语法吗? 这个问题在三年前得到了回答并被接受。你的新答案带来了什么价值?此外,格式不正确,您的代码不是有效的 PHP。【参考方案7】:可以这样使用
if($match > 0)
$msg = 'Login Complete! Thanks';
echo "<a href='".$link_address."'>link</a>";
else
$msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.';
【讨论】:
以上是关于登录成功后重定向到新页面的主要内容,如果未能解决你的问题,请参考以下文章