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]   

> Без описания
Vechnost
Отправлено: 31 Августа, 2014 - 15:16:56
Post Id


Новичок


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


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




Всем привет.

Смотрю видеокурсы УЦ "Специалист" - хорошие курсы, серьёзные. Но вот на последнем уроке 2 уровня без видимых причин затык случился.

Ребят, помогите! Я уже всю голову сломал!

Ксати, у них Apache, PHP и MySql отдельну ставилисть, а у меня - денвер.

Итак, суть проблемы.

Строим книжный магазин. Есть БД под именем eshop а в ней (в числе прочих) - таблица catalog с полями author, title, pubyear и price. В ней - несколько записей. Есть файл catalog.php, который всю эту прелесть выводит. Вот он:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.         // запуск сессии
  4.         session_start();
  5.         // подключение библиотек
  6.         require "eshop_db.inc.php";
  7.         require "eshop_lib.inc.php";
  8. ?>
  9. <html>
  10. <head>
  11.         <title>Каталог товаров</title>
  12. </head>
  13. <body>
  14. <p>Товаров в <a href='basket.php'>корзине:</a> <?=$count?></p>
  15. <?php
  16.  
  17. ?>
  18. <table border="1" cellpadding="5" cellspacing="0" width="100%">
  19. <tr>
  20.         <th>Автор</th>
  21.         <th>Название</th>
  22.         <th>Год издания</th>
  23.         <th>Цена, руб.</th>
  24.         <th>В корзину</th>
  25. </tr>
  26. <?php
  27.         $goods = select_all();
  28.         foreach($goods as $item){
  29. ?>
  30.                 <tr>
  31.                         <td><?=$item["author"]?></td>
  32.                         <td><?=$item["title"]?></td>
  33.                         <td><?=$item["pubyear"]?></td>
  34.                         <td><?=$item["price"]?></td>
  35.                         <td><a href='add2basket.php?id=<?=$item["id"]?>'>в корзину</a></td>
  36.                 </tr>
  37. <?php  
  38.         }
  39. ?>
  40. </table>
  41. </body>
  42. </html>
  43.  

Вверху подключается библиотека, вот её функции, которые вызвыаются в этом файле:


PHP:
скопировать код в буфер обмена
  1. // конвертируем данные из базы в массив
  2. function db2array($data){
  3.         $arr = array();
  4.         while ($row = mysql_fetch_assoc($data)){
  5.                 $arr[] = $row;
  6.                 return $arr;
  7.         }
  8. }
  9.  
  10. // возвращает все содержимое каталога товаров
  11. function select_all(){
  12.         $sql = "SELECT * FROM catalog";
  13.         $result = mysql_query($sql) or die(mysql_error());
  14.         return db2array($result);
  15. }
  16.  

Вроде бы всё понятно, только выдодится лишь ОДНА запись, а их в БД несколько. Чтобы понять, в чём тут подвох,я в файле catalog.php после $goods = select_all() псиал print_r($goods); exit; и понял, что ошибка происходит в функции db2array() на уровне цикла while - он почему-то срабатывает однократно.

Самое интересное, что у препода на видео всё работает! Я этот код буквально с экрана списывал. Думаю-думаю - и понять ничего не могу. Ну какие у него могут быть причины работать не правильно?! Код-то вроде хороший, все должно быть ОК

(Отредактировано автором: 31 Августа, 2014 - 15:20:38)

 
 Top
teddy
Отправлено: 31 Августа, 2014 - 15:22:17
Post Id


Участник


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


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




В функции db2array вынесите return $arr; за пределы тела цикла while.

После return жизни нет. Получается так, что в массив $arr заносится только одна запись, которая тут же возвращается при помощи return, тем самым завершая работу цикла.
 
 Top
Vechnost
Отправлено: 31 Августа, 2014 - 15:27:19
Post Id


Новичок


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


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




СПАСИБО!!!! Заработало. Всё-таки я это упустил... Глаза замыливаются, когда долго на код смотришь.
 
 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