0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31

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

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

Студворк — интернет-сервис помощи студентам
Добрый день!
Делаю голосование на сайте. Для этого 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2015, 23:44
Ответы с готовыми решениями:

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

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

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

10
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 00:49
Цитата Сообщение от 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  [ТС]
Вначале на экран появилось "Ок", но я заметил, что если я меняю код, то самый первый раз запросы работают как надо, а уже все следующие разы нет.
Вот он внес в таблицу строку, я ее удалил и когда попробовал снова, то опять на экране надпись 'Вы не можете проголосовать больше 1 раза <br>'
т.е. код даже не дошел до if с ошибками, а сразу переключился наверх и опять пошел построчно.

Может каким-то образом создаются неведомые мне куки, которые все путают? Самый первый раз при изменении кода все работает хорошо, а потом снова черти как.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 01:54
Цитата Сообщение от Ian_P Посмотреть сообщение
Может каким-то образом создаются неведомые мне куки, которые все путают? Самый первый раз при изменении кода все работает хорошо, а потом снова черти как.
куки тут не при чем
здесь сначала идет проверка на существование пользователя
далее если такого нет то создаем и Выводим ОК
все
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 02:14  [ТС]
далее если такого нет то создаем и Выводим ОК
Я понимаю, только это не работает, сработало один раз, когда изменил код, все остальные разы после первого клика по кнопке "голосовать" результат не меняется, т.е. все так же Ок не выводится, а код после запроса с insert начинается сверху, а не прекращается. Что-то заставляет код именно после запроса insert начинать движение сверху опять.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 02:30
Цитата Сообщение от Ian_P Посмотреть сообщение
сработало один раз, когда изменил код, все остальные разы после первого клика по кнопке "голосовать" результат не меняется, т.е
смею предположить так как в БД пользователь с таким ид существует или его в ручную удаляешь?
как формируется $this->player если после каждого нажатия там одна и та же переменная так и будет выводить сообщение что такой пользователь есть
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 02:56  [ТС]
Я удаляю эту строку вручную из phpmyadmin, а в $player лежит id пользователя. Но после того, как я вручную очистил таблицу, метод записывает id этого пользователя и снова проходится по коду, выводя сразу сообщение о том, что уже голосовать нельзя.
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
24.11.2015, 10:51
Ian_P, тогда выкладывайте полный код чтобы видеть как там все у вас организовано
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 14:07  [ТС]
Я все разделил на 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
Цитата Сообщение от Ian_P Посмотреть сообщение
$player=$_COOKIE['id'];
Цитата Сообщение от Ian_P Посмотреть сообщение
то пишет 1 вместо 0, т.е
так правильно куку создал но потом не уничтожил
0
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 31
24.11.2015, 15:03  [ТС]
Если я создаю объект, не передавая в конструктор этот 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2015, 15:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru