我正在为我的第一个php项目编写一个登录/注册系统,我在login.php中遇到了问题。这是我的login.php:
<?php
include("db.php");
session_start();
if(isset($_SESSION['login_user'])){
header("Location: welcome.php");
}
$error = '';
if (isset($_POST['submit'])) {
if (empty($_POST['username']) or empty($_POST['password'])) {
$error = "Please enter your login details";
} else {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = md5($_POST['password']);
$query = mysqli_prepare($conn, "SELECT password FROM workers WHERE user_name=?");
mysqli_stmt_bind_param($query,"s",$username);
mysqli_stmt_execute($query);
mysqli_stmt_bind_result($query,$pass);
if(mysqli_stmt_fetch($query)){
if ($password == $pass){
header('Location:welcome.php');
$_SESSION['login_user'] = $username;
}else {
$error = "You typed the wrong password";
unset($username, $password);
}
}else{
$error = "User Login doesn't exists";
unset($username,$password);
}
}
}
?>
问题是在输入现有的用户名/密码后,它只刷新页面而不是前往welcome.php。我检查了一个不正确的用户名/密码,它显示了预期的错误,所以我不认为问题是在MySQL查询中。如何找到代码问题并解释原因?
答案 0 :(得分:1)
发送标头后不应执行任何代码。
$_SESSION['login_user'] = $username;
header('Location:welcome.php');
exit();
好吧,并考虑好人们花时间发帖的那些评论;)
答案 1 :(得分:0)
I will suggest code like this
<?php
include("db.php");
session_start();
$error = '';
if(!isset($_SESSION['login_user'])){
if (isset($_POST['submit'])) {
if (empty($_POST['username']) or empty($_POST['password'])) {
$error = "Please enter your login details";
} else {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = md5($_POST['password']);
$query = mysqli_prepare($conn, "SELECT password FROM workers WHERE user_name=?");
mysqli_stmt_bind_param($query,"s",$username);
mysqli_stmt_execute($query);
mysqli_stmt_bind_result($query,$pass);
if(mysqli_stmt_fetch($query)){
if ($password == $pass){
header('Location:welcome.php');
$_SESSION['login_user'] = $username;
}else {
$error = "You typed the wrong password";
unset($username, $password);
}
}else{
$error = "User Login doesn't exists";
unset($username,$password);
}
}
}
}else
{
header("Location: welcome.php");
}
?>
In your heade function is used in top and when it check it always gives header location error.
Remove this by taking whole your code in !isset.