如何在php登录页面中使用多个标题

时间:2017-10-15 13:59:45

标签: php laravel http backend

以下是我在php中的登录页面代码。

<?php
session_start();

if($_SERVER["REQUEST_METHOD"] == "POST") {
  // username and password sent from form 

  $myusername = $_POST['username'];
  $mypassword = $_POST['password']; 
  $f_password = md5($mypassword);

  $sql = "SELECT id,user_name FROM users WHERE user_name = '$myusername' and password = '$f_password'";
  $result = mysqli_query($db,$sql);
  $row = mysqli_fetch_assoc($result);

  $count = mysqli_num_rows($result);

  // If result matched $myusername and $mypassword, table row must be 1 row

  if($count == 1) {
      $_SESSION['us_name'] = $row['user_name'];
      header("Location: /main-page.php");
  }else {
     $error = "<script>alert('Incorrect Credentials.Please login again');</script>";
     echo $error;
  }
}
?>

当我在else块中使用另一个头时,它会抛出一些错误。 但我希望用户在输入错误的凭据时重定向到相同的登录页面。 我怎么能在PHP中做到这一点? 请不要告诉我使用js方法window.location。

1 个答案:

答案 0 :(得分:0)

首先回答你的问题:我认为错误来自发送数据 - 你在else块中执行的echo - 然后尝试添加标题。您必须在发送第一个数据之前发送所有标题,其中包括使用echo打印内容。

如果您将header()行放在else块的开头,并且确保之前没有其他输出(例如使用var_dump()),则您的问题应该消失。

此外,您的脚本中存在许多安全问题:

  • 您使用md5()对高度不安全的密码进行编码。现代php有一个函数password_hash()(自PHP 5.5起可用),您应该使用
  • 使用您的用户名和密码而不过滤输入。这将打开SQL注入,因为它们在SQL查询中以不安全的方式重用。您应该查看预备语句或至少过滤并引用用户输入

另一个问题与您需要标题的原因有关:如果您想重定向到登录页面,为什么页面上有<script> - 代码段?更改位置时无论如何都不会生效,对吗?

最后一个问题,你的问题标有laravel。所以我很好奇你为什么不使用Authentication mechanism而不是?{/ p>