Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
Le debuggage
Tuto écrit par LionZion, revu par Molokai et Raf en août 2004

Si cela peut vous rassurer, il est rare qu'on arrive à faire un script qui marche du premier coup. Mais avant de vous jeter sur le premier forum qui passe, prenez le temps de chercher seul votre probleme, car bien souvent vous êtes à même de le résoudre seul. De plus, vous retiendrez mieux votre erreur si vous la trouvez seul que si on vous donne la réponse. Pour cela voici un petit guide non exhaustif du debuggage et comment réaliser un script php.

Avant tout, quand vous commencez à réaliser un script, n'attendez pas le dernier moment qu'il soit fini pour l'éxécuter. Testez au fur et à mesure, vous aurez moins de mal à debugger ainsi.

>>> Les sources d'information

Tout d'abord, apprenez a vous servir d'un outil essentiel : la doc officielle. C'est une mine d'informations sur PHP. Vous y trouverez des explications sur toutes les fonctions PHP qui sont parfois accompagnées de morceaux de codes. Si vous avez un doute sur une fonction, c'est dans la doc que vous devez cherchez en premier. Le chapitre intitulé Référence est très interessant pour apprendre PHP car il explique la syntaxe, les structures de contrôle, les variables,... Avant de commencer à realiser vos scripts, assurez-vous que vous maitrisez ce chapitre, il est essentiel, sinon gare aux fameuses "parse error" ! Elle existe en plusieurs formats (html,pdf,...) et vous pouvez la télécharger sur ce site.

Lorsque vous ne savez pas comment faire pour parcourir un tableau, comment connaître le nombre de caractères d'une chaîne ou bien comment lister les fichiers d'un répertoire , vous pouvez utilisez les faq qui sont très pratiques pour ce genre de probleme. En voici deux particulièrement intéressantes :
FAQ PHPINDEX
FAQ FCIWAP

N'hésitez pas aussi a regardez comment les autres font. Il peut être très enrichissant d'étudier des scripts comme Phorum ou phpMyAdmin ou encore Les Visiteurs. Attention, il ne s'agit pas non plus de copier bêtement le code.

Vous trouverez aussi de nombreux tutoriels expliquant certaines particularités de php, comme les sessions, ou les tableaux par exemple, sur ce site mais aussi sur des sites comme phpinfo.net ou phpfrance.com. N'hésitez pas à les consulter ils sont très intéressants.

>>> Règles de codage

Dans un script, les commentaires sont essentiels. Il permettent de vous y retrouver dans votre code. N'hésitez pas à les utiliser quitte à écrire quelque chose qui vous paraît evident sur le moment : quelques mois plus tard cela ne le sera peut être plus. Cela permet aussi a ceux qui relisent votre code de mieux comprendre ce que vous faites. Sachez aussi que les commentaires ne ralentissent en rien l'éxécution du code, alors commentez !

Il est important aussi que votre code soit clair et propre. Une règle importante est une instruction = une ligne. N'hésitez pas aussi à indentez votre code lorsque vous utilisez des boucles ou des structures conditionnelles. Par exemple:

Code bien présenté Code mal présenté
 <?
 if ( $i < $a )
 {
 // code
 }
 else
 {
 // code
 }
 ?>
<? if($i<$a){// code}else{// code} ?>

>>> Les erreurs courantes

L'erreur la plus courante, mais aussi la facile à corriger, est la "parse error on line x". Il s'agit d'une erreur de syntaxe. Lorsque cette erreur se produit, il se peut que vous ayez oublié un ; a la fin d'une instruction par exemple, des mélanges entre simple quote ' et double quote " ou bien un oubli de ) ou de }. Sachez aussi que l'erreur peut se produire à la ligne x qu'indique php, ou bien avant, mais jamais après. Une solution pour éviter ce genre d'erreur est d'utiliser un editeur de texte qui propose la coloration syntaxique. Bien souvent cela vous permettra de detecter des erreurs de syntaxe.

Les erreurs dues à des requêtes vers mysql sont aussi très fréquentes. Pour comprendre d'où vient l'erreur, l'astuce primordiale est de tester ses requêtes. Voici un exemple pour tester ses requêtes (merci Perrich !) :
<?
$requete = "SELECT * FROM matable WHERE champ='toto'";
$query = mysql_query($requete) or die ('ERREUR '.$requete.' '.mysql_error());
?>
La fonction mysql_error() renvoie une description de l'erreur précisant par exemple qu'aucune table n'a été séléctionnée. N'hésitez pas à utiliser cette astuce à CHAQUE requête, vous gagnerez du temps par la suite à debugger.

Une autre erreur assez courante est celle-ci 'Header already sent...'. Cela signifie que du texte a déjà été envoyé avant l'envoi des entêtes http par le serveur. Les fonction concernées par l'envoi d'headers sont session_start(), setcookie() et bien evidemment header(). Par conséquent, avant ces fonctions, il ne faut aucun affichage de texte, c'est à dire aucun appel à la fonction echo par exemple.

Si vous ne trouvez toujours pas l'erreur, n'hesitez pas à vérifier le contenu de vos variables tout au long du scripts. Pour cela, un simple echo $variable; suffit. Si la variable ne contient pas ce que vous souhaitez, alors revérifiez le code avant le echo, l'erreur est avant. Si la variable contient ce que vous voulez, alors effacez cettte instruction et refaites un echo un peu plus loin. Au fur et à mesure vous trouverez l'endroit qui ne va pas et vous pourrez corriger.

Pensez aussi à tester vos structures conditionnelles. En faisant des echo à l'interieur, vous saurez si oui ou non php est rentré à l'intérieur d'une boucle ou si la condition est vérifiée ou non.

Si vous avez le code suivant... .. pour debugguer faites ceci :
 if($toto == $tata)
 {
 // code
 }
 else
 {
 // code
 }
 if($toto == $tata)
 {
 echo $toto,' est egal à ',$tata;
 // code
 }
 else
 {
 echo $toto,' est différent de ',$tata;
 // code
 }
 for($i=0;$i<$u;$i++)
 {
 // code
 }
 for($i=0;$i<$u;$i++)
 {
 echo $i;
 }

Voici trois erreurs qui peuvent paraître évidentes, mais c'est le genre d'erreur sur lesquels on passe dix minutes avant de les trouver, surtout quand on est fatigué, alors je les signale :-)

Ne faites pas ça... ... mais plutôt ça : Explication
 for($i=0;$i<10;$i++)
 {
 //code
 for($i=0;$i<5;$i++)
  {
  // code
  }
 }
 for($i=0;$i<10;$i++)
 {
 //code
 for($a=0;$a<5;$a++)
  {
  // code
  }
 }
En donnant le même nom de variable pour le compteur dans les deux boucles, vous risquez de créer des bugs. Selon les cas, cela peut produire des boucles infinies, ou bien votre compteur va sauter des tours. Bref, par principe, donnez deux noms de compteurs différents lorsque vous avez deux boucles incluses l'une dans l'autre.
 for($i=0;$i<10;$i++)
 {
 echo "n° du prochain tour".$i++;
 }
 for($i=0;$i<10;$i++)
 {
 echo "n° du prochain tour".$i+1;
 }
En faisant $i++, vous incrementez de 1 la valeur de $i, et donc $i va augmenter de deux a chaque tour, et non plus de 1 comme voulu.
 for($i=0;$i<10;$i++)
 {
 $text = 'Tour n°'.$i.'effectué<br>';
 }
 for($i=0;$i<10;$i++)
 {
 $text .= 'Tour n°'.$i.'effectué<br>';
 }
Lorsque dans une boucle à chaque tour vous voulez compléter une variable, pensez à rajouter un . devant le signe =, sinon a chaque tour $text est remplacé par une nouvelle phrase, au lieu d'etre complété

>> Désespéré ?

Enfin, si vraiment vous n'avez pas réussi à debugger votre scripts, rendez-vous sur un forum où il y aura toujours quelqu'un pour vous répondre. Mais avant, prenez le temps de chercher dans les anciens messages du forum, votre réponse s'y trouve sûrement, et cela evitera de poster une enième fois la même question ! N'oubliez pas que cela marche dans les deux sens, n'hesitez pas à votre tour d'aider sur les forums si vous pensez pouvoir apporter une aide.

Vous pouvez aussi vous rendre sur le chat de ce site, et utiliser le wall pour déposer votre code.

>>Suggestion

Bien sûr ce tutorial est loin d'être exhaustif, donc si vous avez d'autres conseils pour le deboguage et la manière de réaliser un script, n'hésitez pas à me le dire



Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2017 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques