以下是我在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。
答案 0 :(得分:0)
首先回答你的问题:我认为错误来自发送数据 - 你在else块中执行的echo
- 然后尝试添加标题。您必须在发送第一个数据之前发送所有标题,其中包括使用echo
打印内容。
如果您将header()
行放在else块的开头,并且确保之前没有其他输出(例如使用var_dump()
),则您的问题应该消失。
此外,您的脚本中存在许多安全问题:
md5()
对高度不安全的密码进行编码。现代php有一个函数password_hash()
(自PHP 5.5起可用),您应该使用另一个问题与您需要标题的原因有关:如果您想重定向到登录页面,为什么页面上有<script>
- 代码段?更改位置时无论如何都不会生效,对吗?
最后一个问题,你的问题标有laravel。所以我很好奇你为什么不使用Authentication mechanism而不是?{/ p>