Forum Webscript.Ru

Программирование => PHP => Тема начата: alex2008 от 22 Марта 2005, 14:33:05

Название: в чем ошибка (рекурсивные функции)?
Отправлено: alex2008 от 22 Марта 2005, 14:33:05
Есть таблица с сообщениями форума, каждая строка имеет уникальный индекс  - id и  ссылку на id строки, на которую является ответом - id_m, соответственно если id_m=0 то это основная тема, которая может ветвиться дальше. В данном скрипте я пытаюсь вывести дерево сообщений, правда я еще не учел отступы, но это не столь важно, главное вывести что есть. Трабл: выдается ошибка: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\\www\\forum1.phtml on line 32

Может кто поможет?


$conn = mysql_connect ($dbhost, $database_user_name, $database_password)or die ("");
$dbtable=\'forum\';
mysql_select_db ($database_name,$conn);

function print_array($id_stroki)
{
 static $count;
 $count = (isset($count)) ? ++$count : 0;
 if ($count > 10) { echo "Достигнута максимальная глубина погружения!"; $count--; return; }


 $query1  = "select * from ".$dbtable." where (id_m=\'".$id_stroki."\')";
 $result1 = mysql_query($query1) ;
 $num_results1 = mysql_num_rows ($result1) ;

 while($num_results1>0)
     {
     $row1 = mysql_fetch_array($result1);
     $dv=trim(stripslashes($row1["dt"]));
     $dv=substr($dv,6,2)."-".substr($dv,4,2)."-".substr($dv,0,4)."   ".substr($dv,8,2).":".substr($dv,10,2);
     echo "
".$dv." ";
     $pochta=trim(stripslashes($row1["email"]));
     $pochta="".stripslashes($row1["author"])."";
     echo $pochta." ";
     echo "".stripslashes($row1["title"])." 
";
     $num_results1=$num_results1-1;


     print_array(trim(stripslashes($row1["id"])));
     }
 $count--;
}

print_array(0);

//закроем соединение с базой данных
mysql_close($conn);


Название: в чем ошибка (рекурсивные функции)?
Отправлено: Lutik от 22 Марта 2005, 14:59:21
Сделай error репорт, и все сразу станет ясно.
Вот этой строке: $result1 = mysql_query($query1) ;

добавь or die("mysql_error()")
и здесь
$num_results1 = mysql_num_rows ($result1) ;
И ты увидишь свою ошибку.
Название: в чем ошибка (рекурсивные функции)?
Отправлено: alex2008 от 22 Марта 2005, 15:51:46
Как вывести ошибки я знаю, выводит
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near \'where (id_m=\'0\')\' at line 1

т.е в этой строке
$query1  = "select * from ".$dbtable." where (id_m=\'".$id_stroki."\')";

но здесь ошибки нет
Название: в чем ошибка (рекурсивные функции)?
Отправлено: tserbis от 22 Марта 2005, 16:00:18
$dbtable не видна в функции
если бы ты вывел запрос для отладки, - ты бы увидел это
Название: в чем ошибка (рекурсивные функции)?
Отправлено: alex2008 от 22 Марта 2005, 16:04:59
Блин, точно, работает, только почему-то выводит одну тему до конца ветвления, а остальное не выводит, буду разбираться. Спасибо
Название: в чем ошибка (рекурсивные функции)?
Отправлено: alex2008 от 22 Марта 2005, 17:08:23
[PHP]
function print_array($id_stroki)
{
 static $count;
 $count = (isset($count)) ? ++$count : 0;

 if ($count > 100) { echo "Äîñòèãíóòà ìàêñèìàëüíàÿ ãëóáèíà ïîãðóæåíèÿ!"; $count--; return; }

 $query1  = "select * from forum where (id_m=\'".$id_stroki."\')";
 $result1 = mysql_query($query1)or die(mysql_error()) ;
 $num_results1 = mysql_num_rows ($result1) or die(mysql_error()) ;

 while($num_results1>0)
     {
     $row1 = mysql_fetch_array($result1);

     $otstup="";
     for ($i = 1; $i <= $count; $i++) {  $otstup=$otstup."          ";  };

     $dv=trim(stripslashes($row1["dt"]));
     $dv=substr($dv,6,2)."-".substr($dv,4,2)."-".substr($dv,0,4)."   ".substr($dv,8,2).":".substr($dv,10,2);
     echo "
".$otstup."¤  ".$dv." ";
     $pochta=trim(stripslashes($row1["email"]));
     $pochta="".stripslashes($row1["author"])."";
     echo $pochta." ";
     echo "".stripslashes($row1["title"])." 
";
     $num_results1=$num_results1-1;


     print_array(trim(stripslashes($row1["id"])));
     }
 $count--;
}

print_array(0);
[PHP]

следующий кусок кода выводит вот это:

¤  16-03-2005 15:45 Алексей Проверка добавления сообщения

          ¤  16-03-2005 16:23 Вован Ответ на тестовое сообщение

                    ¤  16-03-2005 16:32 Санек ответ на ответ на тестовое сообщение

                              ¤  16-03-2005 16:33 Степан ответ на ответ ответа


т.е. одну ветку до последнего сообщения, а остальные нет, где-то нужно поставить цикл не пойму где
Название: в чем ошибка (рекурсивные функции)?
Отправлено: Lutik от 23 Марта 2005, 11:39:22
Наверно вначале функции получив предварительно число тем форума?