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
Форумы портала PHP.SU :: Версия для печати :: Многомерный массив
Форумы портала PHP.SU » » Работа с СУБД » Многомерный массив

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

1. FSS - 24 Апреля, 2015 - 11:40:38 - перейти к сообщению
Добрый день.
Такая проблема: есть вывод заказов инфа по заказчику выводиться нормально она в отдельный файл пишется, а товар заказа в БД 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()
Помогите кто чем может второй день голову ломаю!!!!!
2. Tyoma5891 - 24 Апреля, 2015 - 11:50:06 - перейти к сообщению
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'] является строкой уже гдето выше, попробуйте другой ключ указать или переопределите массив
3. FSS - 24 Апреля, 2015 - 11:59:39 - перейти к сообщению
выше я его инициализировал как массив, должен получиться многомерный массив
$orderinfo['goods'] является частью первичного массива куда пишется вывод из БД
4. Tyoma5891 - 24 Апреля, 2015 - 12:07:01 - перейти к сообщению
FSS пишет:
выше я его инициализировал как массив, должен получиться многомерный массив
$orderinfo['goods'] является частью первичного массива куда пишется вывод из БД

покажите весь код выше
5. FSS - 24 Апреля, 2015 - 12:09:45 - перейти к сообщению
Вся функция.
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();
эта строчка лишняя экспериментирую
6. Tyoma5891 - 24 Апреля, 2015 - 12:42:59 - перейти к сообщению
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;    
7. FSS - 24 Апреля, 2015 - 13:04:37 - перейти к сообщению
если не в цикле то он выводит только последнюю запись!!!
8. atmo - 20 Мая, 2015 - 01:33:32 - перейти к сообщению
У меня все заработало после того, как я создал строку

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


а затем тупо удалил её.

 

Powered by ExBB FM 1.0 RC1