На данный момент я работаю над своим первым скриптом входа. В моем сценарии я пытаюсь подтвердить, существует ли имя пользователя, если пользователь активен, то, что является идентификатором пользователя, и если имя пользователя и пароль совпадают или нет. (См. Код ниже)Запрос не работает над скриптом входа
function sanitize($con, $data) {
return mysqli_real_escape_string($con, $data);
}
function user_exists($username, $con) {
$username = sanitize($con, $username);
$query = mysqli_query($con, "SELECT COUNT(*) FROM users WHERE username='$username'") or die (mysqli_error());
$result = mysqli_fetch_row($query);
return ($result[0] == 1) ? true : false;
}
function user_active($username, $con) {
$username = sanitize($con, $username);
$query = mysqli_query($con, "SELECT COUNT(*) FROM users WHERE username='$username' AND active=1") or die (mysqli_error());
$result = mysqli_fetch_row($query);
return ($result[0] == 1) ? true : false;
}
function user_id_from_username ($username, $con) {
$username = sanitize($con, $username);
$query = mysqli_query($con, "SELECT user_id FROM users WHERE username='$username'") or die (mysqli_error());
$result = mysqli_fetch_row($query);
return $result[0];
}
function login($username, $password, $con) {
$user_id = user_id_from_username($con, $username);
$username = sanitize($con, $username);
$password = md5($password);
$query = mysqli_query($con, "SELECT COUNT(*) FROM users WHERE username='$username' AND password='$password'") or die (mysqli_error());
$result = mysqli_fetch_row($query);
return ($result[0] == 1) ? true : false;
}
Я попытался подтвердить вывод правильных данных, написав приведенный ниже код.
if (user_exists('susievanveen', $con) === true) {
echo 'user exists';
}
else {
echo 'user doesn\'t exist';
}
if (user_active('susievanveen', $con) === true) {
echo ' and user is active.';
}
else {
echo ' and user is not active yet.<br><br>';
}
echo 'User ID = ', user_id_from_username($username='susievanveen', $con);
echo '<br>Active = ', user_active($username='susievanveen', $con);
echo '<br>Match found between username and password = ', login($username='susievanveen', $password='password', $con);
Я получаю правильные результаты о пользователе, независимо от того, активен он или нет, и это идентификатор пользователя. Но он не вернет никаких данных о том, соответствуют ли имя пользователя и пароль или нет. Так может кто-нибудь сказать мне, что не так с этим кодом?
Просто пара мыслей: в состоянии возврата: '$ результата [0] == 1', вы должен обязательно изменить его на '$ result [0] === 1' (обратите внимание на extra =). Кроме того, MD5 не подходит для хранения паролей. Кроме того, ваши вызовы функций в операторах echo должны быть просто: 'user_id_from_username ('susievanveen', $ con)', оставьте часть '$ username ='. –
Имеет ли пароль какие-либо символы, нуждающиеся в дезинфекции? это может быть беспорядок с паролем пользователя md5. –