По какой-то причине этот кусок кода …
if(empty($_POST) === false) {
#$username = htmlentities(mysqli_real_escape_string($conn, $_POST['username']));
#$password = htmlentities(mysqli_real_escape_string($conn, $_POST['password']));
$username = $_POST['username'];
$password = $_POST['password'];
if(empty($username) === true || empty($password) === true) {
$errors[] = 'You need to enter a username and a password';
} else if (user_exists($username) === false) {
# code...
$errors[] = 'We can\'t find that username. Have you registered?';
} else {
$login = login($username,$password);
if($login === false) {
$errors[] = 'That username/password combination is incorrect.';
} else {
die($login);
$_SESSION['user_id'] = $login;
header('Location: index.php');
exit();
}
}
output_errors($errors);
}
А вот и функции … Не уверен, что именно здесь происходит, чтобы это не было правдой. Конечно, я узнаю о mysqli_*
Расширения все же, но логика имеет смысл для меня. Это просто странно.
function user_id_from_username($username) {
$conn = mysqli_connect("127.0.0.1","root","","lr");
$username = sanitize($username);
return mysqli_data_seek(mysqli_query($conn, "SELECT `id` FROM `users` WHERE `username` = '$username'"), 0);
mysqli_close($conn);
}
function login($username,$password) {
$conn = mysqli_connect("127.0.0.1","root","","lr");
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = md5($password);
return (mysqli_data_seek(mysqli_query($conn,"SELECT COUNT(`id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $user_id : false;
#return (mysqli_query($conn,"SELECT count('id') FROM users WHERE username = '$username' AND password = '$password'") === 1) ? $user_id : false;
}
Mysqli_data_seek возвращает правда или ложь и устанавливает указатель на ресурс результата mysql на желаемое смещение.
Обратитесь к руководству по PHP о том, как использовать эти функции.
Других решений пока нет …