[PhP]Boucle infinie ??? [Résolu/Fermé]

Signaler
Messages postés
1721
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
-
ZIG1
Messages postés
1721
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
-
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

Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 471
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);
Messages postés
1721
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
185
Merci ...