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

时间:2016-11-04 14:09:55

标签: javascript php

我在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.php

<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

来完成此操作

我希望你能帮助我。

谢谢。

4 个答案:

答案 0 :(得分:0)

您可以在登录页面上显示一条消息,方法是在标题本身上添加一个值,并在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&amp;关于如何更好地保护自己免受sql注入等问题的mysql Here是一个很好的起点。

答案 1 :(得分:0)

首先,当您已经header()输出时,您无法发送echo

其次,即使重定向有效,警报也不会显示,因为<script>不在login.php上。它不是神奇地存储在某个地方以便稍后出现。

答案 2 :(得分:0)

使用会话,您可以这样做

在html代码之前的 login.php 中添加此

<?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();,之后您可以检查会话

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");后重定向用户而不显示< strong> javascript警告

答案 3 :(得分:0)

好像其他人说有更好的方法可以做到这一点,但如果你仍然想要使用你的解决方案,那么这对你有用:

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

删除php标头重定向。