2010-06-14 11 views
0

si vous utilisez la fonction serveur renvoie une erreur de configuration incorrecteerreur récursion fonctionnement

function build_path($cid) 
    { 
     $result = array(); 
     $DB = new MySQLTable; 
     $DB->TblName = 'shop_categories'; 
     $where['cat_id']['='] = $DB->CleanQuest($cid); 
     $res = $DB->Select('cat_id,cat_name,cat_parent', $where); 
     if($res !== 'false') 
     { 
      $pid = mysql_fetch_array($res); 
      if($pid['cat_parent'] !== 0) 
      { 
       Echo $pid['cat_parent']; 
       build_path($pid['cat_parent']); 
      } else { 
       Echo $pid['cat_id']; 
       return true; 
      } 
     } 
     return false; 
    } 

Je ne peux pas trouver une erreur ici. S'il vous plaît aider.

Désolé de vous déranger tous. Le problème était en comparaison 'if ($ pid [' cat_parent ']! == 0)': $ pid ['cat_parent'] était une chaîne avec int (0)

Puis-je construire cette fonction pour stocker le chemin complet sans utiliser GLOBALS et SESSION vars?

+0

Quelle est l'erreur complète? –

+0

Erreur interne au serveur 500 – GOsha

+1

Que contient le journal des erreurs? En outre, votre vérification de $ res par rapport à la chaîne 'false' en mode sensible au type est absurde. Voulez-vous dire 'if ($ res! == false)' à la place? – Charles

Répondre

0

choses à vérifier:

  1. est-cat_parent jamais nulle?
  2. Existe-t-il des paires parentales récursives (A est parent de B, B est parent de A, A-> B, B-> C, C-> A)?
  3. Y a-t-il des cas où la ligne est auto parented (A est parent de A)

Essayez de faire cette modification (pour le débogage):

function build_path($cid) { 
    static $done = array(); 
    if (isset($done[$cid])) { 
     throw new Exception('We have already looked up CID: '.$cid); 
    } else { 
     $done[$cid] = true; 
    } 
    //....... 
} 

qui vous permettra de dire si vous J'ai une boucle récursive en cours.

Également, définissez error_reporting au maximum et vérifiez votre journal des erreurs. Je suppose que c'est soit un débordement de pile (votre récursion va trop loin) ou un problème de limite de mémoire (qu'il utilise trop de mémoire et est tué) ...