PHP - gestion des erreurs , debogage et écriture du code

Octobre 2017


PHP - gestion des erreurs , debogage et écriture du code

Afficher les erreurs PHP

Avant toute chose.... il est conseillé lorsque vous êtes en train de developper, d'activer
l'affichage des erreurs PHP.
Vous pouvez faire cette configuration dans le fichier php.ini de votre serveur et/ou directement
dans le code de vos pages (en tout premier....) en y ajoutant ces quelques lignes
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


Dans le fichier php.ini, les instructions se trouvent dans un bloc tel que celui-ci
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; error_reporting is a bit-field.  Or each number up to get desired error
; reporting level
; E_ALL             - All errors and warnings (doesn't include E_STRICT)
; E_ERROR           - fatal run-time errors
; E_WARNING         - run-time warnings (non-fatal errors)
; E_PARSE           - compile-time parse errors
; E_NOTICE          - run-time notices (these are warnings which often result
;                     from a bug in your code, but it's possible that it was
;                     intentional (e.g., using an uninitialized variable and
;                     relying on the fact it's automatically initialized to an
;                     empty string)
; E_STRICT     - run-time notices, enable to have PHP suggest changes
;                     to your code which will ensure the best interoperability
;                     and forward compatibility of your code
; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
;                     initial startup
; E_COMPILE_ERROR   - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR      - user-generated error message
; E_USER_WARNING    - user-generated warning message
; E_USER_NOTICE     - user-generated notice message
;
; Examples:
;
;   - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
;   - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
;   - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
;   - Show all errors except for notices and coding standards warnings
;
error_reporting  =  E_ALL & ~E_NOTICE

Mettre du debug

Bien souvent, un script ne fonctionne pas comme nous le souhaitons mais nous ne savons pas où se situe le problème.
Pour le trouver... le plus simple et d'ajouter, dans son code, un peu de debug.
Le moyen le plus simple est d'afficher le contenu des différentes variables.
Pour un "string" un simple
echo $montexte;
suffit.
Lorsqu'il s'agit d'un objet ou d'un array, l'instruction
print_r($mavariable);
fera l'affaire.


Bien sûr il existe d'autres instructions telle que le var_dump mais je vous laisse regarder par vous même..

Ecrire correctement ses instructions PHP

Il n'existe aucune réelle obligation pour écrire votre code.
Il existe, par contre, une norme dont vous pouvez vous inspirer.
il s'agit de la norme PSR:
http://www.php-fig.org/psr/psr-2/

Récupérer PROPREMENT les variables AVANT de les utiliser

Lorsque l'on utilise des variables (que ça soit des variables provenant de POST, GET, SESSION, COOKIE ....) il est préférable de les "récupérer" proprement avant de les utiliser
dans le reste de son code.
Pour se faire, nous allons nous assurer qu'elles existent.. et si oui.. en récupérer leur valeur.

Pour ça, je vous propose d'utiliser les fonctions ISSET ou !EMPTY (pronnoncez not empty) avec l'écriture ternaire (l'écriture ternaire étant une "sorte" de if/else)
Par exemple :
//Si la variable $_POST['nom'] existe et n'est pas vide, j'en récupère la valeur, sinon je mets la variable $nom à NULL
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;

NB: isset sert à vérifier qu'une variable existe ( IS SET )
!empty vérifie que la variable n'est pas vide ET qu'elle est isset. Il n'est donc pas nécessaire d'utiliser isset lorsqu'on utilise !empty !

Où placer son code php

Pour faciliter la lecture du code et donc sa maintenance et son deubug... on place, en général, le maximum de code php AVANT son code html.
On évite également d'ouvrir/fermer les balises de code php dans tous les sens..

Connecter son code à une base de données mysql

Je ne vais pas refaire un cours sur la connexion à une bdd.
Notez simplement que les anciennes instructions mysql_* sont OBSOLETES !
Il vous faut désormais passer par les extensions mysqli ou pdo.
Voir ici :
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

Puis à lire ceci :
http://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Souci avec ma reqête SQL

En cas de soucis avec une de vos requêtes SQL, il faut commencer par la tester DIRECTEMENT dans votre BDD.
Soit en utilisant (si il est installé) PHPMYADMIN, soit en utilisant (si vous le pouvez..) un client lourd tel que HeidiSQl ou MysqlWorkbench...
Par exemple : http://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql

A voir également


Publié par jordane45.
Ce document intitulé «  PHP - gestion des erreurs , debogage et écriture du code  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.