当登录有效时重定向到另一个页面,否则停留在同一页面上


Redirecting to another page when login is valid, otherwise stay on the same page

我对PHP编程相当陌生,仍然在熟悉方法和语法。目前,我对session还不了解。

我希望用户在表单上输入不正确的登录详细信息时获得"用户不存在或不正确的登录详细信息"的消息。否则,将用户重定向到下一页

我尝试使用PHP的header()方法,但当我把它放在alert()消息行之后,我的alert()消息甚至没有显示。

nextpage.php

<?php
  if(isset($_POST['btnLogin'])){
    $con = mysqli_connect("localhost","root","","myDb")or die("cannot connect");
    if(!$con){
      die("Connection failed: " . mysqli_connect_errno() );
    }
    $studentNo = $_POST['studentNo'];
    $username = $_POST['userName'];
    $password = $_POST['password'];
    $selectQuery = "SELECT * FROM registered WHERE student_no = '$studentNo' AND username = '$username' AND password = '$password' ";
    $result = mysqli_query($con,$selectQuery);
    if(mysqli_num_rows($result) == 0){
      echo '<script language="javascript">';
      echo 'alert("User doesn''t exist or incorrect login details")';
      echo '</script>';
      header("Location: login.php"); //take user back to login.php if user doesn't exist
    }else{
      //do this if user exists
      //get Parameters for studentNo, userName, password
    }
  }
 ?>

login。

<form action="nextpage.php" method="POST">
    <label>Student No</label>
    <input type="text" name="studentNo" placeholder="Student No" required />
    <br />
    <label>Username</label>
    <input type="text" name="userName"  placeholder="Username" required />
    <br />
    <label>Password</label>
    <input type="password" name="password"  placeholder="Password" required />
    <br />
    <button type="submit" name="btnLogin">Login</button>
</form>

header()将用户带回到login.php,但它不显示消息

有没有其他更好的方法来做我想做的事?在重定向到第二页之前,先验证登录详细信息。否则,不要重定向。

我研究并发现我可以通过<form>或其他javascript语法发布数据。我更愿意学习如何使用普通phphtml

我希望你能帮助我。

谢谢。

您可以通过在标题本身添加值并在login.php中添加if语句来在登录页面本身显示消息。

例如,将标题更改为header("Location: login.php?error=1");

在你的login.php文件中,添加这个

if(isset($_GET['error']) && $_GET['error'] == "1") { echo '<div class="alert alert-danger">Login failed</div> }

编辑:看到CD001的评论,我建议阅读php &Mysql关于如何更好地保护自己免受SQL注入等。

首先,当你已经有echo 'ed输出时,你不能发送header()

其次,警报永远不会显示,即使重定向可以工作,因为<script>不在login.php上。它不会神奇地存储在某个地方以便稍后显示。

使用session你可以这样做

在你的login.php html代码之前放这个

<?php
session_start();
?>

这将启动会话。当用户提交表单时,在nextpage.php中,首先您需要再次将session_start();放在脚本的顶部,在进行用户身份验证之后,您可以像这样设置会话

if(mysqli_num_rows($result) == 0){
    header("Location: login.php?error=User doesnot exists"); //take user back to login.php if user doesn't exist
}else{
    //do this if user exists
    //get Parameters for studentNo, userName, password
    $_SESSION['user_id'] = '<userId>';
    //..
    header("Location: <secure_page>");
}

在你重定向用户的secure_page中,在php脚本中同样在脚本的顶部放置session_start();然后你可以检查session

if (!isset($_SESSION['user_id']) || $_SESSION['user_id'] != "") {
    header("Location: login.php?error=access denied");
}

这将确保未经身份验证的用户无法访问此页面。

关于不显示警告的问题

在你使用javascript代码的脚本中,你需要添加类型。

echo '<script type="text/javascript" language="javascript">';

代码的另一个问题是javascript只会在你的页面加载后执行,但在响应所有这些之后,你使用header("location:login.php");将重定向用户而不显示javascript警告

就像其他人说的那样,有更好的方法来做到这一点,但是如果你仍然想要使用你的解决方案,那么这将为你工作:

echo '<script language="javascript">';
echo 'alert("User doesnt exist or incorrect login details");';
echo 'location.href="http://www.yoursite.com/login.php";';
echo '</script>';