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]   

> Без описания
FSS
Отправлено: 24 Апреля, 2015 - 11:40:38
Post Id


Новичок


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


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




Добрый день.
Такая проблема: есть вывод заказов инфа по заказчику выводиться нормально она в отдельный файл пишется, а товар заказа в БД MYSQL .
Выдает 2 ошибки: Illegal string offset 'goods': типо это строка а я к нему как массиву проверял через print_r выдает массив.
Вот код из функции:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "SELECT title, author, pubyear, price, quantity
  3.                                         FROM orders
  4.                                         WHERE orderid = '$orderid'";
  5.                 /* Получение результата выборки */
  6.                 if(!$result = mysqli_query($link, $sql))
  7.                         return false;
  8.                 $items = mysqli_fetch_all($result, MYSQLI_ASSOC);
  9.                 mysqli_free_result($result);
  10.                 /* Сохранение результата в промежуточном массиве */
  11.                 $orderinfo['goods'] = $items;          
  12.                 $allorders[] = $orderinfo;
  13.  

а это вывод на страницу:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.         $i=1; $sum=0;
  4.         foreach($order['goods'] as $item){             
  5. ?>
  6.         <tr>
  7.                 <td><?= $i?></td>
  8.                 <td><?= $item['title']?></td>
  9.                 <td><?= $item['author']?></td>
  10.                 <td><?= $item['pubyear']?></td>
  11.                 <td><?= $item['price']?></td>
  12.                 <td><?= $item['quantity']?></td>               
  13.         </tr>
  14. <?     
  15.         $i++;  
  16.         $sum += $item['price'] * $item['quantity'];    
  17.         }
  18. ?>
  19.  

Вторая ошибка скорее всего из за того что передаю не в foreach() не массив:
Invalid argument supplied for foreach()
Обе ошибки идут со строки с foreach()
Помогите кто чем может второй день голову ломаю!!!!!
 
 Top
Tyoma5891
Отправлено: 24 Апреля, 2015 - 11:50:06
Post Id


Частый посетитель


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


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




FSS пишет:
Добрый день.
Такая проблема: есть вывод заказов инфа по заказчику выводиться нормально она в отдельный файл пишется, а товар заказа в БД MYSQL .
Выдает 2 ошибки: Illegal string offset 'goods': типо это строка а я к нему как массиву проверял через print_r выдает массив.
Вот код из функции:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "SELECT title, author, pubyear, price, quantity
  3.                                         FROM orders
  4.                                         WHERE orderid = '$orderid'";
  5.                 /* Получение результата выборки */
  6.                 if(!$result = mysqli_query($link, $sql))
  7.                         return false;
  8.                 $items = mysqli_fetch_all($result, MYSQLI_ASSOC);
  9.                 mysqli_free_result($result);
  10.                 /* Сохранение результата в промежуточном массиве */
  11.                 $orderinfo['goods'] = $items;          
  12.                 $allorders[] = $orderinfo;
  13.  

а это вывод на страницу:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.         $i=1; $sum=0;
  4.         foreach($order['goods'] as $item){             
  5. ?>
  6.         <tr>
  7.                 <td><?= $i?></td>
  8.                 <td><?= $item['title']?></td>
  9.                 <td><?= $item['author']?></td>
  10.                 <td><?= $item['pubyear']?></td>
  11.                 <td><?= $item['price']?></td>
  12.                 <td><?= $item['quantity']?></td>               
  13.         </tr>
  14. <?     
  15.         $i++;  
  16.         $sum += $item['price'] * $item['quantity'];    
  17.         }
  18. ?>
  19.  

Вторая ошибка скорее всего из за того что передаю не в foreach() не массив:
Invalid argument supplied for foreach()
Обе ошибки идут со строки с foreach()
Помогите кто чем может второй день голову ломаю!!!!!

у вас $orderinfo['goods'] является строкой уже гдето выше, попробуйте другой ключ указать или переопределите массив
 
 Top
FSS
Отправлено: 24 Апреля, 2015 - 11:59:39
Post Id


Новичок


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


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




выше я его инициализировал как массив, должен получиться многомерный массив
$orderinfo['goods'] является частью первичного массива куда пишется вывод из БД
 
 Top
Tyoma5891
Отправлено: 24 Апреля, 2015 - 12:07:01
Post Id


Частый посетитель


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


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




FSS пишет:
выше я его инициализировал как массив, должен получиться многомерный массив
$orderinfo['goods'] является частью первичного массива куда пишется вывод из БД

покажите весь код выше
 
 Top
FSS
Отправлено: 24 Апреля, 2015 - 12:09:45
Post Id


Новичок


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


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




Вся функция.
PHP:
скопировать код в буфер обмена
  1.  
  2. function getOrders(){
  3.         global $link;
  4.         if(!is_file(ORDERS_LOG))
  5.                 return false;  
  6.         $orders = file(ORDERS_LOG);
  7.         $allorders = array();
  8.        
  9.         foreach($orders as $order){
  10.                 list($name, $email, $phone, $address, $orderid, $dt) = explode('|', $order);
  11.                 $orderinfo = array();
  12.                 $orderinfo['name'] = $name;
  13.                 $orderinfo['email'] = $email;
  14.                 $orderinfo['phone'] = $phone;
  15.                 $orderinfo['address'] = $address;
  16.                 $orderinfo['orderid'] = $orderid;
  17.                 $orderinfo['dt'] = $dt;        
  18.                 $sql = "SELECT title, author, pubyear, price, quantity
  19.                                         FROM orders
  20.                                         WHERE orderid = '$orderid'";
  21.                 /* Получение результата выборки */
  22.                 if(!$result = mysqli_query($link, $sql))
  23.                         return false;
  24.                 $items = mysqli_fetch_all($result, MYSQLI_ASSOC);
  25.                 mysqli_free_result($result);
  26.                 /* Сохранение результата в промежуточном массиве */
  27.                 $orderinfo['goods'] = array();
  28.                 $orderinfo['goods'] = $items;          
  29.                 $allorders[] = $orderinfo;
  30.         }      
  31.         return $allorders;
  32. }
  33.  

(Добавление)
$orderinfo['goods'] = array();
эта строчка лишняя экспериментирую
 
 Top
Tyoma5891
Отправлено: 24 Апреля, 2015 - 12:42:59
Post Id


Частый посетитель


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


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




FSS пишет:
Вся функция.
PHP:
скопировать код в буфер обмена
  1.  
  2. function getOrders(){
  3.         global $link;
  4.         if(!is_file(ORDERS_LOG))
  5.                 return false;  
  6.         $orders = file(ORDERS_LOG);
  7.         $allorders = array();
  8.        
  9.         foreach($orders as $order){
  10.                 list($name, $email, $phone, $address, $orderid, $dt) = explode('|', $order);
  11.                 $orderinfo = array();
  12.                 $orderinfo['name'] = $name;
  13.                 $orderinfo['email'] = $email;
  14.                 $orderinfo['phone'] = $phone;
  15.                 $orderinfo['address'] = $address;
  16.                 $orderinfo['orderid'] = $orderid;
  17.                 $orderinfo['dt'] = $dt;        
  18.                 $sql = "SELECT title, author, pubyear, price, quantity
  19.                                         FROM orders
  20.                                         WHERE orderid = '$orderid'";
  21.                 /* Получение результата выборки */
  22.                 if(!$result = mysqli_query($link, $sql))
  23.                         return false;
  24.                 $items = mysqli_fetch_all($result, MYSQLI_ASSOC);
  25.                 mysqli_free_result($result);
  26.                 /* Сохранение результата в промежуточном массиве */
  27.                 $orderinfo['goods'] = array();
  28.                 $orderinfo['goods'] = $items;          
  29.                 $allorders[] = $orderinfo;
  30.         }      
  31.         return $allorders;
  32. }
  33.  

(Добавление)
$orderinfo['goods'] = array();
эта строчка лишняя экспериментирую

а зачем вот это все делать в цикле:
PHP:
скопировать код в буфер обмена
  1.  $sql = "SELECT title, author, pubyear, price, quantity
  2.                                        FROM orders
  3.                                        WHERE orderid = '$orderid'";
  4.                 /* Получение результата выборки */
  5.                 if(!$result = mysqli_query($link, $sql))
  6.                         return false;
  7.                 $items = mysqli_fetch_all($result, MYSQLI_ASSOC);
  8.                 mysqli_free_result($result);
  9.                 /* Сохранение результата в промежуточном массиве */
  10.                 $orderinfo['goods'] = array();
  11.                 $orderinfo['goods'] = $items;    
 
 Top
FSS
Отправлено: 24 Апреля, 2015 - 13:04:37
Post Id


Новичок


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


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




если не в цикле то он выводит только последнюю запись!!!
 
 Top
atmo
Отправлено: 20 Мая, 2015 - 01:33:32
Post Id



Новичок


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


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




У меня все заработало после того, как я создал строку

перед
PHP:
скопировать код в буфер обмена
  1. foreach($order['goods'] as $item){


а затем тупо удалил её.
 
 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