Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: while дублирует записи - как избавиться?
 
 автор: virtus1k   (12.10.2008 в 10:09)   письмо автору
22.1 Кб
 
 

Привет. Не могу избавится от проблемы (см.Скриншот) дублируется вывод записей
Вывожу рекурсивной функцией категории с подкатегориями - а под ними вывожу строки, которые относятся к нужной категории - с этим все нормально. НО мне нужно сделать еще третий запрос к другой таблице - узнать есть ли там строки с нужным мне id ( их там от 0 до бесконечности может быть) и если есть - то нужно галку на чексе поставить. Галки ставятся :) только если в третьей таблице находится больше 1 товара - получается так - как на скриншоте.
Подскажите, пожалуйста как избавится от этого ?

    $idprod = $_GET['idprod'];
function ShowTree($ParentID, $lvl) {
    global $lvl,$tblName_s_cat,$tblName_s_prod,$idprod,$tblName_s_dp;
    $lvl++;
    $result = mysql_query("SELECT * FROM $tblName_s_cat WHERE pidcat = " . $ParentID . " ORDER BY pm ASC, name ASC");
    if (mysql_num_rows($result) > 0) {
    echo("<UL>\n");
    while ( $row = mysql_fetch_array($result) ) {
$idcat = $row["idcat"];
$pidcat = $row["pidcat"];
    echo("<LI>\n");
    echo "$row[name]";
  $ssw = mysql_query("SELECT * FROM $tblName_s_dp WHERE idprod = '$idprod'");
while ($ssw3 = mysql_fetch_array($ssw)) {

$socm = mysql_query("SELECT * FROM $tblName_s_prod WHERE idcat = '$idcat'");
while ( $rows = mysql_fetch_array($socm) ) {

if ($rows[idprod] == $ssw3[iddprod]) {

echo "$ssw3[iddprod]<input type=checkbox checked name='dopp[]' value='$rows[idprod]'>$rows[name]<br>";

} else {

echo "$ssw3[iddprod]<input type=checkbox name='dopp[]' value='$rows[idprod]'>$rows[name]<br>";}

    }
}
echo "</div>";
        ShowTree($idcat, $lvl);
        $lvl--;
    }
    echo("</UL>\n");
    }
    }
ShowTree(0, 0);

  Ответить  
 
 автор: sim5   (12.10.2008 в 10:12)   письмо автору
 
   для: virtus1k   (12.10.2008 в 10:09)
 

Прям по (см.Скриншот) и предложить решение? Ну тогда в фотошоп - инструмент "выделить", иструмент "ластик" :)

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 10:14)   письмо автору
 
   для: sim5   (12.10.2008 в 10:12)
 

сорри - то я по ошибке нажал энтер - и он не дописав месаг - заслал!!! ВСЕ подкорректировал ;)

  Ответить  
 
 автор: Trianon   (12.10.2008 в 10:24)   письмо автору
 
   для: virtus1k   (12.10.2008 в 10:09)
 

Вас не затруднит причесать оформление кода?
Несложные же правила.
Открывающая фигурная скобка с новой строки .
Соответствующая фигурная закрывающая - под открывающей.
Внутри них текст сдвинут вправо.
function ShowTree($ParentID, $lvl) 
{
    global $lvl,$tblName_s_cat,$tblName_s_prod,$idprod,$tblName_s_dp;
    $lvl++;
    ...
}



Сейчас текст читать очень тяжело.

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 10:26)   письмо автору
 
   для: Trianon   (12.10.2008 в 10:24)
 

Вот, что смог причесал :( плохой я парикмахер :) я это знаю


$idprod = $_GET['idprod']; 
function ShowTree($ParentID, $lvl) 

       global $lvl,$tblName_s_cat,$tblName_s_prod,$idprod,$tblName_s_dp; 
       $lvl++; 
       $result = mysql_query("SELECT * FROM $tblName_s_cat WHERE pidcat = " . $ParentID . "   ORDER BY pm ASC, name ASC"); 
              if (mysql_num_rows($result) > 0) 

       echo("<UL>\n"); 
          while ( $row = mysql_fetch_array($result) ) 

                     $idcat = $row["idcat"]; 
                     $pidcat = $row["pidcat"]; 
                     echo("<LI>\n"); 
                     echo "$row[name]"; 
                     $ssw = mysql_query("SELECT * FROM $tblName_s_dp WHERE idprod = '$idprod'"); 
                     while ($ssw3 = mysql_fetch_array($ssw)) 

                            $socm = mysql_query("SELECT * FROM $tblName_s_prod WHERE idcat = '$idcat'"); 
                            while ( $rows = mysql_fetch_array($socm) ) 


       if ($rows[idprod] == $ssw3[iddprod]) 

       echo "$ssw3[iddprod]<input type=checkbox checked name='dopp[]' value='$rows[idprod]'>$rows[name]<br>"; 

else
 { 
       echo "$ssw3[iddprod]<input type=checkbox name='dopp[]' value='$rows[idprod]'>$rows[name]<br>";

    } 

         echo "</div>"; 
         ShowTree($idcat, $lvl); 
         $lvl--; 

         echo("</UL>\n"); 
 } 
 } 
ShowTree(0, 0); 

  Ответить  
 
 автор: Trianon   (12.10.2008 в 10:46)   письмо автору
 
   для: virtus1k   (12.10.2008 в 10:26)
 

горе луковое...
<?
$idprod 
$_GET['idprod']; 
function 
ShowTree($ParentID$lvl

  global 
$lvl,$tblName_s_cat,$tblName_s_prod,$idprod,$tblName_s_dp
  
$lvl++; 
  
$result mysql_query("SELECT * FROM $tblName_s_cat WHERE pidcat = " $ParentID "   ORDER BY pm ASC, name ASC"); 
  if (
mysql_num_rows($result) > 0
  { 
    echo(
"<UL>\n"); 
    while ( 
$row mysql_fetch_array($result) ) 
    { 
      
$idcat $row["idcat"]; 
      
$pidcat $row["pidcat"]; 
      echo(
"<LI>\n"); 
      echo 
"$row[name]"
      
$ssw mysql_query("SELECT * FROM $tblName_s_dp WHERE idprod = '$idprod'"); 
      while (
$ssw3 mysql_fetch_array($ssw)) 
      { 
        
$socm mysql_query("SELECT * FROM $tblName_s_prod WHERE idcat = '$idcat'"); 
        while ( 
$rows mysql_fetch_array($socm) ) 
        { 
          if (
$rows[idprod] == $ssw3[iddprod]) 
            echo 
"$ssw3[iddprod]<input type=checkbox checked name='dopp[]' value='$rows[idprod]'>$rows[name]<br>"
          else
            echo 
"$ssw3[iddprod]<input type=checkbox name='dopp[]' value='$rows[idprod]'>$rows[name]<br>";
        } 
      } 
      echo 
"</div>"
      
ShowTree($idcat$lvl); 
      
$lvl--; 
    } 
    echo(
"</UL>\n"); 
  } 


ShowTree(00);  




Неплохо было бы сообщить назначение таблиц $tblName_s_prod и $tblName_s_dp;
А заодно и привести их дампы. Только более осмысленные, чем у Вас на картинке.
Я, например, не понял, что эти две таблицы описывают.

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 11:14)   письмо автору
1.2 Кб
 
   для: Trianon   (12.10.2008 в 10:46)
 

дампы во вложении!
_prod - это таблица содержит продукты, которые относятся к _cat
_dp - это дополнительные продукты, которые привязываются к какому-либо продукту из _prod
Trianon - а скажиет, пожалуйста - Вы в редакторе причесывали каком-о ? или в блокноте?

  Ответить  
 
 автор: Trianon   (12.10.2008 в 11:30)   письмо автору
 
   для: virtus1k   (12.10.2008 в 11:14)
 

Конкретно Ваш - в блокноте.

Теперь еще раз.
Какие строки Вы хотите вывести?
И какие галки расставить?

PS. Дамп пониманию не поспособствовал.

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 11:35)   письмо автору
 
   для: Trianon   (12.10.2008 в 11:30)
 

значит. Открываю продукт для редактирования! id через гет его получаю. У меня этот кусок кода выводит категории с подкатегориями и продуктами, которые относятся к нужной категории. Рядом с каждым продуктом чекбокс (для привязки еще каких-то товаов к текущему редактируемому) Необходимо сделать чекбоксы checked - если в таблице _dp есть записи про этот товар.... т.е. при создании к нему привязали еще какие-то товары.
Вроде все

  Ответить  
 
 автор: Trianon   (12.10.2008 в 11:46)   письмо автору
 
   для: virtus1k   (12.10.2008 в 11:35)
 

>У меня этот кусок кода выводит категории с подкатегориями и продуктами, которые относятся к нужной категории.

Я вижу , что Вы ведете цикл не по той таблице.
      echo "$row[name]"; 
      $ssw = mysql_query("SELECT * FROM $tblName_s_dp WHERE idprod = '$idprod'"); 
      while ($ssw3 = mysql_fetch_array($ssw))  
      {

Здесь Вы перебираете строки таблицы dp вместо того, чтобы перебирать строки таблицы prod

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 11:51)   письмо автору
 
   для: Trianon   (12.10.2008 в 11:46)
 

я _prod ниже перебираю. Перестановка их местами - не влияет :(

  Ответить  
 
 автор: Trianon   (12.10.2008 в 11:53)   письмо автору
 
   для: virtus1k   (12.10.2008 в 11:51)
 

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

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 12:05)   письмо автору
 
   для: Trianon   (12.10.2008 в 11:53)
 

Если убрать проверку для checked - все выводится как нужно (но галки не ставятся понятное дело)
Если убрать это

$ssw = mysql_query("SELECT * FROM $tblName_s_dp WHERE idprod = '$idprod'");
while ($ssw3 = mysql_fetch_array($ssw)) 
{
    if ($rows[idprod] == $ssw3[iddprod]) 
         {
              echo "$ssw3[iddprod]<input type=checkbox checked name='dopp[]' value='$rows[idprod]'>$rows[name]<br>";
         } 
        else 
        {
             echo "$ssw3[iddprod]<input type=checkbox name='dopp[]' value='$rows[idprod]'>$rows[name]<br>";
        }
}


а, потом добавить
echo "$ssw3[iddprod]<input type=checkbox name='dopp[]' value='$rows[idprod]'>$rows[name]

то все нормально, но нужно ж checked (

  Ответить  
 
 автор: virtus1k   (12.10.2008 в 19:28)   письмо автору
 
   для: Trianon   (12.10.2008 в 11:53)
 

кто-то сможет помочь? %(

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования