steph13 Posté 20 Juin 2006 Partager Posté 20 Juin 2006 (modifié) Bonjour le Hub, Petite question. J'execute un script dans ce style for ($i=0; $i<10; $i++)(...) instruction if >> si ok je continue // si erreur, je kill le script Hors, dans l'instruction if, au lieu de tuer le script, je souhaiterais récupérer l'erreur dans une variable, et revenir au debut du code, soit sur la boucle "for". Comment puis je faire cela ? Merci de vos eclairages divers et variés. Stef' Modifié 20 Juin 2006 par steph13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ludo88 Posté 20 Juin 2006 Partager Posté 20 Juin 2006 instruction if >> si ok je continue // si erreur, je kill le script Si ce que tu veux faire c'est juste continuer la boucle for il te suffit de ne rien faire à part : $erreur[]="probleme à l'enregistrement ".$i; A la fin de ta boucle tu rajoutes un print_r($erreur) et toutes les lignes ou tu as des erreurs vont apparaitre. Si ce n'est pas ca que tu voulais précises ta question. Ludo Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 20 Juin 2006 Partager Posté 20 Juin 2006 Bonjour, la gestion d'erreurs fait l'office d'un explicatif complet dans le manuel PHP... mais ce n'est pas "exactement" ce que tu demande... Pour "sortir" d’une boucle tu as l'instruction break qui arrête la boucle et qui exécute le code se trouvant après... Une autre possibilité, si ton script est appelé depuis un autre fichier avec un include ou un require, est d'utiliser la fonction return... Ainsi lorsque cette fonction est appelée dans le fichier qui a été "inclu", le reste du fichier n'est pas appelé et le script contenu a être interprété depuis la ligne qui suit l'appelle à include ou require (dans le fichier de base, depuis lequel tu as fait l'appelle pour "l'inclusion"). Dans la gestion de retour pour un formulaire ça peut être utile par exemple... mais toutes les instructions qui ont été effectuées par ton script avant ce "retour" auront été effectuées...le script ne peut pas annuler des actions qui vient de s'exécuter juste en utilisant ce genre de technique...d'ailleurs il ne peut tout simplement pas le faire... tu devrais le faire toi même. Une autre méthode pour la gestion d'erreur (très utilisée dans le framework PHP en général) est la variable de session...et lorsque l'erreur se produit, le script redirige l'utilisateur vers un page et juste avant cela enregistre le message d'erreur dans une variable de session (un tableau en général)... Cela a un inconvénient, c'est qu'il faut obligatoirement gérer une session, mais comme c'est souvent le cas dans une application, pourquoi pas EDIT: Pardon, je t'avais mal compris... le break en l'occurence ne va pas t'aider si tu souhaite continuer ta boucle Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 20 Juin 2006 Partager Posté 20 Juin 2006 Bonjour Hors, dans l'instruction if, au lieu de tuer le script, je souhaiterais récupérer l'erreur dans une variable, et revenir au debut du code, soit sur la boucle "for". Dans ce cas, à mon avis, le mieux est de créer une fonction. Si tu as une erreur, tu quitte la fonction avec return(), ce qui te permet au passage de récupérer l'erreur. Ensuite, rien de compliqué à rappeller la fonction pour "revenir au debut du code" Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 20 Juin 2006 Auteur Partager Posté 20 Juin 2006 Merci à toi Ludo, cela répond en partie à mon besoin. Je vais tenter d'être plus precis dans ma démarche: En effet, je souhaite pouvoir continuer ma boucle for. Celle ci est la pour me permettre de traiter l'envoi de photos. Un formulaire permet l'envoi de dix photos. Pour chacune, je traite: Le poids, l'extension, et la categorie. Si l'une de ces trois conditions n'est pas convenablement remplis, il y a redirection sur une page d'erreur. Ce qui me convient à moitié. Je voudrais pouvoir récupérer l'erreur en question, la stocker dans une variable, passer à l'image suivante. En fin de boucle, je redirige vers une age qui affiche les images et un rapport d'upload avec les éventuelles erreurs. Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 20 Juin 2006 Partager Posté 20 Juin 2006 En effet, je souhaite pouvoir continuer ma boucle for.Celle ci est la pour me permettre de traiter l'envoi de photos. Pour ca tu peux utiliser l'instruction continue qui te permet de "zapper" la suite dans la boucle et de passer à l'itération suivante. Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 20 Juin 2006 Auteur Partager Posté 20 Juin 2006 (modifié) Edit: J'avais zappé des réponses ! Toutes mes excuses. The_Rec, je viens de regarder la page que tu as mise en lien sur la gestion d'erreur, ouarf! C'est du costaud lol Pour la fonction return, je vais regarder cela de plus près égalemant. Concernant la structure de mon appli pour cette partie: Page qui appel le form via un include >> envoi au script qui traite le formulaire >> on finis sur une dernière page qui affiche les photos. Norseb; Merci pour l'info également, je vais regarder cela aussi. Dans tout les cas, je pense que je vais revenir vers vous d'ici peu Merci à vous pour ces infos, j'ai déja de quoi creuser plus avant. Modifié 20 Juin 2006 par steph13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 20 Juin 2006 Auteur Partager Posté 20 Juin 2006 (modifié) Une autre méthode pour la gestion d'erreur (très utilisée dans le framework PHP en général) est la variable de session...et lorsque l'erreur se produit, le script redirige l'utilisateur vers un page et juste avant cela enregistre le message d'erreur dans une variable de session (un tableau en général)... Cela a un inconvénient, c'est qu'il faut obligatoirement gérer une session, mais comme c'est souvent le cas dans une application, pourquoi pas Hum, ca m'interesse cette histoire avec les sessions. Car je viens de lire tout les liens proposé, et j'avour ne pas vraiment trouver mon bonheur. La solution de Ludo me semblait bien, mais j'ai un petit soucis pour transmettre les erreurs d'une page à l'autre. Donc, les sessions, cela peut être bon, car tout ceci se passe dan un espace, et donc, il y a déja des sessions. Par exemple : //on verifie que le membre a bien selectionné une catégorie pour chaque photo$categorie=$_POST['categorie'][$i]; if($categorie=='14'){ >>si la categorie est egale a '14', c'est une erreur, donc: >>je suppose que c'est ici que je dois donc initialiser la variable.continue; // pour passer au traitement de l'image suivante } Modifié 20 Juin 2006 par steph13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ludo88 Posté 20 Juin 2006 Partager Posté 20 Juin 2006 si c'est juste pour passer d'un page a l'autre : tu peux aussi stocker dans $erreur qui est une string à la place d'un tableau : cf : if($probleme){$erreur+="Erreur à l'upload de l'enregistrement ".$i." §§";} a la page suivant tu "exploses" $tab_erreur=explode("§§",$_request["erreur"]); print_r($tab_erreur); C'est pas tres tres propre mais ca t'evite de faire compliqué pour un truc simple. Ludo Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 20 Juin 2006 Auteur Partager Posté 20 Juin 2006 Merci à toi Ludo, J'ai préféré opté pour la gestion via les sessions, avec les quelles je bataille en ce moment même Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 20 Juin 2006 Partager Posté 20 Juin 2006 Tout d'abord tu trouvera beaucoup d'exemple de gestion de sessions dans le manuel PHP à ce sujet. Une fois ta session "démarrée", il faut utiliser le tableau de superglobales $_SESSION (dans la même lignée que $_POST, $_GET on n'utilise plus le $HTTP_SESSION_VARS). Il y a une fonction pour enregistrer un variable de session, mais tu peux tout aussi bien le faire directement comme avec un tableau "normal", selon le code que tu mas donnée : $_SESSION['errors']= array(); for($i=0; $i <= $valeurlimite; $i++) { // boucle d'exemple //on vérifie que le membre a bien sélectionné une catégorie pour chaque photo $categorie=$_POST['categorie'][$i]; if($categorie=='14'){ $_SESSION['errors'][] = 'La ligne '.$i.' a causé une erreur'; //cette ligne n'est pas bonne je pense !! } } if(!empty($_SESSION['errors'])) { // Redirection vers ta page ou tu souhaite afficher l'erreur... la fonction redirect est a écrire par tes soins // Une redirection avec headers sera très bien si tu n'as pas envoyé d'autres données au navigateur avant de la faire redirect('page_erreur.php'); } Ensuite sur la page d'erreur tu démarre à nouveau la session (soit tu as passé l'identifiant de session par l'URL soit par un cookie (c'est le comportement par défaut sur la majorité des serveurs, regarde le manuel à ce sujet)) et tu auras accès à ce tableau : if(!empty($_SESSION['errors'])) { foreach($_SESSION['errors'] as $error) { echo '<p>'.$error.'</p>'; } } Ainsi chaque erreur est affichée...sur une autre page, après avoir redirigé l'utilisateur... Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 20 Juin 2006 Auteur Partager Posté 20 Juin 2006 (modifié) Edit: Autant pour moi, je n'avais pas bien lu le dernier post. Tout est OK !!! Merci de votre aide à tous. Modifié 20 Juin 2006 par steph13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 20 Juin 2006 Partager Posté 20 Juin 2006 Sans avoir le reste du code de ta page d'erreur ça me semble difficile de te dire pourquoi :S Essaie peut être : echo '<pre>'; print_r($_SESSION); echo '</pre>'; Au début de ton fichier pour voir ce qui se trouve dans ton tableau de variables de sessions. Je ne vois pas comment un foreach pourrait fonctionner pour une itération et pas pour les suivantes, à moins que ton tableau soit "effacé" à l'intérieur d'une itération...et encore le foreach travaille sur une copie du tableau en arrière-scène. A moins que tu sois en PHP5 et que tu passe le tableau en référence (avec un & devant le nom de variable). EDIT : Alors peux-tu donner la raison de ton problème...cela aidera peut-être d'autres qui se trouveront ou se trouvent dans le même cas que toi. Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 20 Juin 2006 Auteur Partager Posté 20 Juin 2006 Donc, j'ai suivi les conseils de TheRec. Dans le script qui gère l'upload: $_SESSION['errors']=array();(...)//on verifie que le membre a bien selectionné une catégorie pour chaque photo$categorie=$_POST['categorie'][$i]; if($categorie=='14'){ $_SESSION['errors'][]=$i; continue; } Dans la page qui affiche les images ET les erreurs éventuelles : foreach($_SESSION['errors'] as $error) { echo '<p>La photo '.$error.' n\'a pas été envoyée : Pas de catégorie selectionée.</p>'; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant