По какой-то причине этот запрос выполняется с учетом регистра:
$stmt = $db->prepare("SELECT * FROM people WHERE email = :email LIMIT 1");
Он просто возвращает, нашел ли он пользователя:
$stmt->bindParam(':email', $email);
$stmt->execute();
$row = $stmt->fetch();
if($row['email'] == $email)
{
return "<span style='color: red;'>User found.</span><br>";
} else {
return "<span style='color: red;'>User not found.</span><br>";
}
(Кстати, это всего лишь постановка. Будет хэширование пароля, как только я увижу, что это работает должным образом).
Он не находит пользователя проблем, если я использую тот же случай, что и запись в базе данных.
Вот моя таблица, так что вы можете видеть, что она определена как ci:
Это на самом деле существующий сайт, который я создал, когда я мало что знал о php, поэтому я полностью переписываю и настраиваю правильное хеширование паролей и https. Все это работало нормально, прежде чем я написал новую функцию, и ничего в базе данных не изменилось …
Так что сейчас он проверяет только введенную электронную почту, просто чтобы убедиться, что запрос работает, и мы получаем результаты из базы данных, позже мы проверим пароль и добавим фактическую функциональность входа в систему.
Вот данные в базе данных:
Теперь, если я ввожу свое имя пользователя как «chris» и запускаю функцию, он возвращает «User Found», так что я знаю, что запрос был успешным. Однако, если я укажу «Крис», он вернет «Пользователь не найден», поэтому я знаю, что это не удалось.
Нашел проблему, хотя. Опубликовано как ответ.
Вопрос с:
if($row['email'] == $email)
Сравнение строк «==» чувствительно к регистру. Лучший способ сделать это — использовать:
if(!empty($row['email']))
Если $ row [’email’] не пусто, то запрос вернул результат и был успешным, иначе запрос не удался, что было бы вызвано использованием адреса электронной почты, который не совпадает ни с одним в базе данных.
Чтобы сделать сравнение строк нечувствительным, требуется один из трех подходов
Используйте ниже (это повлияет на производительность)
$stmt = $db->prepare("SELECT * FROM people WHERE LOWER(email) = LOWER(:email) LIMIT 1");
Другой способ заключается в использовании сопоставления
И способ, которым я пользуюсь, заключается в том, что для начала я сохраняю электронную почту в нижнем регистре и преобразую строку поиска в нижнюю перед выполнением поиска.