Удаление некоторой группы каталога со всем ее содержимым

radiocity

Новичок
Здравствуйте. Существует задача удаления "папки" в каталоге товаров и услуг со всем содержимым. Все данные хранятся в БД на MySQL. Удаление вызывается GET запросом с указанием ID цели. Для сокращения кол-ва запросов все параметры папок из таблицы копируются в массив-буфер.
Подскажите, пожалуйста, где может быть ошибка? Как заставить код функционировать?

Таблица mysql, содержащая каталоги:
---------------------------------
ID (int) - уникальный идентификатор
PID (int) - иднтификатор родителя
data (text) - прочая информация

Переменные:
----------------------------------
$ecmode - тип операции (в данном случае удаление)
$_SITE['DB_PREFIX'] - некоторый префикс бд (s_)
$ecdir - id папки, которую удаляем
$ecbuffer = array (); - буфер со значениями каталогов
$ecdbuffer[] = array(); - буфер, удаляемых элементов, который в конечном счете чистится

PHP:
<?php
# DELETE FOLDER:
  if ($ecmode==5)
  {
    $sql = "SELECT id, pid FROM ".$_SITE['DB_PREFIX']."gCatalogGroups ORDER BY id";
    $ecfbuffer_sz =0;
    if ($rowq=mysql_query($sql))
    {
      # создаем буфер вида: $ecbuffer[<id>] = <pid>
			while ($row = mysql_fetch_object($rowq)) 
			{
				$ecfbuffer[$row->id] = $row->pid;
				$ecfbuffer_sz++;
			}
			mysql_free_result($rowq);
			# ищем ключик в буфере			
			if (array_key_exists($ecdir, $ecfbuffer)){
          @oops('dir exists');
          ecdirdrop($ecdir, $ecfbuffer); 
          @oops('set parent');
          for ($i=0; $i<count($ecdbuffer); $i++)
          {
             # удаляем "файлы"
             $sql="DELETE FROM ".$_SITE['DB_PREFIX']."gCatalogGoodies WHERE pid='".$ecdbuffer[$i]."'";
             mysql_query($sql);
             # удаляем "папки"
             $sql="DELETE FROM ".$_SITE['DB_PREFIX']."gCatalogGroups WHERE pid='".$ecdbuffer[$i]."'";
             mysql_query($sql);
          }
          $ecdir = $ecfbuffer[$ecdir];
          
			}
			else
			{
          @oops('Del: target folder does not exists.');
          $ecdir = 0;
			}			
    }
    else
    {
      @oops('Del: buffer is empty');
    }
  }
?>
Функция ecdirdrop():

PHP:
<?php
function ecdirdrop($fid, $fbuf){
  # Пока есть наследник FindFirstChild мы ищем конец
  while(($ecdd=array_search($fid,$fbuf))&&($ecdd!==NULL)){
  if ($ecdd!=NULL)
    ecdirdrop($ecdd,$fbuf);
    oops(array_search($fid,$fbuf));
  }  #while
  # Когда конечный каталог найден и у него нет наследника, мы его чистим от файлов и удаляем
  $ecdbuffer[] = $fid; 
  # При этому станавливаем  его ключ в буфере в минус, чтобы не находить
  $fbuf[$fid]=1000000;
  @oops('Удалена папка');
}
?>
В итоге страница виснет и удаление не происходит. Предполагаю, что ошибка в рекурсии где то =(
 

Lakr

Новичок
заметил одну мелочь...
PHP:
while(($ecdd=array_search($fid,$fbuf))&&($ecdd!==NULL)){
  if ($ecdd!=NULL)
    ecdirdrop($ecdd,$fbuf);
    oops(array_search($fid,$fbuf));
  }  #while
у иф 2 оператора? тогда надо их в { }
 

radiocity

Новичок
Спасибо, сразу не заметил. К сожалению, функция oops() просто выводит текст и не влияет на общий код.
catalog.php?site=1&cat=27&mode=5
...
Ошибка 324 (net::ERR_EMPTY_RESPONSE): Неизвестная ошибка
 
Сверху