Не могу отправить данные в БД

Yan

Новичок
Добрый день! Пишу обработчик для формы, в которую пользователь вносит логин, пароль. Создаю запрос в БД для проверки существующего пароля, если такого нет, то вносим новые данные, все работает, запрос выглядит так:
Код:
$res=mysql_query("SELECT * FROM users WHERE pass=".$password); // users-таблица, pass-поле
Далее писал условие и если пароль совпадал, то данные не вносились, все работает ОК.
Но нужно еще проверить существует ли в базе такой логин (в БД поле name) и пароль, написал такую строку:
Код:
$res=mysql_query("SELECT * FROM users WHERE name=".$log." AND pass=".$password);
Но все это начало работать некорректно, потом я решил сделать только проверку логина и написал:
Код:
$res=mysql_query("SELECT * FROM users WHERE name=".$log);
Все дальнейшие условия начали игнорироваться, данные с одинаковым логином вносились, появилась ошибка
Код:
mysql_fetch_array() expects parameter 1 to be resource, boolean given
Поискал по форуму, нашел одну функцию, если пишу:
Код:
mysql_query($res) || die(mysql_error());
то на экране:
Код:
Query was empty
Если пишу:
Код:
mysql_query("select * from users WHERE name=".$log) || die(mysql_error());
то на экране:
Код:
Unknown column 'Логин' in 'where clause'
Почему так происходит, я ведь только заменил одно поле на другое и пароль на логин, должно же работать одинаково, правильно? Спасибо!

Вопрос закрыт! Решение: надо было переменную, в которой лежит новый логин, обрамить кавычками (таков синтаксис)
Код:
$res=mysql_query("SELECT * FROM users WHERE name='.$log'");
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Зачем проверять существует ли пароль? Нужно проверять на уникальность логин.

PS: Займись отладкой. Прочитай внимательно про то, как пишутся запросы и поймешь, что у тебя там нет кавычек. Нигде нет. Запросы дырявые.
 

Yan

Новичок
Зачем проверять существует ли пароль? Нужно проверять на уникальность логин.

PS: Займись отладкой. Прочитай внимательно про то, как пишутся запросы и поймешь, что у тебя там нет кавычек. Нигде нет. Запросы дырявые.
Я просто учился, на знаю почему начал с пароля, он проверяется, а логин с точно таким же синтаксисом нет. Хожу на курсы, это д/з, преподаватель не говорил, что нужно ставить кавычки, почитаю об этом обязательно. Но я не могу понять почему же тогда с таким же синтаксисом пароль проверяет, а логин нет, ведь я просто заменил a на b, разницы в работе не должно быть.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что за курсы? Почему если преподаватель не говорил, ты счет не нужным прочитать документацию? У тебя и пароль и логин не проверяет. Увы.

В твоем случае без кавычек у тебя выполняется запрос вида:
SELECT * FROM users WHERE name=login

Где login - значение переменной $log. И ты просишь БД выдать тебе всех у кого колонки name и login равны. А вот если ты напишешь WHERE name='login' это уже совсем другая история
 

Yan

Новичок
Что за курсы? Почему если преподаватель не говорил, ты счет не нужным прочитать документацию? У тебя и пароль и логин не проверяет. Увы.

В твоем случае без кавычек у тебя выполняется запрос вида:
SELECT * FROM users WHERE name=login

Где login - значение переменной $log. И ты просишь БД выдать тебе всех у кого колонки name и login равны. А вот если ты напишешь WHERE name='login' это уже совсем другая история
Компьютерная академия ШАГ. Ты прав, надо будет почитать документацию. Что-то не могу разобраться с кавычками. Я изменил имя поля name на log, т.к. name зарезервировано. Но у меня пароль проверяет:

Код:
if(isset($_REQUEST['submit'])&&isset($_REQUEST['reg']))
    {
        $log=htmlspecialchars(trim($_REQUEST['uname'])); // uname-имя поля формы для ввода логина
        $password=htmlspecialchars(trim($_REQUEST['upass'])); // upass-имя поля формы для ввода пароля
        $res=mysql_query("select * from users where pass=".$password); // pass-имя поля в таблице users
        $row=mysql_fetch_array($res,MYSQL_NUM);
        if(!empty($row))
        {
            echo "Введите другой пароль";
            echo "<br/><a href='http://localhost/yan/6answers/site2/index.php'>На Главную</a>";
        }
        else
        {
            $inc='insert into users(log,pass) values("'.$log.'","'.$password.'")';
            mysql_query($inc);
            echo "Поздравляем, вы зарегистрированы!";
            echo "<br/><a href='http://localhost/yan/6answers/site2/index.php'>На Главную</a>";
        }
    }
Вот так пароль проверяет, все нормально, если пароль такой есть в таблице, то данные не вносятся, если пароля такого нет, то вносятся.
А вот так логин не проверяет на уникальность, хотя толком не меняется ничего:
Код:
$res=mysql_query("select * from users where log=".$log);
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Еще раз повторяю по-русски. У тебя НЕ проверяет ни одного, ни другого. То, что ты видишь всего лишь частный случай бага, который ты по незнанию породил.

Забудь про htmlspecialchars, совершенно бесполезная функция в данном контексте.

Почему тут values("'.$log.'","'.$password.'")'; ты используешь двойные и одинарные кавычки, но упорно не хочешь их поставить везде, где надо?
 
  • Like
Реакции: Yan

Yan

Новичок
Еще раз повторяю по-русски. У тебя НЕ проверяет ни одного, ни другого. То, что ты видишь всего лишь частный случай бага, который ты по незнанию породил.

Забудь про htmlspecialchars, совершенно бесполезная функция в данном контексте.

Почему тут values("'.$log.'","'.$password.'")'; ты используешь двойные и одинарные кавычки, но упорно не хочешь их поставить везде, где надо?
Блин, точняк, решение элементарное:
$res=mysql_query("select * from users where log='$log'");
Запомню обязательно, спасибо!
Почему тут бесполезна функция htmlspecialchars? Люди ж могут запихнуть при регистрации в поле формы какой-то код?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Потому что записывать данные надо как есть, а выводить уже как раз с эскейпингом. Плюс почитай про SQL инъекции
 

fixxxer

К.О.
Партнер клуба
Если тебя такому научили на курсах, проси деньги назад и беги оттуда
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ты смело можешь написать заявление в полицию.
 

Фанат

oncle terrible
Команда форума
начни с http://www.phpfaq.ru/pdo и забудь про все эти кавычки, которым тебя научил ламер c0dex
В РНР коде, который выполняет запрос, никаких переменных ни в коем случае не должно быть
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
Я вот не понимаю, как можно после стольких лет на форуме писать одно, а думать, что человек будет делать другое, то что ему не написали.
Я понимаю, что ты хотел объяснить ему синтаксис SQL.
Но по факту у тебя получилось "Пиши, Вася, классический говнокод".
И тут уже тебе надо рекомендовать поаккуратнее. позориться с такими советами.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@Фанат я же не просто так написал про кавычки. Я блин думал ты поймешь, что я имел в виду то, что запрос то должен быть всегда валидным, его можно выполнить не только через PHP. Про использование плейсхолдеров я не могу не могласиться, что они нужны.
 
Сверху