|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Cédric Développeur Java / Web / .NET Inscription : janvier 2009 Messages : 327 ![]() |
Bonjour,
Dans un soucis de faire une gestion d'erreur la plus propre possible je voulais savoir sil y avait moyen de déclencher un traitement dans le or die. C'est à dire que plutôt d'afficher directement un message sous cette forme: Code :
mysql_query($query) or die("Mon message d'erreur"); Merci. |
|
|
00
|
|
|
#2 |
|
Débutant
Laurent Webmaster Inscription : octobre 2006 Messages : 2 873 ![]() |
Un petit tour sur Google (la question m'intéressait) m'a montré qu'on pouvait passer en paramètre de die une chaîne de caractères qui s'affichera.
|
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Cédric Développeur Java / Web / .NET Inscription : janvier 2009 Messages : 327 ![]() |
Oui c'est ce que je fais actuellement dans mon code (comme dans mon exemple) mais du coup c'est un affichage un peu "sauvage" et si le or die est sur une page non-affichée (un script par exemple) ben il sert a rien quoi...
Moi ce que j'aurais aimé faire c'est genre stocké l'erreur (le ordie) dans un tableau d'erreur que je retournerais à la fin de ma fonction pour l'afficher proprement dans ma page appelante. |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 802 ![]() |
Beh gérer les erreurs proprement au lieu d'utiliser du die() à tout va ?
Prenons une fonction renvoyant false en cas d'échec : Code php :
|
||
|
|
10
|
|
|
#5 | |||
|
Membre éclairé
![]() Cédric Développeur Java / Web / .NET Inscription : janvier 2009 Messages : 327 ![]() |
Citation:
edit: au temps pour moi, par j'ai une requête en insert donc très facilement faisable mais pour le cas d'une reqête de select il faut tester le resultset c'est ça? J'avoue que j'utilise le or die sur tous mes mysql_query par réflexe et parce que j'ai vu ça dans beaucoup de tuto/exemples |
|||
|
|
00
|
|
|
#6 | ||
|
Membre confirmé
![]() |
Bonjour,
Si vous faites un select, il vaut mieux parcourir la liste des résultats: Code :
|
||
|
|
10
|
|
|
#7 | |||
|
Membre éclairé
![]() Cédric Développeur Java / Web / .NET Inscription : janvier 2009 Messages : 327 ![]() |
Citation:
Enfin bon je vais me débrouiller en essayant de faire des choses comme celles que vous m'avez conseillés. Merci de votre aide. |
|||
|
|
00
|
|
|
#8 | ||
|
Membre éprouvé
![]() Guillaume Développeur Web Inscription : décembre 2007 Messages : 353 ![]() |
Code :
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi. - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
|
||
|
10
|
|
|
#9 |
|
Membre éclairé
![]() Cédric Développeur Java / Web / .NET Inscription : janvier 2009 Messages : 327 ![]() |
Ca ressemble beaucoup plus à ce que je voulais faire, j'arrive pas à faire précisément ce que j'espérais mais ça vient de mon code pas de ta proposition.
Merci |
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2011 Messages : 399 ![]() |
Il faut éviter d'utiliser mysql_error() en production pour des questions de sécurité. Elle peut donner des détails compromettant.
Dans le cadre de la fonction mysql_query(), tu peux toujours te baser sur la comparaison avec "false" car, comme l'indique le manuel, en cas d'erreur de la requête (select, insert ou autre) la fonction retourne false. Par ailleurs, je conseille "toujours" de passer des fonctions mysql_* à mysqli_*. C'est quasiment la même librairie mais elle est maintenue, l'autre commence à être dépassée. Tu peux par exemple avoir un "simple" code erreur comme dans ces exemples qui peuvent être utilisable en production (mais assez moche quand même) Sinon, tu peux passer en mode "objet" et utiliser PDO
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery. Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels. Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc... |
|
10
|
|
|
#11 |
|
Membre éprouvé
![]() Guillaume Développeur Web Inscription : décembre 2007 Messages : 353 ![]() |
Shikiryu, je ne vois pas où est le problème avec le mysql_error(), du moment qu'il n'est pas affiché... Là, le mysql error est passé en paramètres à une fonction qui n'affichera pas l'erreur mais l'enregistrera dans une DB ou dans un log (par exemple).
Après, je me trompe peut-être et si c'est le cas, j'aimerais des explications
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi. - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
|
|
00
|
|
|
#12 | ||||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2011 Messages : 399 ![]() |
S'il n'est pas affiché, ça peut aller.
Ce que tu en faisais n'était pas trop indiqué dans ton code précédent. Par contre, tu te rend compte que l'enregistrer dans une BDD alors que l'erreur est lancée sur la connexion à ladite BDD, c'est bizarre Donc, ok, je suis d'accord avec toi pour faire des logs d'erreur. En fait, je tenais juste à éviter que l'OP ne te comprenne pas super bien et fasse un die(mysql_error()). Ensuite, je ne recommande pas d'utiliser die(). Pourquoi ? D'une part tu es limité dans son paramètre (normalement une string) ce qui fait que je ne suis pas sûr que ton code fonctionne tel quel. Peut-être comme ça et encore. Code :
PHP a évolué depuis die() (même si 90% des tutos sur le net l'utilise... *sigh*) Personnellement, je crée une fonction faisant les actions en cas d'erreur (log, poursuite du script, redirection, etc...), je la met en callback de set_error_handler et au lieu d'utiliser die(), j'utilise trigger_error(). Le tout allié à l'affichage ou non des erreurs sur les pages (en production, à éviter). Bien sûr à utiliser si les logs d'erreur PHP de base ne vous suffisent pas. exemple (non-exhaustif, vous gérez les erreurs de la manière dont vous voulez (mail, fichier text, fichier xml avec xsl, bdd,..., vous arrêtez le script avec un exit; ou non après le log, etc) : Code :
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery. Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels. Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc... |
||||
|
10
|
|
|
#13 |
|
Membre éclairé
![]() Cédric Développeur Java / Web / .NET Inscription : janvier 2009 Messages : 327 ![]() |
Ah ça ça me plait encore plus, c'est vraiment propre, facilement compréhensible et ça ouvre de nombreuses possibilités.
Merci de ton aide Shikiryu |
|
|
00
|
|
|
#14 |
|
Débutant
Laurent Webmaster Inscription : octobre 2006 Messages : 2 873 ![]() |
Quelques questions sur la gestion d'erreur de Shikiryu :
|
|
|
00
|
|
|
#15 | |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2011 Messages : 399 ![]() |
Citation:
Personnellement, j'utilise un bootstrap (quelque soit le fichier appelé, la requête passe par un fichier d'amorçage qui met en place l'environnement voulu puis exécute le fichier appelé). Dans la mise en place de l'environnement, j'indique à PHP grâce à set_error_handler et la fonction en paramètre que je veux gérer mes erreurs de telle manière ! Quoi qu'il arrive (même sans utiliser cette technique), ces dernières doivent être placées avant toutes erreurs potentielles si vous voulez les attraper. En fait, cela sert à attraper toutes les erreurs type E_USER (ERROR, WARNING, STRICT, etc...) qu'elles soient provoquer (par trigger_error()) ou non (dans le cas où on fait des erreurs dans le code) Pour le 2e point: trigger_error() accepte 2 paramètres (le 1er étant obligatoire) :
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery. Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels. Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc... |
|
|
00
|
|
|
#16 | ||
|
Débutant
Laurent Webmaster Inscription : octobre 2006 Messages : 2 873 ![]() |
Bonjour ...,
j'ai fait l'essai suivant : Citation:
Citation:
|
||
|
|
00
|
|
|
#17 | ||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2011 Messages : 399 ![]() |
Déjà, 1 fonction dans 1 fonction c'est bof. Mais là c'est une fonction à généraliser (pour qu'elle capte toutes les erreurs)
Dans ton cas, si config.php possède une erreur (ou n'existe pas), une erreur survient alors que error_handler n'est pas connu. Il ne sera pas capter et PHP l'ignorera par la suite. C'est pour cela que je conseillais de le mettre avant toute chose exemple dans ton cas : Code :
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery. Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels. Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc... |
||
|
00
|
|
|
#18 | ||||
|
Débutant
Laurent Webmaster Inscription : octobre 2006 Messages : 2 873 ![]() |
J'ai fait quasiment ça, mais il y a encore un problème ; comme le code est réparti sur 2 fichiers, je mets exactement ce qu'il y a :
traitrequete.php : Code :
Code :
|
||||
|
|
00
|
|
|
#19 | |||||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2011 Messages : 399 ![]() |
Pourquoi mets-tu "set_error_handler('error_handler');" dans une fonction ? C'est un réglage général pour PHP ! Comme ini_set, comme... pas mal de fonction...
La fonction init_mysql() est inutile à moins que tu te connectes à plus d'une base... autant mettre l'include dans la fonction de connexion. Clore la connexion MySQL est "inutile" car comme le traite la documentation de mysql_cose : Citation:
Code :
Code :
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery. Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels. Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc... |
|||||
|
00
|
|
|
#20 | ||||||
|
Débutant
Laurent Webmaster Inscription : octobre 2006 Messages : 2 873 ![]() |
Citation:
connect.php : Code :
Code :
Citation:
|
||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com