Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с true и false

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
razorg1991
Отправлено: 13 Сентября, 2014 - 22:33:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Пишу проверку существования имени в БД

PHP:
скопировать код в буфер обмена
  1.  
  2. class DataBase {
  3. static function existenceNameListProducts($namelist) {
  4.         try{
  5.             $db = new PDO("sqlite:database/database.db");
  6.             $sql = 'SELECT namelist FROM searchlist';
  7.             $st = $db->query($sql);
  8.             $st->setFetchMode(PDO::FETCH_ASSOC);
  9.             while($row = $st->fetch()) {
  10.                 $name = $row['namelist'];
  11.                 if($name == $namelist) {
  12.                     echo 'Такое имя уже существует!';
  13.                     return true;
  14.                     break;
  15.                 }
  16.                 else {
  17.                     return false;
  18.                 }
  19.             }
  20.         }
  21.         catch(PDOException $e) {  
  22.                 echo $e->getMessage();  
  23.             }
  24.        }
  25. }
  26.  


Собственно сама проверка

PHP:
скопировать код в буфер обмена
  1.  
  2. if(DataBase::existenceNameListProducts($namelist) == false ) {
  3.             DataBase::insertListProducts($namelist, $checklistproduct, $datetime);
  4.         }
  5.  


Проблема в том, что к примеру существует уже имя "name", и при DataBase::existenceNameListProducts($namelist) == false или true неважно, всегда выполняется DataBase::insertListProducts($namelist, $checklistproduct, $datetime);
Почему? Где я накосячил?
 
 Top
OrmaJever Модератор
Отправлено: 13 Сентября, 2014 - 22:47:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




а вы попробуйте написать
PHP:
скопировать код в буфер обмена
  1. var_dump( DataBase::existenceNameListProducts($namelist) );

и посмотреть что там


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
teddy
Отправлено: 13 Сентября, 2014 - 22:52:38
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




razorg1991 пишет:
при DataBase::existenceNameListProducts($namelist) == false или true неважно, всегда выполняется DataBase::insertListProducts($namelist, $checklistproduct, $datetime);

Бред. Смотрите внимательнее.

Дополнительно:

1. Выводить результат из функции не самое лучшее решение(я про echo).
2. break после return не имеет смысла потому как return и так прервет выполнение цикла
3. Цикл тут даже и не нужен. Можно сделать что то типа SELECT `column` FROM `table` WHERE `column` = :some_param и если запись нашлась значит true иначе false

Плюс ко всему зачем создавать объект PDO в методе с выборкой? Получается в каждом методе который будет как то работать с БД Вы будете создавать каждый раз новый объект PDO?
(Добавление)
Я даже подскажу в чем проблема. Вы выбираете ВСЕ записи в таблице и начинаете цикл. В есть цикле условие if($name == $namelist)else{return false;l}

Так вот, на первой же итерации совпадений не бывает(у Вас же записей в более чем одна) и выполнение кода переходит в else, а там сразу возвращается false напрочь убивая цикл. Поэтому условие всегда выполняется.

(Отредактировано автором: 13 Сентября, 2014 - 22:53:44)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB