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]   

> Без описания
Kermes
Отправлено: 10 Августа, 2014 - 21:53:13
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




Здравствуйте, товарищи!
Помогите мне пожалуйста с одной проблемой Растерялся
Я сейчас учусь по видеоурокам Борисова, сделал все как он сказал, и ничего не получилось.А сделать надо вот что: вывести из БД SQLite данные.
В базу то они добавились, а вот вывести никак не выходит, все перепробовал(((
Вот код:
#Файл NewsDB.php //весь класс описывать не буду, только то место где проблема.
PHP:
скопировать код в буфер обмена
  1.  
  2. //выборка данных из БД
  3. class NewsDB{
  4. function getNews(){
  5.         $sql = "SELECT msgs.id as id, title, category.name as category, description, source, datetime
  6.               FROM msgs, category WHERE category.id = msgs.category ORDER BY msgs.id DESC";
  7.         $res = $this->_db->query($sql) or die($this->_db->lastErrorMsg());
  8.         return $this->db2Arr($res);
  9.     }
  10.     //превращение запроса в массив
  11.      protected function db2Arr($data){
  12.         $arr = array();
  13.         while($row = $data->fetchArray(SQLITE3_ASSOC))
  14.                 $arr[] = $row;
  15.         return $arr;
  16.     }
  17. }
  18.  

#файл get_news.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $result = $news->getNews();//выбирает метод из класса NewsDB($news инклюдил в другом файле
  4. echo '<p>Всего последних новостей: '.count($result);
  5. foreach($result as $item){
  6.     $id = $item['id'];
  7.     $title = $item['title'];
  8.     $cat = $item['category'];
  9.     $desc = nl2br($item['description']);
  10.     $dt = date('d-m-Y H:i:s', $item['datetime']);
  11.     echo <<<LABEL
  12.     <hr>
  13.     <h3>$title</h3>
  14.             <p>$desc<br>[$cat] @ $dt</p>
  15.             <p align='right'><a href='news.php?del=$id'>Удалить</a></p>
  16. LABEL;
  17. }
  18. ?>
  19.  

Помогите пожалуйста.

(Отредактировано автором: 10 Августа, 2014 - 21:59:12)

 
 Top
tato
Отправлено: 11 Августа, 2014 - 00:56:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




Дамп сделайте.
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = $this->_db->query($sql) or die($this->_db->lastErrorMsg());
  3. var_dump( $res );
  4.  


PHP:
скопировать код в буфер обмена
  1.  
  2. $result = $news->getNews();
  3. var_dump( $result );
  4.  


-----
просто ?: сложно
 
 Top
Kermes
Отправлено: 11 Августа, 2014 - 01:17:35
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




tato пишет:
Дамп сделайте.
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = $this->_db->query($sql) or die($this->_db->lastErrorMsg());
  3. var_dump( $res );
  4.  


PHP:
скопировать код в буфер обмена
  1.  
  2. $result = $news->getNews();
  3. var_dump( $result );
  4.  

Да, сделал и print_r тоже использовал говорит что array 0
Почему то в массив не поступают данные с БД.Дело в функциях в классе NewsDB, но не пойму в чем же там трабл...
Вот с класса результат object(SQLite3Result)#4 (0) { }
 
 Top
tato
Отправлено: 11 Августа, 2014 - 01:22:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




Дампим дальше (=

PHP:
скопировать код в буфер обмена
  1.  
  2. while($row = $data->fetchArray(SQLITE3_ASSOC))
  3.     $arr[] = $row;
  4.  
  5. var_dump( $arr );
  6.  


-----
просто ?: сложно
 
 Top
Kermes
Отправлено: 11 Августа, 2014 - 01:26:51
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




tato пишет:
Дампим дальше (=

PHP:
скопировать код в буфер обмена
  1.  
  2. while($row = $data->fetchArray(SQLITE3_ASSOC))
  3.     $arr[] = $row;
  4.  
  5. var_dump( $arr );
  6.  

Странно, но тоже array 0, мне кажется дело в sql запросе
 
 Top
tato
Отправлено: 11 Августа, 2014 - 01:26:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




А кстати
Kermes пишет:
Вот с класса результат object(SQLite3Result)#4 (0) { }

тут-то не вернулось ничего. В бд точно данные есть?


-----
просто ?: сложно
 
 Top
Kermes
Отправлено: 11 Августа, 2014 - 01:27:42
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




tato пишет:
А кстати
Kermes пишет:
Вот с класса результат object(SQLite3Result)#4 (0) { }

тут-то не вернулось ничего. В бд точно данные есть?

Конечно, я лично смотрел через SQLite maestro
 
 Top
tato
Отправлено: 11 Августа, 2014 - 01:34:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




тогда попробуй простой запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "select * from msgs";
  3.  

Если данные будут, то усложняем:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "select * from msgs, category where category.id = msgs.category";
  3.  


А вообще "category.id = msgs.category" категория-то есть?


-----
просто ?: сложно
 
 Top
Kermes
Отправлено: 11 Августа, 2014 - 01:47:30
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




tato пишет:
тогда попробуй простой запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "select * from msgs";
  3.  

Если данные будут, то усложняем:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "select * from msgs, category where category.id = msgs.category";
  3.  


А вообще "category.id = msgs.category" категория-то есть?

Да, эти 2 категории(таблицы) есть.Спасибо, завтра попробую так сделать
 
 Top
tato
Отправлено: 11 Августа, 2014 - 02:03:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




Kermes пишет:
Да, эти 2 категории(таблицы) есть.Спасибо, завтра попробую так сделать

Имелось ввиду есть ли записи в таблице category соответсвующие запросу


-----
просто ?: сложно
 
 Top
Kermes
Отправлено: 11 Августа, 2014 - 13:16:27
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




tato пишет:
Kermes пишет:
Да, эти 2 категории(таблицы) есть.Спасибо, завтра попробую так сделать

Имелось ввиду есть ли записи в таблице category соответсвующие запросу

Естественно есть, их там 4
(Добавление)
tato
большое спасибо, проблема решилась вот этим


Поклон
Но просто появилась и другая проблема, ведь из за этого оно не работало:
PHP:
скопировать код в буфер обмена
  1.  
  2. WHERE category.id=msgs.category и как же это сделать чтобы работало...
  3.  


А из за этого(category через запятую после msgs) теперь выводит одну запись как 3 одинаковых записи(то есть берет с запись с msgs и вставляет ее во все три из category):
PHP:
скопировать код в буфер обмена
  1.  
  2. "SELECT msgs.id as id, title, category.name as category, description, source, datetime FROM msgs, category
  3.  

(Отредактировано автором: 11 Августа, 2014 - 16:10:58)

 
 Top
Kermes
Отправлено: 11 Августа, 2014 - 21:40:38
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




Все таки я не могу понять, почему не хочет соединять две таблицы таким образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. WHERE category.id = msgs.category
  3.  

и INNER JOIN тоже пробовал, тоже самое(((
Вот даже дамп этой БД:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. TABLE: category
  3.  
  4. --DROP TABLE category;
  5.  
  6. CREATE TABLE category (
  7. id integer,
  8. name text
  9. );
  10.  
  11. --Table: msgs
  12.  
  13. --DROP TABLE msgs;
  14.  
  15. CREATE TABLE msgs (
  16. id integer PRIMARY KEY AUTOINCREMENT,
  17. title text,
  18. category integer,
  19. description text,
  20. source text,
  21. "datetime" integer
  22. );
  23.  
 
 Top
tato
Отправлено: 12 Августа, 2014 - 02:21:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3.     m.id, m.title, c.name AS category, m.description, m.source, m.datetime
  4. FROM
  5.     msgs m
  6. JOIN
  7.     category c ON c.id = m.category
  8. ORDER BY
  9.     m.id DESC
  10.  


Данные в таблицах(для примера)
category:
1, 'categroy_1'
2, 'category_2'

msgs:
1, 'title_1', 1, 'description_1', 'source_1', '2014-01-01 00:00:00'
2, 'title_2', 1, 'description_2', 'source_2', '2014-01-01 00:00:00'
3, 'title_3', 2, 'description_3', 'source_3', '2014-01-01 00:00:00'
4, 'title_4', 2, 'description_4', 'source_4', '2014-01-01 00:00:00'
5, 'title_5', 3, 'description_5', 'source_5', '2014-01-01 00:00:00'

Здесь 5 запись найдена не будет, т.к. категории с ID 3 нет.
Может проблемма в этом, если все есть и ID катекогий совпадают, то хз.


-----
просто ?: сложно
 
 Top
Kermes
Отправлено: 12 Августа, 2014 - 18:08:20
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Июль 2014  


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




tato пишет:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3.     m.id, m.title, c.name AS category, m.description, m.source, m.datetime
  4. FROM
  5.     msgs m
  6. JOIN
  7.     category c ON c.id = m.category
  8. ORDER BY
  9.     m.id DESC
  10.  


Данные в таблицах(для примера)
category:
1, 'categroy_1'
2, 'category_2'

msgs:
1, 'title_1', 1, 'description_1', 'source_1', '2014-01-01 00:00:00'
2, 'title_2', 1, 'description_2', 'source_2', '2014-01-01 00:00:00'
3, 'title_3', 2, 'description_3', 'source_3', '2014-01-01 00:00:00'
4, 'title_4', 2, 'description_4', 'source_4', '2014-01-01 00:00:00'
5, 'title_5', 3, 'description_5', 'source_5', '2014-01-01 00:00:00'

Здесь 5 запись найдена не будет, т.к. категории с ID 3 нет.
Может проблемма в этом, если все есть и ID катекогий совпадают, то хз.

все есть, и главное еще проблемка образовалась он и через DELETE FROM не хочет удалять, я так понимаю SQLite3 поганая вещь...а ведь без нее в жизни можно обходиться?

(Отредактировано автором: 12 Августа, 2014 - 18:08:49)

 
 Top
tato
Отправлено: 13 Августа, 2014 - 00:51:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


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




Kermes, SQLite нормальная вещь, только подходит для определенных задач. Вообще без БД плохо. Можете установить MySQL и использовать ее. Все равно одна из самых распространненых, на всех нормальных хостингах есть.

Но проблемма не в SQLite. Может подключаетесь не к той базе? delete точно должен работать.


-----
просто ?: сложно
 
 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