Я пытаюсь сделать систему регистрации / входа. Чтобы проверить, не используются ли имена пользователей и адреса электронной почты, я использую это:
$username = $_POST['uLogin'];
$usernameLC = strtolower($username);
$query1 = $db0->query("SELECT userLogin FROM tbuser WHERE userLogin=':login';");
$query1->bindValue(":login", $usernameLC, PDO::PARAM_STR);
Но это не работает. Я могу создать столько пользователей с тем же именем пользователя, сколько захочу. Кроме того, он также не позволяет мне подключаться к веб-сайту, поскольку он не привязывает значения или что-либо еще, поэтому он не может сравнивать мое имя пользователя с именем в БД.
Проверка, если имя пользователя не используется, когда я использовал его, как это
$username = $_POST['uLogin'];
$usernameLC = strtolower($username);
$query1 = $db0->query("SELECT userLogin FROM tbuser WHERE userLogin='$usernameLC';");
Но это не правильный путь: /
Кто-нибудь может помочь? 🙂
Прежде всего, если вы собираетесь подготовиться, используйте ->prepare()
и удалите кавычки в ваших именованных заполнителях, они не должны иметь это:
$query1 = $db0->prepare("SELECT userLogin FROM tbuser WHERE userLogin= :login");
затем $query1->execute()
, подготовленное заявление после привязки, итого всего:
$username = $_POST['uLogin'];
$usernameLC = strtolower($username);
$query1 = $db0->prepare('SELECT userLogin FROM tbuser WHERE userLogin = :login'); // prepare
$query1->bindValue(':login', $usernameLC, PDO::PARAM_STR); // bind
$query1->execute(); // execute
Они не работают, потому что ваши связанные значения содержат кавычки; удалить их.
userLogin=':login'
как
userLogin=:login
«Проверка, если имя пользователя не работает, когда я использовал его, как это»
WHERE userLogin='$usernameLC'
С помощью setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
сигнализировал бы об ошибках синтаксиса.
Узнайте, как использовать подготовленные операторы в PDO, чтобы подготовить и выполнить:
Понимание:
Убедитесь, что вы действительно используете соединение PDO, а не mysqli
на основе (неизвестно). Я часто вижу подобные вопросы, где используются ОП mysqli_
связаться с и запросить с PDO.
Эти разные API MySQL не смешиваются друг с другом.
Если вы используете mysqli_
Чтобы связаться с:
добавлять Отчет об ошибках в начало ваших файлов, которые помогут найти ошибки, если таковые имеются в отношении ваших массивов POST, или другие возможные ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.
Редактировать:
«Спасибо, это прекрасно работает. Хотя при входе в систему сравнение отправленного пароля с паролем в БД возвращает false. Я пытаюсь сохранить полученный пароль в $ _SESSION [‘test’], чтобы увидеть, что он получает, и print_r ($ _ SESSION); возвращает; мне это: Array ([test] => Array ([userPwd] => test12 [0] => test12)) (test12 — мой пароль, userPwd — поле пароля в БД) Есть идеи? ^^ «
Что касается комментария, который вы оставили об использовании паролей.
Кажется, вы храните пароли в виде простого текста, а не хеша. Это крайне не рекомендуется, а также хранится в сессиях; очень плохая идея.
Смотрите это Q&А на стеке по хешированным паролям:
Использование PHP password_hash()
функция и password_verify()
функция.
Для PHP < 5.5 использовать password_hash() compatibility pack
.
Примечание о типе и длине столбца при хранении хешированного пароля.
VARCHAR
,VARCHAR(255)
лучший.