🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
3 messages
3 total messages Started by MeHundo Thu, 30 Aug 2001 12:55
rekurencja
#1794
Author: MeHundo
Date: Thu, 30 Aug 2001 12:55
38 lines
2434 bytes
nie dziala mi taka procedurka wywolujaca sie rekurencyjnie. dotarlem w 
manualu do tematu recursion ;]
jest tam wskazane uzywanie zmiennych static jesli maja przetrwac 
rekurencyjne wywolanie funckji, ale nie za bardzo wiem jak ja tutaj 
zastosowac:

        function resolve_post($post_id, $re_level){
            static $qresult;
                include("db_vars.php");
                $_mysql=mysql_pconnect($host,$username,$password) or die
                        ("brak polonczenia");
                mysql_select_db($db);
                $query="select id,subject,visitor_id,
                        DATE_FORMAT(posted,'%d-%m-%Y') as fdate
                        from forum where id_next=$post_id
                        order by posted desc";
                //echo $query . " " . $post_id . " " . $re_level . "<BR>";
                $qresult=mysql_query($query);
                echo mysql_num_rows($qresult) . "<BR>";
                while($row=mysql_fetch_array($qresult)){
                        echo str_repeat("+",$re_level) . "(" . 
$row["fdate"] . ") " .
                                $row["visitor_id"] . " -=- " . 
$row[subject] . "<BR>";
                        resolve_post($row["id"],$re_level+1);
                }
//              $mysql_free_result($qresult);
        }
        resolve_post(0,0);
?>

ma ona wybierac rekordy z tabeli.... a rekurencyjnie dlatego, ze rekordy 
tworza hierarchie na zasadzie kazdy ma rodzica. co najwazniejsze po 
pierwszej iteracji poprawnie podaje wynik i wskakuje do 2.giej, tam tez, 
ale po powrocie poziom wyzej juz nie pamieta zmiennej $qresult, ktora 
wskazuje na zdrodlo rekordow.

thx
Re: rekurencja
#1795
Author: Metempsychoza
Date: Thu, 30 Aug 2001 16:32
49 lines
3130 bytes
Uzytkownik "MeHundo" <yanquie@bigfoot.com> napisal w wiadomosci
news:9mld04$iq0$1@news2.tpi.pl...
> nie dziala mi taka procedurka wywolujaca sie rekurencyjnie. dotarlem w
> manualu do tematu recursion ;]
> jest tam wskazane uzywanie zmiennych static jesli maja przetrwac
> rekurencyjne wywolanie funckji, ale nie za bardzo wiem jak ja tutaj
> zastosowac:
>
>         function resolve_post($post_id, $re_level){
>             static $qresult;
>                 include("db_vars.php");
>                 $_mysql=mysql_pconnect($host,$username,$password) or die
>                         ("brak polonczenia");
>                 mysql_select_db($db);
>                 $query="select id,subject,visitor_id,
>                         DATE_FORMAT(posted,'%d-%m-%Y') as fdate
>                         from forum where id_next=$post_id
>                         order by posted desc";
>                 //echo $query . " " . $post_id . " " . $re_level . "<BR>";
>                 $qresult=mysql_query($query);
>                 echo mysql_num_rows($qresult) . "<BR>";
>                 while($row=mysql_fetch_array($qresult)){
>                         echo str_repeat("+",$re_level) . "(" .
> $row["fdate"] . ") " .
>                                 $row["visitor_id"] . " -=- " .
> $row[subject] . "<BR>";
>                         resolve_post($row["id"],$re_level+1);
>                 }
> //              $mysql_free_result($qresult);
>         }
>         resolve_post(0,0);
> ?>

zauwazylem tu kilka bledow:
1) po co za kazdym wywolaniem funkcji otwierasz nowe polaczenie? fakt, ze
dla interpretera to wszystko jedno (i tak otwiera tylko jedno polaczenie),
ale przejrzysciej bedzie jak raz polaczysz sie z baza, a pozniej juz tylko
przechowujesz uchwyt do polaczenia
2) static $qresult - zbedne, skoro za kazdym razem otwierasz polaczenie
3) przez caly czas pobierasz jeden rekord o tym samym id
4) po co $re_level jak argument funkcji? przeciez nic z tym nie robisz, daj
global $re_level i tylko inkrementuj
5) przeczytaj
http://hotwired.lycos.com/webmonkey/99/31/index3a.html?tw=programming -
tutorial rozwiazujacy problem z ktorym sie borykasz

--
metempsychoza(at)wp.pl
Re: rekurencja
#1796
Author: MeHundo
Date: Thu, 30 Aug 2001 17:02
60 lines
3531 bytes
Metempsychoza wrote:

> 
> Uzytkownik "MeHundo" <yanquie@bigfoot.com> napisal w wiadomosci
> news:9mld04$iq0$1@news2.tpi.pl...
>> nie dziala mi taka procedurka wywolujaca sie rekurencyjnie. dotarlem w
>> manualu do tematu recursion ;]
>> jest tam wskazane uzywanie zmiennych static jesli maja przetrwac
>> rekurencyjne wywolanie funckji, ale nie za bardzo wiem jak ja tutaj
>> zastosowac:
>>
>>         function resolve_post($post_id, $re_level){
>>             static $qresult;
>>                 include("db_vars.php");
>>                 $_mysql=mysql_pconnect($host,$username,$password) or die
>>                         ("brak polonczenia");
>>                 mysql_select_db($db);
>>                 $query="select id,subject,visitor_id,
>>                         DATE_FORMAT(posted,'%d-%m-%Y') as fdate
>>                         from forum where id_next=$post_id
>>                         order by posted desc";
>>                 //echo $query . " " . $post_id . " " . $re_level .
>>                 "<BR>"; $qresult=mysql_query($query);
>>                 echo mysql_num_rows($qresult) . "<BR>";
>>                 while($row=mysql_fetch_array($qresult)){
>>                         echo str_repeat("+",$re_level) . "(" .
>> $row["fdate"] . ") " .
>>                                 $row["visitor_id"] . " -=- " .
>> $row[subject] . "<BR>";
>>                         resolve_post($row["id"],$re_level+1);
>>                 }
>> //              $mysql_free_result($qresult);
>>         }
>>         resolve_post(0,0);
>> ?>
> 
> zauwazylem tu kilka bledow:
> 1) po co za kazdym wywolaniem funkcji otwierasz nowe polaczenie? fakt, ze
> dla interpretera to wszystko jedno (i tak otwiera tylko jedno polaczenie),
> ale przejrzysciej bedzie jak raz polaczysz sie z baza, a pozniej juz tylko
> przechowujesz uchwyt do polaczenia
> 2) static $qresult - zbedne, skoro za kazdym razem otwierasz polaczenie
> 3) przez caly czas pobierasz jeden rekord o tym samym id
> 4) po co $re_level jak argument funkcji? przeciez nic z tym nie robisz,
> daj global $re_level i tylko inkrementuj
> 5) przeczytaj
> http://hotwired.lycos.com/webmonkey/99/31/index3a.html?tw=programming -
> tutorial rozwiazujacy problem z ktorym sie borykasz
> 
> --
> metempsychoza(at)wp.pl

wielkie dzieki, naprowadziles mnie na trop :)
faktycznie najwiekszym bledem bylo wprowadzenie do procedury elementu 
nawiazywania polaczenia, co chyba restartowalo zrodlo rekordow.
co do argumentu $re_level to jest on potrzebny bo przekazuje 'wysokosc 
galezi drzewa'. w kazdym razie funkcja juz dziala, a do strony niestety nie 
moglem sie dostac.

thx pozdrawiam
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads