繁体   English   中英

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

[英]how redirect page to home page if there is no error?

我正在尝试在 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
}
}

使用header进行重定向(确保在此之前不要输出/打印/回显某些内容)。
将此添加到您的else if条件中(您正在检查有效的用户名和密码)-

} else if ($uname == $dbuser && $password == $dbpassword) {
//...All your session assignments
header("Location: home.php");
}
if (status == 1){ //or whatever stands for logged in
    header( 'Location: http://www.yoursite.com/new_page.html' ) ;
}

您的代码中实际上没有“重定向”。 当您发送表单时,它只是打开页面“login.php”,仅此而已。 如果要在登录成功时添加重定向,只需添加

  header('Location: index.php');

  $_SESSION['username'] = $uname;

这是一个可以让您的页面更好地运行并纠正安全问题的答案。

<?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. 您应该在同一个数据库调用中检查状态和密码。
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功能时收到警告的原因。

请记住,header() 必须在发送任何实际输出之前调用,无论是通过普通的 HTML 标记、文件中的空行还是来自 PHP。 使用 include 或 require 函数或其他文件访问函数读取代码,并且在调用 header() 之前输出空格或空行,这是一个非常常见的错误。 使用单个 PHP/HTML 文件时存在同样的问题。

<?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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM