stasuss
24.06.2011 - 15:29
$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
24.06.2011 - 15:33
Цитата (stasuss @ 24.06.2011 - 14:29) |
if (!$res) { |
Что же ты делаешь?
Ты проверяешь переменную в ложь :blink:
Ну она же создана, и имеет какое-то значение. Ведь
mysql_num_rows выполняется, и возвращает количество записей.
Попробуй так
if ($res == 0)
neadekvat
24.06.2011 - 15:36
Цитата (PHPprogramer @ 24.06.2011 - 15:33) |
Ну она же создана, и имеет какое-то значение. |
Да, например, ноль. А ноль в php это ложь. С точки зрения php здесь все верно и вполне работоспособно. Я, конечно, за твой метод, т.к. он способствует более легкому и быстрому пониманию кода.
stasuss
24.06.2011 - 15:38
ой... это я сейчас просто переписывал все с нуля везде и видать от расстройства накосячил... не в этом дело... я уже как только не делал.. проблема в том что КАК ТО выполняется строчка из одной ветки if а потом из другой... мне приходит ответ о том что юзер существует, но запись в то же время может и добавиться если ее нет в таблице...
напишу более подробно в чем дело получается.. после проверки $res он добавляет запись, а потом выполняет exit("exists=true) из ветки else. вот в чем фигня то вся... или может я в логике пхп не силен... я только начал на нем писать...
Winston
24.06.2011 - 15:53
Цитата (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
24.06.2011 - 15:56
PHPProgrammer, извиняюсь но не понял фишку... а как же проверить есть ли значение в таблице и добавить его если оно есть или отправить ответ о том что оно уже есть... я для флеша это все делаю.. так что страница поидее не перезагружается... данные то у меня флешка один раз принимает... или я таки не врубаюсь в логику пхп?((((((
сейчас вот в флешке впорядке тестирования есть возможность нажать четыре кнопки.. при нажатии на них отправляются запросы вида name=test1&pass=1234 и до name=test4&pass=1234. какое ж тут еще условие в скрпит добавить? в данном случае я хочу что бы скрипт, получая эти переменные, либо добавлял запись и отвечал о том что бодавил, либо отвечал что запись существует... если туплю, то напишите понятнее) я в пхп нуб)
killer8080
24.06.2011 - 17:28
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
24.06.2011 - 17:32
не фильтруется.. а что это дает? htmlspecialchars это не тоже самое?
а еще объясните пожалуста есть ли разница между print и echo
killer8080
24.06.2011 - 17:43
Цитата (stasuss @ 24.06.2011 - 16:32) |
не фильтруется.. а что это дает? htmlspecialchars это не тоже самое? |
фильтровать нужно обязательно, иначе это потенциальная mysql инъекция! А htmlspecialchars имеет другое назначение. Кстати нужно ещё учитывать "волшебные кавычки", часто у хостеров они бывают включены.
Цитата (stasuss @ 24.06.2011 - 16:32) |
а еще объясните пожалуста есть ли разница между print и echo |
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.