[PHP] Recurring functie probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke, ik heb echt het meest vage probleem ooit denk ik. Ik heb wel vaker recurring functions gemaakt die zonder problemen werken, echter doet het nu volgende voorbeeld het niet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  function TreeBuilder($subid) {
    global $DB_Shop_Cat;
    // Tabelnaam
    $result = mysql_query("SELECT id, name FROM $DB_Shop_Cat WHERE subid = '$subid' AND id != '0'");
    // Query om de categorieën met het gevraagde subid weer te geven
    while($obj = mysql_fetch_object($result)) {
      $TreeContent .= "        &nbsp;&nbsp;$obj->name - <a>[Edit]</a> | <a href=\"index.php?
Show=Module&Module=Shop&Action=ConfirmDeleteCat&Id=$obj->id\">[Delete]</a><br>\n";
      // Output opbouwen
      $TreeContent .= TreeBuilder($obj->id);
      // Functie opnieuw aanroepen op het zojuist bijgekomen (sub)id
    }
    return $TreeContent;
    // Waarden teruggeven
  }

het is bij deze functie de bedoeling dat er een tree gemaakt wordt van de categorieën die er zijn. Dit doe ik door op elk resultaat de functie opnieuw aan te roepen met een nieuw $subid (id van het gekregen resultaat).

Deze functie werkt perfect als ik de regel waarop ik de functie in zichzelf aanroep er niet in heb zitten. Als die er wel in zit, dat krijg ik in IE de melding 'De pagina kan niet worden weergegeven.'. Oftewel geen foutmelding waar ik iets aan heb. Mozilla besluit na het klikken van de link de klik gewoon te negeren. Heel erg vreemd dus. Wie heeft vergelijkbare problemen meegemaakt, en nog fijner, wie weet een oplossing voor dit probleem want ik zit volkomen vast :(

P.s. ik heb gezocht op got, ask.com en google.

[ Voor 17% gewijzigd door Verwijderd op 07-04-2004 20:59 . Reden: ff regeltje afgebroken, foutje gecorrigeerd ]


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Punt 1: een querie in je recursie is niet echt een sjieke oplossing. Eerder een trage.
Punt 2: als je ook maar één record hebt met als subid de waarde '3', heb je een oneindige lus aan je broek. Zie regel 9 in je code.

Dan heb ik het nog niet over punt 3: je datamodel. Een variabele tabelnaam doet mij vermoeden dat je voor elke shop_cat een aparte tabel hebt. Lijkt me niet de beste oplossing.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bigtree schreef op 07 april 2004 @ 20:55:
Punt 1: een querie in je recursie is niet echt een sjieke oplossing. Eerder een trage.
Punt 2: als je ook maar één record hebt met als subid de waarde '3', heb je een oneindige lus aan je broek. Zie regel 9 in je code.

Dan heb ik het nog niet over punt 3: je datamodel. Een variabele tabelnaam doet mij vermoeden dat je voor elke shop_cat een aparte tabel hebt. Lijkt me niet de beste oplossing.
1. Maakt niet echt uit, uiteindelijk gaat het in een keer naa rHTML geschreven worden. Maar mooi is het idd niet.

2. Was een foutje, ik heb regel 9 even gecorrigeerd. 3 hardcoden was een test van mezelf.

3 alles zit in één tabel. Ik gebruik een variabele omdat ik op die manier heel makkelijk de tabel kan hernoemen via een config scriptje.

Dit is mijn $DB_Shop_Cat tabel:

id (INT), autoincrement
subid(INT)
name(VARCHAR 20)

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Prima, dat van die variabele tabelnaam kon ik vanachter mijn glazen bol even niet zien... :X

Dan is het verder nog handig te weten dat een oneindige loop die IE-foutmelding kan veroorzaken. Waarschijnlijk had je de time-limit op oneindig staan?

Bij mij werkte de code gewoon met het veranderen van regel 9. Bij jou ook?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik dacht dat hij op 30 seconden mx stond. Echter knalt hij er meteen al uit. Regel 9 veranderen maakt niet uit. Ik heb de regel die de functie opnieuw uitroept ook al als probeerseltje net buiten de brackets van de query gezet, maar ook dan gaat hij gewoon op zn b*k :(

De eerste keer roep ik de functie trouwens aan met: TreeBuilder(0)

[ Voor 12% gewijzigd door Verwijderd op 07-04-2004 21:13 . Reden: TreeBuilder(0) toegevoegd ]


Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Als je geen php-debugger hebt en je wilt toch het verloop van je programma controleren dan kun je gewoon tussen-tijds debug-informatie naar de browser echoën.

PHP:
1
2
3
//zorg dat output-buffering uit staat, die 255 spaties zijn om te zorgen dat IE niet stiekum de output buffert.
echo str_repeat(" ", 255) . " ik ben nu hier en variablele id = $id <br />\n";
sleep(2);

Zo zou je theoretisch de bron van het probleem moeten kunnen vinden.

seweso's blog


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Verwijderd schreef op 07 april 2004 @ 21:09:
Ik dacht dat hij op 30 seconden mx stond. Echter knalt hij er meteen al uit.
Ah, dan is het dus duidelijk geen time-out probleem.
Regel 9 veranderen maakt niet uit. Ik heb de regel die de functie opnieuw uitroept ook al als probeerseltje net buiten de brackets van de query gezet, maar ook dan gaat hij gewoon op zn b*k :(

De eerste keer roep ik de functie trouwens aan met: TreeBuilder(0)
Tja, dan ligt het waarschijnlijk aan iets anders, want bij mij werkt het echt gewoon.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

bigtree schreef op 07 april 2004 @ 21:16:
[...]
Ah, dan is het dus duidelijk geen time-out probleem.


[...]

Tja, dan ligt het waarschijnlijk aan iets anders, want bij mij werkt het echt gewoon.
Hoe weet jij wat er in zijn database staat? En als je dat niet weet dan zit daar wellicht het probleem...

seweso's blog


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bigtree schreef op 07 april 2004 @ 21:16:
[...]
Ah, dan is het dus duidelijk geen time-out probleem.


[...]

Tja, dan ligt het waarschijnlijk aan iets anders, want bij mij werkt het echt gewoon.
/me jaloers

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  function TreeBuilder($subid) {
    global $DB_Shop_Cat;
    // Tabelnaam
echo str_repeat(" ", 255) . " ik ben nu aan het begin en variablele id = $subid <br />\n"; 
sleep(2);
    $result = mysql_query("SELECT id, name FROM $DB_Shop_Cat WHERE subid = '$subid' AND id != '0'");
    // Query om de categorieën met het gevraagde subid weer te geven
    while($obj = mysql_fetch_object($result)) {
echo str_repeat(" ", 255) . "Query net uitgevoerd en subid = $obj->id <br />\n"; 
sleep(2);
      $TreeContent .= "        &nbsp;&nbsp;$obj->name - <a>[Edit]</a> | <a href=\"index.php?Show=Module&Module=Shop&Action=ConfirmDeleteCat&Id=$obj->id\">[Delete]</a><br>\n";
      // Output opbouwen
      $TreeContent .= TreeBuilder($obj->$id);
echo str_repeat(" ", 255) . "Opniew uitvoeren functie en subid = $obj->id <br />\n"; 
sleep(2);
      // Functie opnieuw aanroepen op het zojuist bijgekomen (sub)id
    }
    return $TreeContent;
    // Waarden teruggeven
  }

lijkt een goed idee :)


Het blijkt idd een oneindige loop te worden

ik ben nu aan het begin en variablele id = 0
Query net uitgevoerd en subid = 3
ik ben nu aan het begin en variablele id =
Query net uitgevoerd en subid = 3
ik ben nu aan het begin en variablele id =
Query net uitgevoerd en subid = 3
etc

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
seweso schreef op 07 april 2004 @ 21:19:
[...]
Hoe weet jij wat er in zijn database staat? En als je dat niet weet dan zit daar wellicht het probleem...
Dan blijf ik bij mijn punt: de code is goed. Het ligt aan iets anders. :P

Ow gezien de debug resultaten moet je dus ook nog checken of subid leeg is.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het werkt weer :) Thnx all!

Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Dat is dan 5 euro

seweso's blog


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je bent wel flauw bezig in dit topic hoor seweso _/-\o_

Hopelijk heeft de TS weer wat debugging kunstje bijgeleerd.
Pagina: 1