Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
1

Некорректно работает запрос в БД

23.11.2015, 23:44. Показов 500. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Делаю голосование на сайте. Для этого id проголосовавшего вношу в таблицу и проверяю есть ли оно там или нет, для того, чтобы разрешить голосование или нет.
Делаю в ООП. Вот код:
Создаю объект и вызываю метод:
PHP
1
2
$vaca=new Vote(0, $player, 0,0,0);
$vaca->insert_quantity();
Сам метод ($this->player это id пользователя, который хранится в переменной $player):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function insert_quantity(){
    Create::connect();
    $sel=mysql_query('SELECT * FROM quantity WHERE id_player='.$this->player);
    $c=mysql_num_rows($sel);
    if($c>0){
        echo 'Вы не можете проголосовать больше 1 раза <br>';
    }else{
        mysql_query('INSERT INTO quantity (id_player) VALUES ('.$this->player.')');
        if(mysql_error()){
            echo mysql_error().'<br>';
        }
        echo 'Ok';
    }
}
Проблема в том, что если в таблице "quantity" НЕТ записи с этим пользователем, то она создается, что и должно быть, но на экран выводится тут же сообщение 'Вы не можете проголосовать больше 1 раза', т.е. каким-то образом код не доходит до echo 'Ok', а снова начинается сверху, соответственно уже находит эту строку и выводит эту надпись.
Если же удалить INSERT запрос, а оставить только echo 'Ok', то при отсутствии записи, на экран выводится надпись 'Ok', что и должно быть.
Циклов никаких тут не использую, этот метод больше нигде не вызываю, объекта такого больше нигде нет. Я просидел с этим уже часов 5, помочь никто не может.
Код элементарный, но не работает как надо. Буду очень благодарен за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2015, 23:44
Ответы с готовыми решениями:

Запрос работает некорректно
У меня запрос: ВЫБРАТЬ ХозрасчетныйОстатки.Субконто1 КАК Контрагент, ...

Некорректно работает запрос
Таб=создатьобъект(&quot;Таблица&quot;); СпрС=создатьобъект(&quot;Справочник.Сотрудники&quot;);...

Запрос на SUM работает некорректно
SELECT Товары.Код, Товары., Sum(Продажи.Сумма) AS , Sum(Поставки.Цена) AS FROM (Товары INNER JOIN...

Некорректно работает Перекрестный запрос
Помогите плиз ламеру ) Есть таблицы: - Сервисы - информация по сервису - Сотрудники -...

10
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 00:49 2
Цитата Сообщение от Ian_P Посмотреть сообщение
if(mysql_error()){
* * * * * * echo mysql_error().'<br>';
* * * * }
* * * * echo 'Ok';
если заменить на
PHP
1
2
3
4
5
if(mysql_error()){
 echo mysql_error().'<br>';
} else {
 echo 'Ok';
}
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 01:11  [ТС] 3
Вначале на экран появилось "Ок", но я заметил, что если я меняю код, то самый первый раз запросы работают как надо, а уже все следующие разы нет.
Вот он внес в таблицу строку, я ее удалил и когда попробовал снова, то опять на экране надпись 'Вы не можете проголосовать больше 1 раза <br>'
т.е. код даже не дошел до if с ошибками, а сразу переключился наверх и опять пошел построчно.

Может каким-то образом создаются неведомые мне куки, которые все путают? Самый первый раз при изменении кода все работает хорошо, а потом снова черти как.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 01:54 4
Цитата Сообщение от Ian_P Посмотреть сообщение
Может каким-то образом создаются неведомые мне куки, которые все путают? Самый первый раз при изменении кода все работает хорошо, а потом снова черти как.
куки тут не при чем
здесь сначала идет проверка на существование пользователя
далее если такого нет то создаем и Выводим ОК
все
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 02:14  [ТС] 5
далее если такого нет то создаем и Выводим ОК
Я понимаю, только это не работает, сработало один раз, когда изменил код, все остальные разы после первого клика по кнопке "голосовать" результат не меняется, т.е. все так же Ок не выводится, а код после запроса с insert начинается сверху, а не прекращается. Что-то заставляет код именно после запроса insert начинать движение сверху опять.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 02:30 6
Цитата Сообщение от Ian_P Посмотреть сообщение
сработало один раз, когда изменил код, все остальные разы после первого клика по кнопке "голосовать" результат не меняется, т.е
смею предположить так как в БД пользователь с таким ид существует или его в ручную удаляешь?
как формируется $this->player если после каждого нажатия там одна и та же переменная так и будет выводить сообщение что такой пользователь есть
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 02:56  [ТС] 7
Я удаляю эту строку вручную из phpmyadmin, а в $player лежит id пользователя. Но после того, как я вручную очистил таблицу, метод записывает id этого пользователя и снова проходится по коду, выводя сразу сообщение о том, что уже голосовать нельзя.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 10:51 8
Ian_P, тогда выкладывайте полный код чтобы видеть как там все у вас организовано
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 14:07  [ТС] 9
Я все разделил на 2 метода, чтобы было правильнее. Несмотря на то, что стало 2 метода, создаю два разных объекта для вызова каждого из методов, но результат тот же.

Файл с объектами:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$player=$_COOKIE['id'];
$player=(integer) $player;
 
$vaca=new Vote(0, $player, 0,0,0);
$vaca->select_quantity();
$count=$vaca->count;
 
echo $count;
echo '<br>';
 
if($count==0){
    $cad=new Vote(0, $player, 0,0,0);
    $cad->insert_quantity();
}
Файл с классом:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function select_quantity(){
    Create::connect();
    $sel=mysql_query('SELECT * FROM quantity WHERE id_player='.$this->player);
    if(mysql_error()){
        echo mysql_error().'<br>';
    }
    $this->count=mysql_num_rows($sel);;
}
 
function insert_quantity(){
    Create::connect();
    mysql_query('INSERT INTO quantity (id_player) VALUES ('.$this->player.')');
    if(mysql_error()){
        echo mysql_error().'<br>';
    }
    echo 'Ok';  
}
Там, где я вывожу количество строк (echo $count), то пишет 1 вместо 0, т.е. первоначальный вывод отсутствия строк просто игнорируется, это для меня вообще загадка, ведь это уже происходит вне класса в другом файле, а работает точно так же. Потом исполняется конструкция if, потом метод с запросом insert и код перескакивает вверх, начиная все сначала.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 14:51 10
Цитата Сообщение от Ian_P Посмотреть сообщение
$player=$_COOKIE['id'];
Цитата Сообщение от Ian_P Посмотреть сообщение
то пишет 1 вместо 0, т.е
так правильно куку создал но потом не уничтожил
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 15:03  [ТС] 11
Если я создаю объект, не передавая в конструктор этот id из куки ($vaca=new Vote(0,0,0,0,0)), а в методах пишу просто так, то результат тот же:
PHP
1
$sel=mysql_query('SELECT * FROM quantity WHERE id_player=1');
PHP
1
mysql_query('INSERT INTO quantity (id_player) VALUES (1)');
Т.е. я тогда, допустим, хочу найти просто строку, в которой поле id_player равно 1,
считаю количество таких строк, соответственно нахожу их 0
и я на экране должен увидеть число 0, но этого числа просто нет
далее если это количество равно 0, что подходит по условию if, то вставляю строку и в поле id-player 1
на этом должно все закончится, но код снова прыгает вверх и ищет строку, в которой поле id-player равно 1,
уже находит такую строку и выводит мне количество этих строк 1, что есть правильно
Но все равно неправильный весь алгоритм, так не должно быть, к сожалению, ничего не поменялось
0
24.11.2015, 15:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2015, 15:03
Помогаю со студенческими работами здесь

Некорректно работает запрос к БД Access из Excel
Люди, буду очень признателен любому, кто поможет по следующему вопросу. Есть база в Access и...

Запрос по выводу статистики долгов работает некорректно
Всем привет! Стоит задача одним SQL запросом вывести должников со статистикой долгов по каждому:...

Добавил шлюз, но удалённый запрос работает некорректно.
сеть настроил вроде верно, но пропигновать не выходит

Некорректно работает запрос на выход из игры или ее повтор
вообщем в когда сыграешь предлагает еще раз,чтобы я не жал пишет ерор и опять спрашивает буду ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru