IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestion d'exception : rediriger vers page et interrompre le script


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 68
    Points : 40
    Points
    40
    Par défaut Gestion d'exception : rediriger vers page et interrompre le script
    J'ai un script PHP qui fait un traitement en plusieurs étapes, chaque étape peut générer des exceptions.
    Quand je récupère une exception, je veux pouvoir rediriger vers une page d'erreur pour afficher un message, et les autres étapes du traitement ne doivent pas se faire (=le script arrête de s'exécuter)

    J'arrive à rediriger vers une page d'erreur qui affiche mon message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<script>window.location="http://mydomain.com/errorPage.php?message=' . $message . '"</script>';
    Mais le script principal continue de s'exécuter.

    J'ai essayé d'ajouter un exit() juste après, mais alors ma page d'erreur ne s'affiche pas

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Pour rediriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: mapage.php');
    exit;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Quand je met exit() après le header, la page ne s'affiche pas

  4. #4
    Membre averti Avatar de demenvil
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste développeur
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Points : 389
    Points
    389
    Par défaut
    C'est normal car après un exit(); Tu stop complètement toute l’exécution du code php ou autre qui suit.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Mais justement je veux arrêter l’exécution de tout le code qui suit, mais je veux qu'il m'affiche ma page d'erreur.
    Le echo ou header() est écrit AVANT le exit() donc je ne comprend pas pourquoi il s'affiche pas.
    Le meme echo ou header() sans le exit() après m'affiche bien la page d'erreur, donc je ne pense pas que le problème vient de cette ligne.

    Je peux faire die($message) pour afficher mon message d'erreur et arrêter le script, mais j'aurai bien voulu pouvoir afficher ma page avec une belle présentation.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Je comprends pas trop...
    Si tu fais une redirection, c'est précisément pour ne pas afficher la page...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    J'ai un site flash, avec un bouton pour payer.
    Quand je clique sur le bouton, j'ouvre un popup sur la page "achat.php".
    La page achat.php ne contient rien d'affichable, pas de html, pratiquement que des appels à la base de données.
    Le script "achat.php" met en place une transaction en passant par plusieurs étapes : récupérer des infos sur le client, récupérer des infos sur le produit choisi, enregistrer des trucs en base, appeler paypal, etc.

    Imaginons que dès la récupération des infos sur le client j'ai une exception. Alors je veux rediriger vers une page d'erreur appelée "erreur.php" et ne pas exécuter la suite des étapes qui sont dans "achat.php".

    La page erreur.php (qui contient du html et du php) doit s'afficher dans mon popup à la place de achat.php

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Alors je pense avoir compris ce qui n'allait pas :
    Je récupère mon message d'erreur dans l'exception dans "achat.php", je redirige vers ma page d'erreur erreur.php en mettant le message en paramètre : http://domain.com/erreur.php?message=$message

    Apparemment certains messages contiennent un passage a la ligne \n, et alors le header() me sortait une erreur, et le echo <script>window.location=... m'affichait une page blanche.

    Si je met comme message "blabla", ma page d'erreur est bien affichée grâce au header(), et le reste du script achat.php n'est pas exécuté grâce au exit().

    Je peux faire un urlencode() sur ma variable $message avant de l'envoyer dans le GET, mais du coup je me demande si c'est la bonne façon de faire...

    En plus si j'ai des apostrophes dans mon message, ils s'affichent avec un antislash devant dans ma page d'erreur...

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Je ne sais pas si c'est la meilleure façon de faire mais pour les antislash si tu ne fais pas de addslashes de toi-même c'est que les "magic quotes" sont activés dans les options de php (pas bieeeeeeeen xD).

    Ensuite je ne sais pas trop comment je ferais de mon côté mais je ne pense pas que je changerais de page :/. Quitte à afficher une erreur autant l'afficher sur la page en cours. Enfin tout cela dépend vraiment de l'utilisation que l'on veut du service développé donc bon .

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    si je recherche "magic" dans les options de php de mon mamp j'ai juste :
    magic_quotes_sybase = Off

    Je n'utilise pas addslashes
    J'ai essayé rawurlencode, htmlentities, mais j'ai toujours les \ devant mes '

    J'utilise urlencode($message) dans la page achat.php avant de faire ma redirection.
    Dans ma page erreur.php, j'affiche le message dans du html comme ça:
    <p><?php echo $_GET['message']?></p>

    EDIT : je m'en sors avec stripslashes() mais je ne sais pas vraiment ce que ça implique niveau sécurité...

  11. #11
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Hmmm bizarre, tu as quel version de php ?
    Essaye d'ajouter ces lignes dans ton php.ini et redémarre le serveur :

    magic_quotes_sybase = Off
    magic_quotes_runtime = Off
    magic_quotes_gpc = Off
    On sera au moins sûr que tout est désactivé, je ne sais pas comment fonctionne mamp la dessus .

    Edit : devoir utiliser stripslashes() alors que tu ne les as même pas mis c'est assez lourd je trouve xD. Le mieux c'est quand on contrôle son code de bout en bout je pense

Discussions similaires

  1. [2.x] Rediriger vers page de login si sessions inexistantes
    Par cid007300 dans le forum Symfony
    Réponses: 1
    Dernier message: 10/01/2014, 18h29
  2. Réponses: 2
    Dernier message: 02/07/2011, 12h34
  3. Réponses: 1
    Dernier message: 03/12/2010, 15h22
  4. gestion des exceptions via <error-page>
    Par mrjeronimo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 16/08/2010, 13h26
  5. [PHP-JS] Rediriger vers une autre page
    Par Vlacar dans le forum Langage
    Réponses: 13
    Dernier message: 10/04/2006, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo