|
|
|
| Есть функция которая рекурсивно удаляет раздел и все подразделы. Подскажите пожалуйста почему она зацикливается? Вроде все правильно написал.
<?
DeleteAll(1);
function DeleteAll($num)
{
mysql_query("DELETE FROM resource WHERE id = '$num'");
$query = mysql_query("SELECT * FROM resource WHERE parent = '$num'");
if(mysql_num_rows($query) != 0)
while($fetch = mysql_fetch_array($query))
DeleteAll($fetch['id']);
else
return 0;
}
?>
|
Вот дамп таблицы:
CREATE TABLE 'resource' (
'id' int(11) NOT NULL auto_increment,
'name' varchar(255) NOT NULL default '',
'parent' int(11) NOT NULL default '0',
PRIMARY KEY ('id')
) TYPE=MyISAM AUTO_INCREMENT=9 ;
INSERT INTO 'resource' VALUES (1, 'Новый раздел', 0);
INSERT INTO 'resource' VALUES (2, 'Новый раздел', 0);
INSERT INTO 'resource' VALUES (3, 'Новый раздел', 0);
INSERT INTO 'resource' VALUES (4, 'Новый раздел', 1);
INSERT INTO 'resource' VALUES (5, 'Новый раздел', 1);
INSERT INTO 'resource' VALUES (6, 'Новый раздел', 1);
INSERT INTO 'resource' VALUES (7, 'Новый раздел', 4);
INSERT INTO 'resource' VALUES (8, 'Новый раздел', 4);
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(02.09.2005 в 21:37)
| | Хм... а вы уверены, что проблема именна в этой функции - у меня она сработала без вопросов... | |
|
|
|
|
|
|
|
для: cheops
(03.09.2005 в 01:35)
| | Не могла :)
if(mysql_num_rows($query) != 0)
Для пхп значит - не равно false.
Попробуй
if(mysql_num_rows($query) !== 0) | |
|
|
|
|
|
|
|
для: isset
(03.09.2005 в 02:16)
| | Если честно не очень понял почему не могла - вы бы не поленились, а воспроизвели ситуацию... | |
|
|
|
|
|
|
|
для: cheops
(03.09.2005 в 02:35)
| | У меня тоже не зацикливается, видимо не тот код.
Простой пример:
<?
$a = 0;
if($a != 0) { echo "not zero"; } else { echo "zero"; }
$a = false;
if($a != 0) { echo " not zero"; } else { echo " zero"; }
?>
|
Результат: zero zero | |
|
|
|
|
|
|
|
для: isset
(03.09.2005 в 02:46)
| | Это я как раз понимаю, я непонимаю, почему в ответ на синтаксически верный SQL-запрос
"SELECT * FROM resource WHERE parent = '$num'"
|
Функция mysql_num_rows() должна возвращать что-либо отлчиное от числа. Точно также думает и код, приведённый выше, так как в результате его работы остаются только две записи с id = 2 и id = 3. | |
|
|
|
|
|
|
|
для: cheops
(03.09.2005 в 01:35)
| | Странно я создал новую таблицу и запустил только этот скрипт и у меня действительно не зациклилась, значит дело не в этом хотя в чем не знаю. Кстати у вас ошибочка в форуме небольшая, например у меня стоит отображение линейное, а если я открою окно по ссылке в сообщении, то откроется структурный форум. | |
|
|
|
|
|
|
|
для: Евгений Петров
(03.09.2005 в 13:57)
| | Хм... странно, вообще стуктура форума прописывается в cookie и не должна меняться в зависимости от способа открытия темы... | |
|
|
|
|
|
|
|
для: cheops
(03.09.2005 в 14:02)
| | Я об этом тоже думал, поэтому и спросил | |
|
|
|
|
|
|
|
для: Евгений Петров
(03.09.2005 в 14:06)
| | А ещё фигня какая то, если создать отдельный документ и в нем только сама функция и её вызов, то если вызов поместить перед функцией то све нормально, а если это все в самом скрипте (не в отдельном документе) то если вызов поместить до самой функции он её не найдет. | |
|
|
|
|
|
|
|
для: Евгений Петров
(03.09.2005 в 14:15)
| | Теперь вообще ничего не понятно, я эту функцию в самое начало вставил и все работает. | |
|
|
|