Apache schmiert durch Rekursion ab

sasfed

Mitglied
Hallo zusammen!

Hab ein Problem mit meinem Suchskript. Der Quelltext sieht wie folgt aus:

Code:
<?
 function categories($cat){
  $csql="SELECT CID, c_name, c_upper FROM categories WHERE CID='$cat'";
  $t_cat=mysql_query($csql);
  $cat=mysql_fetch_array($t_cat,MYSQL_ASSOC);
  echo $cat['c_name'];	
  categories($cat['c_upper']); 
 }

 function suchen($arg){
   $sql="SELECT p_name, p_description, categories.c_name, p_CID FROM products INNER JOIN categories ON (p_CID = CID) WHERE p_name LIKE '%$arg%' OR p_description LIKE '%$arg%' OR c_name LIKE '%$arg%'";
   $t_search=mysql_query($sql);
   $zaehler=0;
   while($search=mysql_fetch_array($t_search,MYSQL_ASSOC)){
     $name[$zaehler]=$search['p_name'];
     $id[$zaehler]=$search['p_CID'];
     $zaehler++;
   }
   
   for($i=0;$i<$zaehler;$i++){
     categories($id[$i]);
     echo $name[$i];
   }
      

 }
 
 
 
     echo "<form action='index.php?nav=search' method='post'>";
		echo "<h1>Kriterium:</h1><br><input type=text name=argument size=60 maxlength=100></h3>";
	    echo "<input type=hidden name=start value=go>";
	   echo "<br><br><input type=submit value='Eintragen'>";
	echo "</form>";

	if($_POST['start']=='go'){
		suchen($_POST['argument']);
	}
?>

Das Skript funktioniert soweit eigentlich ganz gut. Bis auf die Rekursion in der function categories. Laß ich das categories($cat['c_upper']); weg geht es. Mach ich es doch dann schmiert mir der Apache ab. Und zwar mit der Meldung "Apache.exe hat einen Fehler verursacht...blabla". In der error.txt sind folgende Bemerkungen verzeichnet:

[Wed Apr 20 09:57:17 2005] [notice] Parent: child process exited with status 3221225725 -- Restarting.
[Wed Apr 20 09:57:20 2005] [notice] Apache/2.0.53 (Win32) mod_ssl/2.0.53 OpenSSL/0.9.7e PHP/5.0.3 configured -- resuming normal operations
[Wed Apr 20 09:57:20 2005] [notice] Server built: Feb 16 2005 16:01:30
[Wed Apr 20 09:57:20 2005] [notice] Parent: Created child process 888
[Wed Apr 20 09:57:25 2005] [notice] Child 888: Child process is running
[Wed Apr 20 09:57:25 2005] [notice] Child 888: Acquired the start mutex.
[Wed Apr 20 09:57:25 2005] [notice] Child 888: Starting 250 worker threads.

Wäre super wenn mir jemand weiterhelfen könnte!

viele Grüße
sasfed

Nachtrag: War mir nicht ganz sicher ob es in diesem Forum richtig ist, da es ja auch ein Problem mit dem Apache sein könnte. Aber da es ja nur an der Rekursion zu liegen scheint hab ich es jetzt mal hier gepostet.
 
So wie ich das sehe, ruft sich deine Funktion categories IMMER selber auf, was eine endlose Rekursion bedeutet und letztendlich zu einem Stag-Overflow führt.
Irgendwo musst du auch aus der Rekursion aussteigen, z.B. so:
PHP:
if($cat['c_upper'] != NULL) {
categories($cat['c_upper']);
}
 
Zuletzt bearbeitet:
Dir fehlt eine Abbruchbedingung, wie z.B. wenn c_upper ungleich 0 ist, dann rufe die Funktion noch mal auf, wenn es gleich 0 ist, dann rufe sie nicht noch mal auf.
Unter der Annahme, dass Du Deiner obersten Kategorie die c_upper 0 zuweist.

Gruß hpvw
 
Klasse! Das war es! Vielen Dank!

Hab gedacht die Rekursion würde automatisch beendet werden wenn FALSE bzw. 0 an die Funktion übergeben wird....
 
Zurück