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 :: Не стандартная задача

 PHP.SU

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


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

> Описание: не работает if
77_well
Отправлено: 17 Декабря, 2013 - 19:00:54
Post Id



Новичок


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


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

[+]


у меня есть класс для работы с БД, в нем есть метод: getField //метод возвращает, к примеру, пароль зная логин, вот описание метода:
PHP:
скопировать код в буфер обмена
  1. public function getField($table_name, $field_out, $field_in, $value_in){//метод возвращает, к примеру, пароль зная логин
  2.                                                                                                                 //$field_out - какое поле надо вернуть
  3.                                                                                                                 //$field_in - поле которое нам известно(должно быть уникальным)
  4.                                                                                                                 //$value_in - значение известного поля($field_in)
  5.                         $date = $this->select($table_name, array($field_out), "`$field_in`='".addslashes($value_in)."'");
  6.                         if (count($data) != 1) return false;//если выборка дала больше одного заначения возвращаем ошибку
  7.                                                                                                 //НЕ ПРОХОДИТ ПРОВЕРКА
  8.                         return $date[0][$field_out];
  9.                 }

в этом методе не правильно работает строка
этот метод используется другим методом этого же класса, вот описание:
PHP:
скопировать код в буфер обмена
  1. public function getFieldOnID($table_name, $id, $field_out){//метод возвращает значение поля зная поле id
  2.                                                                                                         //$id - id поля
  3.                                                                                                         //$field_out - поле которое надо получить
  4.                         if (!$this->existsID($table_name, $id)) return false;//проверяем существует вообще данное id
  5.                         return $this->getField($table_name, $field_out, "id", $id);//"id"-что ищем $id-значение
  6.                 }

метод select отрабатывает хорошо, он отвечает за выборку

дальше у меня абстрактный класс GlobalClass и в нем метод который использует getFieldOnID вот метод от туда:
PHP:
скопировать код в буфер обмена
  1. protected function getFieldOnID($id, $field){//метод возвращает значение поля зная поле id
  2.                                                                                                                 //$id - id поля
  3.                                                                                                                 //$field - имя поля которое надо получить
  4.                         return $this->db->getFieldOnID($this->table_name, $id, $field);
  5.                 }

дальше идет класс наследник, от абстрактного GlobalClass, класс Article созданы методы get и set для всех полей определенной таблицы, вот один из get методов:
PHP:
скопировать код в буфер обмена
  1. public function getSectionID($id){//метод возвращает значение поля "section_id" по "id"
  2.                         return $this->getFieldOnID($id, "section_id");
  3.                 }

когда я вызываю метод getSectionID он возвращает false из за строки:

класса DataBase, хотя в метод getField обрабатывает подходящий под сравнение массив
Array ( 0 => Array ( section_id => 1 ) ). Убираю строчку с if и все работает как надо. ВОТ ПОЧЕМУ НЕ СРАБАТЫВАЕТ НА $data =Array ( 0 => Array ( section_id => 1 ) ) те возвращает false????????????? ОБЪЯСНИТЕ ПОЖАЛУЙСТА ДАННЫЙ НОНСЕНС

(Отредактировано автором: 17 Декабря, 2013 - 23:57:30)

 
 Top
Invert
Отправлено: 17 Декабря, 2013 - 21:12:11
Post Id



Частый гость


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


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




77_well пишет:
$date = $this->select($table_name, array($field_out), "`$field_in`='".addslashes($value_in)."'");


77_well пишет:
if (count($data) != 1) return false;

?
 
 Top
77_well
Отправлено: 17 Декабря, 2013 - 22:56:56
Post Id



Новичок


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


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

[+]


я же объяснял select это выборка возвращает двумерный массив, описывать не стал, а
PHP:
скопировать код в буфер обмена
  1.  
  2. if (count($data) != 1) return false;//если выборка дала больше одного заначения возвращаем ошибку
  3.  

в данном случае выборка должна дать одно значение.
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. private function select($table_name, $fields, $where = "", $order = "", $up = true, $limit = ""){//метод занимается выборкой.
  3.                                                                                         //принемает как аргумент название таблицы $table_name
  4.                                                                                         //список полей которые надо извлеч $fields
  5.                                                                                         //условие (придикат) $where = "", которое по умолчанию равно пустой строке
  6.                                                                                         //сортировка $order, которой по умолчанию вообще нету
  7.                                                                                         //сортировка по возростанию по убыванию $up = true по умолчанию по возростанию
  8.                                                                                         //количество записей для выборки и смещение $limit = ""
  9.  


вот часть select что бы было понятно
 
 Top
avtor.fox
Отправлено: 17 Декабря, 2013 - 23:24:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




Invert пишет:
$date

Invert пишет:
$data
 
 Top
77_well
Отправлено: 17 Декабря, 2013 - 23:57:05
Post Id



Новичок


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


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

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2.  $date = $this->select($table_name, array($field_out), "`$field_in`='".addslashes($value_in)."'");
  3.  

$data =Array ( 0 => Array ( section_id => 1 ) )
а вопрос почему
PHP:
скопировать код в буфер обмена
  1.  
  2. if (count($data) != 1) return false;
  3.  

возвращает false, а не пререходит к else. по идеи массив состоит как раз из одного элемента и должго перейти к else и вернуть
PHP:
скопировать код в буфер обмена
  1.  
  2. return $date[0][$field_out];
  3.  

те 1 и единственный элемент массива
 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2013 - 00:15:07
Post Id



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


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


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




Радость
Invert, avtor.fox, надо так:

$date $datа

(Отредактировано автором: 18 Декабря, 2013 - 00:15:43)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
77_well
Отправлено: 18 Декабря, 2013 - 00:30:44
Post Id



Новичок


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


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

[+]


суть в том что
$data =Array ( 0 => Array ( section_id => 1 ) );
if (count($data) != 1) return false;
else return $date[0][$field_out];
в упрощенном виде.
возвращает false.
я просто не понимаю как такое может быть, нонсонс.
 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2013 - 01:13:42
Post Id



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


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


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




ваш код в упрощенном виде передаст управление в ветку else
но в там неопределенная переменная $date, значит return вернет значение NULL которое при нестрогом сравнении будет приведено к false;



Вы что, правда не видите свою опечатку, на которую вам пытаются указать? Однако


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
77_well
Отправлено: 18 Декабря, 2013 - 07:32:15
Post Id



Новичок


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


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

[+]


поторопился вот как запись выглядит
$data =Array ( 0 => Array ( section_id => 1 ) );
if (count($data) != 1) return false;
else return $date[0][section_id];
А про то что в ветке else не определена переменная $date действительно не догоняю Не понял

(Отредактировано автором: 18 Декабря, 2013 - 07:35:17)

 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2013 - 09:21:43
Post Id



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


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


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




Цитата:
А про то что в ветке else не определена переменная $date действительно не догоняю

ну как так-то??? я же прямо носом вас тыкаю —
$data =Array ( 0 => Array ( section_id => 1 ) );
if (count($data) != 1) return false;
else return $date[0][section_id];


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
77_well
Отправлено: 18 Декабря, 2013 - 09:36:47
Post Id



Новичок


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


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

[+]


друг спасибо. я че то ослеп совсем). целую тему создал стыдоба.
 
 Top
Invert
Отправлено: 18 Декабря, 2013 - 12:17:12
Post Id



Частый гость


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


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




Вы все еще пишете код в блокноте? Поздравляю, все грабли будут ваши ;)
 
 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