我试图以login.php形式创建登录功能。如果登录成功,我想重定向到index.php页面。但是如果登录中有任何错误,它应该重定向到同一页面(在这种情况下应该是login.php)。我该如何实现呢?
这是我的表单设计代码。根据此代码,它总是重定向到login.php。
<form name="login" method="POST" action="login.php">
<table class="table">
<tr>
<td>Username</td>
<td><input type="text" name="uname" class="form-control" placeholder="Username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" class="form-control" placeholder="Password"></td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" name="login" class="btn btn-primary" value="Login">
</td>
</tr>
</table>
</form>
这是用于登录的服务器端代码
if (isset($_POST["login"])) {
$uname = $_POST['uname'];
$password = $_POST['password'];
$query = mysql_query("select *from user where username='$uname'") or die(mysql_error());
$numrows = mysql_num_rows($query);
if ($numrows != 0) {
while ($row = mysql_fetch_assoc($query)) {
$dbuser = $row['username'];
$dbpassword = $row['password'];
$status = $row['status'];
}
if ($status == 0) {
?>
<div class="alert alert-danger" style="text-align: center ; font-size: 17px;" role="alert">Your account is not yet activated.Please check your email to activate account.</div>
<?php
} else if ($uname == $dbuser && $password == $dbpassword) {
$_SESSION['username'] = $uname;
?>
<?php
} else {
?>
<div class="alert alert-danger" style="text-align: center ; font-size: 17px;" role="alert">Incorrect Password.</div>
<?php
}
} else {
?>
<div class="alert alert-danger" style="text-align: center ; font-size: 17px;" role="alert">Incorrect Email.</div>
<?php
}
}
答案 0 :(得分:0)
使用header
进行重定向(确保在此之前不要输出/打印/回显)。
在else if
条件下(您要检查有效的用户名和密码) -
} else if ($uname == $dbuser && $password == $dbpassword) {
//...All your session assignments
header("Location: home.php");
}
答案 1 :(得分:0)
if (status == 1){ //or whatever stands for logged in
header( 'Location: http://www.yoursite.com/new_page.html' ) ;
}
答案 2 :(得分:0)
您的代码中实际上没有“重定向”。当您发送表单时,它只会打开页面“login.php”,就是这样。如果要在登录成功时添加重定向,只需添加
header('Location: index.php');
后
$_SESSION['username'] = $uname;
答案 3 :(得分:0)
这是一个应该让您的网页功能更好并且更正安全问题的答案。
<?php
session_start();
if (isset($_POST["login"])) {
$uname = mysql_real_escape_string($_POST['uname']);
$password = mysql_real_escape_string($_POST['password']);
$query = mysql_query("select *from user where username='$uname' and password='$password' and `status` <> 0") or die(mysql_error());
$numrows = mysql_num_rows($query);
if ($numrows == 0) {
echo '<div class="alert alert-danger" style="text-align: center ; font-size: 17px;" role="alert">Sorry the provided credentials were not valid, or you account is invalid.</div>';
} else {
$_SESSION['username'] = $uname;
header('Location: PAGEADDRESSHERE');
}
}
您当前代码的问题:
1.用户输入直接进入您的查询。这将打开SQL注入。使用http://php.net/manual/en/function.mysql-real-escape-string.php解决此问题
2.您应该在同一次DB调用中检查状态和密码
3.您不应以纯文本格式存储密码。如果恶意用户访问您的数据库,他们将拥有所有用户密码。 https://security.stackexchange.com/questions/36833/why-should-i-hash-passwords
4.你永远不会开始你的会议
现在进行重定向...您可以使用PHP标头功能重定向用户http://php.net/manual/en/function.header.php。路径应该是绝对的。如果在此函数之后发生了进程,则应在其后使用exit()以确保停止所有处理。
另请注意,mysql_
函数已弃用mysqli_
或PDO
应使用。
此外,根据您在其他答案中的评论,您可以在添加header
功能时收到警告。
请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。使用include或require,函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。
答案 4 :(得分:0)
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$uname = mysql_real_escape_string($_POST['uname']);
$password = mysql_real_escape_string($_POST['password']);
$query = mysql_query("select *from user where username='$uname'") or die(mysql_error());
$numrows = mysql_num_rows($query);
if ($numrows != 0) {
while ($row = mysql_fetch_assoc($query)) {
$dbuser = $row['username'];
$dbpassword = $row['password'];
$status = $row['status'];
}
if ($status == 0) {
?>
<div class="alert alert-danger" style="text-align: center ; font-size: 17px;" role="alert">Your account is not yet activated.Please check your email to activate account.</div>
<?php
} else if ($uname == $dbuser && $password == $dbpassword) {
$_SESSION['username'] = $uname;
header("location: home.php");
?>
<?php
} else {
?>
<div class="alert alert-danger" style="text-align: center ; font-size: 17px;" role="alert">Incorrect Password.</div>
<?php
}
} else {
?>
<div class="alert alert-danger" style="text-align: center ;font-size:17px;" role="alert">Incorrect Email.</div>
<?php
}
}
?>
<form name="login" method="POST" action="login.php">
<table class="table">
<tr>
<td>Username</td>
<td><input type="text" name="uname" class="form-control" placeholder="Username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" class="form-control" placeholder="Password"></td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" name="login" class="btn btn-primary" value="Login">
</td>
</tr>
</table>
</form>