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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
quinlena
Отправлено: 28 Августа, 2012 - 08:44:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Помогите, пожалуйста! Вывожу значения в дерево вот так, но почему-то каждая строка дублируется. Проблема 100% в цикле, подскажите, в чем дело.
PHP:
скопировать код в буфер обмена
  1.  
  2. echo "<ul>";
  3.  
  4.  
  5.     for($i=0;$i<count($a_tree[$id_par_service]);$i++)
  6.     {     $style=mysql_query("select * from `dir_service` where `id_service`='".$a_tree[$id_par_service][$i]['id_service']."'");
  7.           $style=mysql_fetch_assoc($style);
  8.           $athor = mysql_query("SELECT * FROM `contracts` WHERE `id_con` = ".(int)$_GET['id']);
  9.          $canr=mysql_fetch_array($athor);
  10.          $usl_check = mysql_query("SELECT * FROM `service_cl` WHERE `id_con` = '".$canr['id_con']."' and `ud_s_cl`='0' and `dateser_can`='0000-00-00'");
  11.         while ($usl_checki=mysql_fetch_array($usl_check)){
  12.        
  13.            if ($style['id_service']==$usl_checki['id_service']) {$s='checked'; } else $s='';
  14.       if ($style['parent']==1){
  15.       echo "<li class='plus'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$a_tree[$id_par_service][$i]['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_tree[$id_par_service][$i]['name_service']."</span>";
  16.       }
  17.       if ($style['parent']==0){
  18.       echo "<li class='non'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$a_tree[$id_par_service][$i]['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_tree[$id_par_service][$i]['name_service']."</span>";
  19.       }
  20.      
  21.       //рекурсивный вызов - список всех дочерних элементов нужно вставить
  22.       //  именно в этом месте:
  23.       //  <li>название
  24.       //     ** тут список дочерних элементов, он показывается рекурсивным вызовом **
  25.       //  </li>
  26.       tree_print($a_tree,$a_tree[$id_par_service][$i]['id_service']);}
  27.       echo "</li>";
  28.     }
  29.     echo "</ul>";
  30.  
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 10:21:54
Post Id



Гость


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


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




Для начала, почему бы не заменить
PHP:
скопировать код в буфер обмена
  1. for($i=0;$i<count($a_tree[$id_par_service]);$i++)
на
PHP:
скопировать код в буфер обмена
  1. foreach ($a_tree[$id_par_service] as $value)
к примеру, а на соответственно.

А что касаемо вывода в первом цикле получаете массив $style и в первом цикле определяется же индекс $i и следовательно элемент в массиве $a_tree[$id_par_service], далее через while (новый цикл) последовательно перебираете значение $usl_check при этом значение $a_tree[$id_par_service][$i] и $style не меняется, следовательно, происходит вывод одного и того же до конца цикла while, при этом даже не закрывается у вас все в результате тегом </li>
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 10:25:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




[quote=Bartezz][/quote]
Если я убираю while, то значение checked выставляется только у одного элемента, а у остальных нет.
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 10:45:54
Post Id



Гость


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


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




Код конечно кодом, но совершенно непонятно какая цель преследуется и что входит в выборку $usl_check, я так понимаю что там не один элемент, а похоже 2 раз строки дублировались, а если два тогда предполагается вывод 2х чекбоксов один с checked другой без? Или просто не хватает в запросе LIMIT 1?
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 10:46:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Даже если закрыть цикл после li
PHP:
скопировать код в буфер обмена
  1.  tree_print($a_tree,$a_tree[$id_par_service][$i]['id_service']);
  2.       echo "</li>";}

То все равно повторяются записи
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 10:48:27
Post Id



Гость


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


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




quinlena пишет:
Даже если закрыть цикл после li То все равно повторяются записи

разумеется суть то не поменялась, да и выборка $usl_check содержит, по-видимому, 2 элемента
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 10:48:57
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Bartezz пишет:
Код конечно кодом, но совершенно непонятно какая цель преследуется и что входит в выборку $usl_check, я так понимаю что там не один элемент, а похоже 2 раз строки дублировались, а если два тогда предполагается вывод 2х чекбоксов один с checked другой без? Или просто не хватает в запросе LIMIT 1?

Смысл таков, что на страницу выводится договор, делается из базы выборка этого договора, потом лезу в другую таблицу, где id договора совпадает и беру оттуда id услуг, которые есть в договоре, потом вывожу дерево всех имеющихся услуг, но так, чтоб которые есть в договоре, были отмечены. Вот, смысл таков
(Добавление)
quinlena пишет:
Bartezz пишет:
Код конечно кодом, но совершенно непонятно какая цель преследуется и что входит в выборку $usl_check, я так понимаю что там не один элемент, а похоже 2 раз строки дублировались, а если два тогда предполагается вывод 2х чекбоксов один с checked другой без? Или просто не хватает в запросе LIMIT 1?

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

Надеюсь понятно объяснила, в идеале конечно нужно, чтоб показывался путь, до услуг, которые есть...
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 11:01:49
Post Id



Гость


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


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




может тогда
PHP:
скопировать код в буфер обмена
  1. $a_tree[$id_par_service][$i]['id_service']
заменить на
PHP:
скопировать код в буфер обмена
  1. $a_tree[$id_par_service][$i][$usl_checki['id_service']]
а
PHP:
скопировать код в буфер обмена
  1. $a_tree[$id_par_service][$i]['name_service']
на
PHP:
скопировать код в буфер обмена
  1. $a_tree[$id_par_service][$i][$usl_checki['name_service']]
или использовать те рекомендации, которые описывал в первом своем посте.
Поправил ошибку, это исходя если я правильно понял структуру

(Отредактировано автором: 28 Августа, 2012 - 11:04:54)

 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 11:02:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Если закрыть цикл после
PHP:
скопировать код в буфер обмена
  1. if ($style['id_service']==$usl_checki['id_service']) {$s='checked'; } else $s='';}

Тогда повторений нет, но выбирается только первое значение
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 11:06:28
Post Id



Гость


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


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




вам надо разобраться с $a_tree[$id_par_service][$i]['id_service'] и $a_tree[$id_par_service][$i]['name_service'] чтоб их значения соотвественно менялись при изменении $usl_checki
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 11:08:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Bartezz пишет:
вам надо разобраться с $a_tree[$id_par_service][$i]['id_service'] и $a_tree[$id_par_service][$i]['name_service'] чтоб их значения соотвественно менялись при изменении $usl_checki

Мне не нужно их менять, просто нужно checked расставить...
Рекомендациями из первого поста воспользовалась, ничего не изменилось
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 11:13:15
Post Id



Гость


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


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




quinlena пишет:
Мне не нужно их менять, просто нужно checked расставить...

Именно это у вас и происходит и дублируются строки (потому как услуги не меняются проходя по циклу while), а лишь меняется то checked то не "checked"
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 11:18:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Bartezz пишет:
quinlena пишет:
Мне не нужно их менять, просто нужно checked расставить...

Именно это у вас и происходит и дублируются строки (потому как услуги не меняются проходя по циклу while), а лишь меняется то checked то не "checked"

Посоветуйте, что можно сделать?
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 11:23:36
Post Id



Гость


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


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




Посмотрите сообщение мое от "28 Августа, 2012 - 12:01:49" если я правильно понял структуру массива $a_tree, то это должно помочь. В таблице `service_cl` есть же столбец 'name_service' и 'id_service'???
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 11:26:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Bartezz пишет:
Посмотрите сообщение мое от "28 Августа, 2012 - 12:01:49" если я правильно понял структуру массива $a_tree, то это должно помочь. В таблице `service_cl` есть же столбец 'name_service' и 'id_service'???

Нет, там есть только id_service, а name_service берется из другой таблицы, я уже пробовала, как вы написали, получилось, что надписи не выводятся, только чекбоксы
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB