[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: странное поведение при проверке наличия записи
stasuss
$res = mysql_num_rows(mysql_query("SELECT * FROM users WHERE name='".$name."'"));
if (!$res) {
$add = mysql_query("INSERT INTO users (name, pass) VALUES ('".$name."', '".$pass."')") or die("Invalid query: " . mysql_error());
if ($add){
exit ("new=true");
}else{
exit ("add=error");
}
}
else{
exit ("exits=true");
}


вот такой скрипт дал мне нормальный ответ при попытке добавить запись только один раз. т.е. я из своего флеш приложения сделал четыре запроса на регистрацию и получил сначала четыре ответа о добавлении нового юзера, а потом получил ответа о том что юзера существуют. после этого уже второй день ломаю голову почему при пустой таблице мне в любом случае приходит ответ о существующем юзере, но запись добавляется, если ее на самом деле нет.. на форуме по флешразаботке сказали что скорее всего проблема в скрипте пхп. проверял в браузере, ситуация та же, только первый раз ответы правильные приходят. тестирую все на домашнем денвере с апачем 2.2.4 и пхп 5.2.12. может какой то кеш запросов включен где то? подскажите пожалуйста... голову уже сломал себе... :unsure:
Winston
Цитата (stasuss @ 24.06.2011 - 14:29)
if (!$res) {

Что же ты делаешь?
Ты проверяешь переменную в ложь :blink:
Ну она же создана, и имеет какое-то значение. Ведь mysql_num_rows выполняется, и возвращает количество записей.
Попробуй так
if ($res == 0) 
neadekvat
Цитата (PHPprogramer @ 24.06.2011 - 15:33)
Ну она же создана, и имеет какое-то значение.

Да, например, ноль. А ноль в php это ложь. С точки зрения php здесь все верно и вполне работоспособно. Я, конечно, за твой метод, т.к. он способствует более легкому и быстрому пониманию кода.
stasuss
ой... это я сейчас просто переписывал все с нуля везде и видать от расстройства накосячил... не в этом дело... я уже как только не делал.. проблема в том что КАК ТО выполняется строчка из одной ветки if а потом из другой... мне приходит ответ о том что юзер существует, но запись в то же время может и добавиться если ее нет в таблице...

напишу более подробно в чем дело получается.. после проверки $res он добавляет запись, а потом выполняет exit("exists=true) из ветки else. вот в чем фигня то вся... или может я в логике пхп не силен... я только начал на нем писать...
Winston
Цитата (stasuss @ 24.06.2011 - 14:38)
а потом выполняет exit("exists=true) из ветки else. вот в чем фигня то вся...

Все верно. Запись добавилась страница перезагрузилась, и проверяет то значение которое добавила.

Проверяй и добавляй запись по какому-то событию
Свернутый текст
if(//нажата_кнопка){
$res = mysql_num_rows(mysql_query("SELECT * FROM users WHERE name='".$name."'"));
if ($res == 0) {
$add = mysql_query("INSERT INTO users (name, pass) VALUES ('".$name."', '".$pass."')") or die("Invalid query: " . mysql_error());
if ($add){
exit ("new=true");
}else{
exit ("add=error");
}
}
else{
exit ("exits=true");
}
}

stasuss
PHPProgrammer, извиняюсь но не понял фишку... а как же проверить есть ли значение в таблице и добавить его если оно есть или отправить ответ о том что оно уже есть... я для флеша это все делаю.. так что страница поидее не перезагружается... данные то у меня флешка один раз принимает... или я таки не врубаюсь в логику пхп?((((((

сейчас вот в флешке впорядке тестирования есть возможность нажать четыре кнопки.. при нажатии на них отправляются запросы вида name=test1&pass=1234 и до name=test4&pass=1234. какое ж тут еще условие в скрпит добавить? в данном случае я хочу что бы скрипт, получая эти переменные, либо добавлял запись и отвечал о том что бодавил, либо отвечал что запись существует... если туплю, то напишите понятнее) я в пхп нуб)
killer8080
stasuss
ну ошибок в коде вроде нет, должно работать. Наверно косяк во флеше.
Кстати код можно сократить откинув ненужное
$res = mysql_num_rows(mysql_query("SELECT * FROM users WHERE name='".$name."'"));
if($res == 0){
mysql_query("INSERT INTO users (name, pass) VALUES ('".$name."', '".$pass."')") or die("Invalid query: " . mysql_error());
exit ("new=true");
}
exit("exits=true");

PS а переменная $name фильтруется через mysql_real_escape_string?
stasuss
не фильтруется.. а что это дает? htmlspecialchars это не тоже самое?

а еще объясните пожалуста есть ли разница между print и echo
killer8080
Цитата (stasuss @ 24.06.2011 - 16:32)
не фильтруется.. а что это дает? htmlspecialchars это не тоже самое?

фильтровать нужно обязательно, иначе это потенциальная mysql инъекция! А htmlspecialchars имеет другое назначение. Кстати нужно ещё учитывать "волшебные кавычки", часто у хостеров они бывают включены.
Цитата (stasuss @ 24.06.2011 - 16:32)
а еще объясните пожалуста есть ли разница между print и echo

читай мануал
print echo
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.