Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Не могу отправить данные в БД
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
Добрый день! Пишу обработчик для формы, в которую пользователь вносит логин, пароль. Создаю запрос в БД для проверки существующего пароля, если такого нет, то вносим новые данные, все работает, запрос выглядит так:
$res=mysql_query("SELECT * FROM users WHERE pass=".$password);// users-таблица, pass-поле
Далее писал условие и если пароль совпадал, то данные не вносились, все работает ОК.
Но нужно еще проверить существует ли в базе такой логин (в БД поле name) и пароль, написал такую строку:
echo'Пользователь с таким логином уже зарегистрирован';
}
Я вообще ничего не понял в этом коде, но исправил на свои данные таким образом:
$dsn = 'mysql:yan=testdb;host=127.0.0.1'; // yan-имя БД
$log=htmlspecialchars(trim($_REQUEST['uname'])); // uname-имя формы логина
$password=htmlspecialchars(trim($_REQUEST['upass'])); // upass-имя формы пароля
$pdo = new \PDO($dsn, $log, $password);
$stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` = :login");
$stmt->execute(array('login' => $login));
$res = $stmt->fetch();
if ($res) {
echo 'Пользователь с таким логином уже зарегистрирован';
}
Показало три строчки какой-то ошибки, что проблема в строке $pdo = new \PDO($dsn, $log, $password);
Или я вообще что-то не то сделал?
DelphinPRO
Отправлено: 06 Августа, 2015 - 20:48:34
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Это данные для подключения к БД (форма тут не при чем)
Спасибо вам, что откликнулись! У меня была функция для подключения к БД, она хранится в другом файле, но у меня как-то все по-другому пишется.
Я знаю, что пароль не нужно проверять, а именно логин, не знаю почему решил проверить пароль, просто думал, что разницы никакой, поменять местами потом и все. Но оказалось, что я при проверке пароля видимо создал ошибку, но которую, наверное, php не видел и проверял так. А решение элементарное оказалось, просто надо было переменную, в которой новый логин, обрамить одинарными кавычками и все (я не полностью знал синтаксис запроса):
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Использование функций mysql_* ваша ошибка. Они сильно устарели и уже удалены из последней версии PHP
Именно ваша ошибка была не в php, а в sql синтаксисе. Я намерено об этом умолчал.
При использовании PDO, а именно параметризированных запросов (как в моем примере), подобной ошибки бы не возникло, и кроме того, защитило бы ваш код от sql-инъекций.
----- Чем больше узнаю, тем больше я не знаю.
Yan9
Отправлено: 06 Августа, 2015 - 22:28:57
Новичок
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
DelphinPRO пишет:
Использование функций mysql_* ваша ошибка. Они сильно устарели и уже удалены из последней версии PHP
Именно ваша ошибка была не в php, а в sql синтаксисе. Я намерено об этом умолчал.
При использовании PDO, а именно параметризированных запросов (как в моем примере), подобной ошибки бы не возникло, и кроме того, защитило бы ваш код от sql-инъекций.
Можете, пожалуйста, подсказать хорошие ресурсы, где об этом можно подробно почитать? Я хожу на курсы по php и этот обработчик был частью д/з. То, о чем вы написали, нам преподаватель не говорил ни слова.
DelphinPRO
Отправлено: 06 Августа, 2015 - 23:45:33
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Yan9 пишет:
Я хожу на курсы по php и этот обработчик был частью д/з.
Охренеть... Что за курсы такие... Попробуйте у преподавателя курсов поинтересоваться, слышал ли он что-нибудь о PDO
----- Чем больше узнаю, тем больше я не знаю.
Yan9
Отправлено: 07 Августа, 2015 - 00:12:49
Новичок
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
DelphinPRO пишет:
Yan9 пишет:
Я хожу на курсы по php и этот обработчик был частью д/з.
Охренеть... Что за курсы такие... Попробуйте у преподавателя курсов поинтересоваться, слышал ли он что-нибудь о PDO
Уже за сегодня не только от вас слышу о PDO, похоже знания, которые мне даются, отсталые, жаль(
Обязательно об этом спрошу
Курсы в компьютерной академии ШАГ
DelphinPRO
Отправлено: 07 Августа, 2015 - 01:55:18
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Yan9 пишет:
похоже знания, которые мне даются, отсталые
ага, лет на 10, если не больше.
В принципе базовые принципы работы с БД вы конечно уясните. Главное не зациклится на том, на чем вам дают эти базовые знания, и продолжить изучать современные методики.
----- Чем больше узнаю, тем больше я не знаю.
Yan9
Отправлено: 07 Августа, 2015 - 13:18:12
Новичок
Покинул форум
Сообщений всего: 41
Дата рег-ции: Авг. 2015
Помог: 0 раз(а)
DelphinPRO пишет:
Yan9 пишет:
похоже знания, которые мне даются, отсталые
ага, лет на 10, если не больше.
В принципе базовые принципы работы с БД вы конечно уясните. Главное не зациклится на том, на чем вам дают эти базовые знания, и продолжить изучать современные методики.
Да, уже почитал про sql инъекции, про PDО, хорошая штука, не понимаю почему нам это не преподавать. Нам действительно там дают лишь самую базу. Спасибо за помощь!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.