Problème gestion des erreurs dans php 5

@Fredrick
Invité n'ayant pas de compte PHPfrance

06 mars 2009, 14:46

Bonjour,

Existe t-il un moyen (ou une astuce) pour gérer les erreurs avec php ? je vous explique mon cas :

Je suis en train de créer une appliweb permettant d'administrer et d'effectuer des requêtes mysql, l'utilisateur a le moyen d'entrer des commandes SQL via un formulaire. Si la commande est correcte, le résultat s'affiche dans un tableau, mais s'il y a une erreur (par exemple utiliser une table inexistante) je tombe sur la page d'erreur de php, ce qui bloque complétement mon application.

Y a t-il un système genre try/catch permettant de renvoyer l'utilisateur vers une page d'erreur que j'aurai préalablement créée à cet effet ?



Merci.

Eléphant du PHP | 70 Messages

06 mars 2009, 14:57

Tout simplement en redirigeant l'utilisateur vers la page error en cas d'exception.
try
{
     throw new Exception();
}
catch(Exception $e)
{
     header('loaction:errorPage.php'); 
}

@Fredrick
Invité n'ayant pas de compte PHPfrance

06 mars 2009, 15:07

Merci mais j'ai déja essayé un try/catch, mais en php ça fonctionne seulement pour les exceptions, pas pour les erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 mars 2009, 15:31

Il te suffit d'utiliser le résultat de la fonction mysql_query() si ta base est MySQL.

Cette fonction retourne FALSE en cas d'erreur dans le traitement de la requête. Tu peux ainsi savoir si la requête à réussi ou non et rediriger l'utilisateur ou lui afficher le message d'erreur de ton choix :)
<?php
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
    die('Requête invalide : ' . mysql_error());
}
?> 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

06 mars 2009, 16:07

tu peux également utiliser PDO, et lever les exceptions PDO dans un try catch, ou encore implémenter une gestion personalisée des erreurs (et d'envoyer des exceptions "personnalisées") avec la fonction set_error_handler (mais cette solution me semble un peu plus "périlleuse")