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 :: glpi подскажите как составить запрос.

 PHP.SU

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


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

> Описание: вывести все значение в поле таблицы
alex_orl
Отправлено: 10 Июля, 2018 - 14:56:35
Post Id


Новичок


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


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




Добрый день. Есть система инвентаризации glpi. Столкнулся с такой проблемой. Если у пользователя 2 монитора то выводится циклом последнее устройство .

Запрос выводит 3 записи в таблице и видим что 2 устройства привязаны к users_id 6
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. root@localhost [glpi]> SELECT  name, serial,otherserial, manufacturers_id, users_id FROM glpi_monitors;
  3. +-----------+------------------+--------------------+------------------+----------+
  4. | name      | serial           | otherserial        | manufacturers_id | users_id |
  5. +-----------+------------------+--------------------+------------------+----------+
  6. | SME1920NR | HLJB200775       | 2222-2222-2222     |               48 |       11 |
  7. | 2476W     | GGVH5HA044351    | 1111-1111-1111-111 |               11 |        6 |
  8. | 2476W-2   | 2222222222222222 | 3333333333333333   |               11 |        6 |
  9. +-----------+------------------+--------------------+------------------+----------+
  10. 3 rows IN SET (0.00 sec)
  11.  


Цикл на php дергает все данные и вставляет в таблицу
PHP:
скопировать код в буфер обмена
  1.  
  2.  // monitor name, s/n
  3.  
  4.  $result2 = $mysqli->query("SELECT distinct  name, serial,otherserial, manufacturers_id, users_id from glpi_monitors");
  5.         while ($data = $result2->fetch_array())  {
  6.      $monitor [$data['users_id']] = $data['name'];
  7.      $monserial [$data['users_id']] = $data ['serial'];
  8.      $moninv [$data['users_id']] = $data ['otherserial'];
  9.  
  10. }
  11.  


Все это вывожу в таблицу ...
PHP:
скопировать код в буфер обмена
  1.  
  2. echo '<td>' .$monitor[$data['users_id']]. '</td>';
  3.  
  4. echo '<td>' .$monserial[$data['users_id']]. '</td>';
  5.  
  6.  

[img]https://ibb.co/mTkz7T[/img]
Но выводится только последнее значение. Что нужно добавить в цикл что бы выводило в таблицу 2 устройства привзянных к users_id ?

(Отредактировано автором: 10 Июля, 2018 - 19:02:06)

 
 Top
Мелкий Супермодератор
Отправлено: 10 Июля, 2018 - 16:01:40
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




alex_orl пишет:
$monitor [$data['users_id']] = $data['name'];

Ну так а почему у одного ключа должно быть два значения? Не бывает такого.
Добавляйте, например, ещё один вложенный массив.


-----
PostgreSQL DBA
 
 Top
alex_orl
Отправлено: 10 Июля, 2018 - 16:35:25
Post Id


Новичок


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


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




Мелкий пишет:
alex_orl пишет:
$monitor [$data['users_id']] = $data['name'];

Ну так а почему у одного ключа должно быть два значения? Не бывает такого.
Добавляйте, например, ещё один вложенный массив.


в php еще не очень , можете пример показать ?
 
 Top
andrewkard
Отправлено: 10 Июля, 2018 - 17:26:10
Post Id


Участник


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


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




alex_orl пишет:
в php еще не очень , можете пример показать ?


PHP:
скопировать код в буфер обмена
  1.  
  2.  //Это массив
  3. $data = [];
  4.  
  5. //Добавим одно значение с ключом  1
  6. $data[1] = 1;
  7.  
  8. //Пытаемся добавить еще одно значение с ключом  1
  9. $data[1] = 2;
  10.  
  11. //Теперь $data[1]  равно 2, поскольку ключи уникальны, что бы сохранить оба значения, сделаем массив двумерным
  12. $data[1][] = 1;
  13. $data[1][] = 2;
  14.  
  15. //Теперь $data[1][0] бедет равно 1, $data[1][1] равно 2
  16.  
  17.  
  18.  
 
 Top
alex_orl
Отправлено: 10 Июля, 2018 - 19:25:15
Post Id


Новичок


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


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




andrewkard пишет:
alex_orl пишет:
в php еще не очень , можете пример показать ?


PHP:
скопировать код в буфер обмена
  1.  
  2.  //Это массив
  3. $data = [];
  4.  
  5. //Добавим одно значение с ключом  1
  6. $data[1] = 1;
  7.  
  8. //Пытаемся добавить еще одно значение с ключом  1
  9. $data[1] = 2;
  10.  
  11. //Теперь $data[1]  равно 2, поскольку ключи уникальны, что бы сохранить оба значения, сделаем массив двумерным
  12. $data[1][] = 1;
  13. $data[1][] = 2;
  14.  
  15. //Теперь $data[1][0] бедет равно 1, $data[1][1] равно 2
  16.  
  17.  
  18.  


Добрый вечер. Спасибо за разъяснение . Если честно не очень понятно .

Как я понимаю я не могу задать одинаковые поля из массива таблицы id. namr итд . И что будет если у пользователя 1 монитор вместо двух ? Поидее должна быть проверка какая либо ?
Если задаю ключи как было сказано выше , то не работает ... пишет array
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  // monitor name, s/n
  4.  
  5.  $result2 = $mysqli->query("SELECT  name, serial,otherserial, manufacturers_id, users_id from glpi_monitors");
  6.         while ($data = $result2->fetch_array())  {
  7.  
  8.    [$monitor [$data['users_id']] = $data['1']['name'];
  9.      $monito2 [$data['users_id']] = $data['2']['name'];
  10.  
  11.      $monserial [$data['users_id']] = $data ['serial'];
  12.      $moninv [$data['users_id']] = $data ['otherserial'];
  13.  
  14. }
  15.  
  16.  
  17.  

(Отредактировано автором: 10 Июля, 2018 - 19:26:31)

 
 Top
teleoperator27
Отправлено: 11 Июля, 2018 - 02:59:18
Post Id



Посетитель


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


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




alex_orl пишет:
Все это вывожу в таблицу ...
Ну так таблицу внутри цикла выводить надо, тогда все выводиться будет.
 
My status
 Top
andrewkard
Отправлено: 11 Июля, 2018 - 06:49:16
Post Id


Участник


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


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




alex_orl пишет:
Если честно не очень понятно .

Думал нормально объяснил, ладно, по коду разберетесь?
PHP:
скопировать код в буфер обмена
  1.  
  2. $result2 = $mysqli->query("SELECT distinct  name, serial,otherserial, manufacturers_id, users_id from glpi_monitors");
  3. while ($data = $result2->fetch_array())  {
  4.     $user_id = $data['users_id'];
  5.     $monitor [$user_id][] = $data['name'];
  6.     $monserial [$user_id][] = $data ['serial'];
  7.     $moninv [$user_id][] = $data ['otherserial'];
  8. }
  9.  
  10. foreach($monitor as $user_id => $data){
  11.     foreach($data as $index => $name){
  12.         echo $name; //при $index = 0 - 2476W, при index = 1 - 2476W-2
  13.     }
  14. }
  15.  
 
 Top
alex_orl
Отправлено: 11 Июля, 2018 - 12:02:32
Post Id


Новичок


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


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




andrewkard Спасибо большое все получилось . echo вывел все значения мониторов .
Я конечно понимаю , что как новичек задаю глупые вопросы .

Каким образом можно в циклах не учитывать пустые значения ? ( бывают не заполнены поля s/n или имя ) . Все работает , но в логах вебсервера есть предупреждения.

И второй вопрос можете разъяснить ?

Если я пытаюсь вывести в другом цикле с сопоставлением users_id ( что бы монитор был привзян к пользователю то ошибка Uninitialized string offset: 11

echo '<td>' .$monname [$data['users_id']]. '</td>';

Каким образом я могу сопаставить $monname ?
 
 Top
andrewkard
Отправлено: 11 Июля, 2018 - 12:12:55
Post Id


Участник


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


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




alex_orl пишет:
Каким образом можно в циклах не учитывать пустые значения ?

все равно выводите, пусть будут пустые ячейки

alex_orl пишет:
Если я пытаюсь вывести в другом цикле с сопоставлением users_id ( что бы монитор был привзян к пользователю то ошибка Uninitialized string offset: 11


PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($monitor as $user_id => $data){
  3.     foreach($data as $index => $name){
  4.         echo $name; //при $index = 0 - 2476W, при index = 1 - 2476W-2
  5.  
  6.         echo $monserial[$user_id][$index];
  7.  
  8.         echo $monname[$user_id][$index];
  9.  
  10.     }
  11. }
  12.  
  13.  
 
 Top
alex_orl
Отправлено: 11 Июля, 2018 - 12:46:29
Post Id


Новичок


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


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




В текущем цикле все работает.
А в другом не выходит сопоставление по пользователю и значения одинаковые в колонках.

Другой цикл там идет привзяка по Users_id ) компьютер , пользователь ,монитор


PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  $result5 = $mysqli->query("SELECT id , name, serial, otherserial, users_id, computermodels_id, states_id, computertypes_id, manufacturers_id  FROM glpi_computers  ORDER BY name");
  4.  while ($data = $result5->fetch_array())  {
  5.  
  6.  
  7.      $comp = $data['name'];
  8.      $compserial = $data ['serial'];
  9.      $compinv  = $data ['otherserial'];
  10.  
  11.  
  12.  
  13.     echo '<tr>';
  14.     echo '<td>' .$number. '</td>';
  15.     echo '<td>' .$comp . '</td>';
  16.  
  17.     echo '<td>' .$proizv[$data ['manufacturers_id']].' '.$mb[$data['computermodels_id']]. '</td>';
  18.  
  19.     echo '<td>' .$cpu_name [$data['id']].' '.$cpu_fre [$data['id']].'</td>';
  20.  
  21.     echo '<td>' .$mem_name [$data['id']].' '.$mem_size [$data['id']].'</td>';
  22.  
  23.     echo '<td>' .$mem_serial [$data['id']].'</td>';
  24.  
  25.     echo '<td>' .$compserial. '</td>';
  26.  
  27.     echo '<td>' .$compinv. '</td>';
  28.  
  29.   [b]  echo '<td>' .$monitor ['us_id'][$index]. '</td>';
  30.  
  31.     echo '<td>' .$monserial ['us_id'][$index]. '</td>';[/b]
  32.  
  33.     echo '<td>' .$u_name [$data['users_id']].' '.$fio [$data['users_id']] .'</td>';
  34.     echo '</tr>';
  35.  
  36.  
  37. $number++;
  38.  
  39.  
  40. }
  41.  
  42.  


[img]https://a.radikal.ru/a04/1807/fd/775d63ec0cbe.jpg[/img]

(Отредактировано автором: 11 Июля, 2018 - 12:49:40)

 
 Top
andrewkard
Отправлено: 12 Июля, 2018 - 07:38:08
Post Id


Участник


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


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




Соберите все в один набор и выводите как нужно, либо приведите оба варианта к одной структуре
 
 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