如果没有错误,如何将页面重定向到主页?

时间:2015-07-03 17:36:55

标签: php mysql

我试图以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
}
}

5 个答案:

答案 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>