[PhP]Boucle infinie ???

Résolu/Fermé
Utilisateur anonyme - 20 janv. 2006 à 16:08
 Utilisateur anonyme - 23 janv. 2006 à 11:16
Bonjour,

J'ai écris un code mais j'ai le droit a une fatal error ...
J'ai peur d'avoir écrit une boucle infinie ... je voudrais votre avis
$SR='';
				for($serviceRecept;strlen($serviceRecept)>=3;substr($serviceRecept, 0, -2)){
$s=substr($serviceRecept,-2,1);
$QueryService = faire_requete("SELECT * FROM folder WHERE id=$s");
$ResultService = mysql_num_rows($QueryService);
   for($qf=0;$qf!=$ResultService;$qf++){
      $SR .= mysql_result($QueryService, $qf,"folder");
  }
   if(strlen($serviceRecept)>=3){ 
      $SR .=",";
   }
}


$SR est une variable que je veux remplir
$serviceRecept est une chaine de caractéres de type -1-1-1- où chaque numérique est séparé par un -

Donc l'objectif de ce code est de sortir les "1" un par un pour trouver leur correspondance dans une autre table et de construire une variable SR du type Nom1, Nom2, Nom3, ...

Je ne suis pas trés doué avec les for et je crains qu'il ne génére de boucle infinie
for($serviceRecept;strlen($serviceRecept)>=3;substr($serviceRecept, 0, -2)){

Donc j'utilise une variable existante ($serviceRecept)
Tant que sa longueur est supérieur ou égale à 3 la boucle doit continuer
J'enléve les deux dernières caractéres à ma variable $serviceRecept ...

Est ce que j'ai écrit ??
Qu'en pensez vous ??
Merci d'avance pour votre aide

2 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 janv. 2006 à 23:56
Non ça ne va pas parce que substr() renvoie une chaîne mais ne modifie pas du tout la chaine passée en paramètre, donc ta chaine reste intacte après l'execution de substr, donc sa longueur aussi, d'où la boucle infinie.

Si tu veux une solution rapide, prend explode qui transforme une chaine en tableau (en séparant les différents éléments à partir d'une sous-chaine séparatrice).

$id_liste=explode('-', $serviceRecept);
$SR=array();
foreach ($id_liste as $id)
{
        /*Avec explode, si la chaine commence ou fini avec le séparateur, alors
        la premiere et dernière case du tableau seront vide. Si c'est le cas on
        passe ces cases */
        if (!$id){
              continue;
        }
        $req=mysql_query("SELECT * FROM folder WHERE id='$id'");
        $result=mysql_fetch_assoc($req);
      
       /*Bidule est le nom du champs que tu veux récupérer dans ta table
       D'ailleurs si tu n'as qu'un champs à récuperer, tu n'as pas besoin de
       tout prendre dans ta table... */
        $SR[] = $result['bidule'] ;
}
/*On assemble tous les résultats dans une chaine avec la virgule qui lie les éléments */
$SR=implode(',', $SR);
0
Utilisateur anonyme
23 janv. 2006 à 11:16
Merci ...
0