Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
Comment simplifier le traitement des erreurs ?
On dit souvent au débutant : "lorsque tu fais un mysql_query, il faut tester le résultat de la requête avant de poursuivre !" ...Parfois on propose des solutions dont la plus courante est :
<?php
$result_set = @mysql_query( $sql )
or die( 'erreur dans la requête : ' . $sql . '<br />' . mysql_error() );
?>
Pour ma part, je fais (je faisais) :
<?php
$result_set = @mysql_query( $sql )
or trigger_error( 'erreur dans la requête : ' . $sql . '<br />' . mysql_error() );
?>
Seulement, actuellement je me suis lancé sur des "proof of concept" (hein Ymage !) dans lequel je menais une réflexion sur l'exploitation des erreurs en tant que processus "normal" de traitement de l'information (je rentre pas dans les détails, j'en parlerai peut-être un jour).
Et c'est là que je me suis dit : "On est trop con, la solution est si simple !"
Désormais, j'utilise mes fonctions de la manière suivante (c'est du sqlite, mais le résultat est pareil) :
<?php
$result_set = sqlite_query( $sql );
?>
Sans "@" ni "or quelquechose".
Par contre, j'ai le code suivant au début de tous mes scripts (merci l'auto_prepend) :
<?php
function error_handler( $errno, $errstr, $errfile, $errline ) {
static $error_functions = array( 'sqlite_query' => 'error_sqlite_query' );
if( 0 === error_reporting() ) return;
$trace = debug_backtrace();
$function = $trace[1]['function'];
if( isset( $error_functions[ $function ] ) ) {
$error_functions[ $function ]($errstr, $errfile, $errline, $trace[1]['args'] );
} else {
echo '<p>Erreur dans le fichier <strong>', $errfile, '</strong>';
echo ' à la ligne <strong>', $errline, '</strong></p>';
echo '<pre class="error">', $errstr,'</pre>';
}
exit;
}
function error_sqlite_query( $errstr, $errfile, $errline, $args ) {
echo '<p>Erreur SQL dans le script <strong>', $errfile, '</strong>';
echo ' à la ligne <strong>', $errline, '</strong></p>';
echo '<p class="error">';
echo sqlite_error_string( sqlite_last_error( $args[0] ) );
echo '</p>';
echo '<p>Requête :<br /><pre class="sql">', $args[1], '</pre></p>';
}
set_error_handler( 'error_handler');
?>
Attention, cette technique n'est valable qu'a partir de la version 4.3.0
Par Frédéric Bouchery
