Scripts et astuces pour débugger du code PHP, connexion MySQL et mail()

Quand on cherche le bug, on le trouve.

carte mère d'ordinateur en réparation, crédit Gigabyte

Activer le rapport d'erreurs PHP

Vous allez avoir un rapport d’erreur extrêmement détaillé avec le contenu de toutes les variables. Coller le code ci-dessus en début de votre script, juste après “<?php”

Activation rapport d’erreurs PHP
error_reporting(E_ALL);   // Activer le rapport d'erreurs PHP . Vous pouvez n'utiliser que cette ligne, elle donnera déjà beaucoup de détails.

$variables get_defined_vars(); // Donne le contenu et les valeurs de toutes les variables dans la portée actuelle
$var_ignore=array("GLOBALS""_ENV""_SERVER"); // Détermine les var à ne pas afficher
echo ("<strong>Etat des variables a la ligne : ".__LINE__." dans le fichier : ".__FILE__."</strong><br />\n");
$nom_fonction=__FUNCTION__;
if (isset(
$nom_fonction)&&$nom_fonction!="") {
  echo (
"<strong>Dans la fonction : ".$nom_fonction."</strong><br />\n");
}
foreach (
$variables as $key=>$value) {
  if (!
in_array($key$var_ignore)&&strpos($key,"HTTP")===false) {
    echo 
"<pre>";
    echo (
"$".$key." => ");
    
print_r($value);
    echo 
"</pre>\n";
  }


Vérifier la connexion à sa base de données MySQL

Créez un fichier que vous appelerez par exemple debug_mysql.php, puis placez-le dans votre hébergement. Renseignez les paramètres relatifs à la connexion à votre base de données MySQL. Si le script dit qu’il existe une entrée et qu’elle contient “Anne NONYME”, alors vous n’avez aucun problème de connexion.

Vous pouvez télécharger ce fichier PHP ici: sql-test.zip (1,5 Ko)

Débogage connexion base MySQL:
<?php
/* Par "Abogil", créer un fichier debug.php */

   
error_reporting(E_ALL);   // Activer le rapport d'erreurs PHP

// ******  Configuration - Debut ******
   
$DBhost  "";  // adresse du serveur SQL
   
$DBName  "";  // nom de la base SQL
   
$DBowner "";  // login SQL
   
$DBpw    "";  // mot de passe SQL
// ******  Configuration - Fin ******
    
      
$fh_db mysql_connect($DBhost$DBowner$DBpw);
      
$Erreur mysql_error();
      echo 
"1- mysql_connect = <strong>" $Erreur "</strong> <br /> <br />\n";
      if (
strlen($Erreur) > 0)   exit;

      
$sel mysql_select_db($DBName$fh_db);
      
$Erreur mysql_error();
      echo 
"2- mysql_select_db = <strong>" $Erreur "</strong> <br /> \n";

      
// if ($sel)   echo " Acces a la DATABASE - '<strong>$DBName</strong>' : OK <br />  <br />";
      
if (is_resource($sel))   echo " Acces a la DATABASE - '<strong>$DBName</strong>' : OK <br />  <br />";
      else        echo 
" ### PB acces a la DATABASE - '<strong>$DBName</strong>' <br /> <br /> ";
      if (
strlen($Erreur) > 0)   exit;

      
//  Supression de la table Tab_test_DB
      
$sql_query="DROP TABLE IF EXISTS `Tab_test_DB` ";    // Requête
      
$result_query=mysql_query($sql_query);     // Exécution de la requête
      
$Erreur mysql_error();
      echo 
"3- \$sql_query=<strong>$sql_query</strong> - \$result_query=<strong>$result_query</strong> <br /> \n";
      echo 
" Supression de la table Tab_test_DB  = <strong>" $Erreur "</strong> <br /> <br />\n";
      if (
strlen($Erreur) > 0)   exit;

      
//  Création de la table Tab_test_DB
      
$sql_query="CREATE TABLE `Tab_test_DB` (  `Id` int(11) NOT NULL auto_increment,  `NOM` varchar(32) NOT NULL default '',  `PRENOM` varchar(32) NOT NULL default '', PRIMARY KEY  (`Id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 ";    // Requête
      
$result_query=mysql_query($sql_query);     // Exécution de la requête
      
$Erreur mysql_error();
      echo 
"4- \$sql_query=<strong>$sql_query</strong> - \$result_query=<strong>$result_query</strong> <br /> \n";
      echo 
" Creation de la table Tab_test_DB  <strong>" $Erreur "</strong> <br /> <br />\n";
      if (
strlen($Erreur) > 0)   exit;

      
//  Ajout d'un enregistrement
      
$sql_query="INSERT INTO `Tab_test_DB`  values ('','NONYME','Anne')  ";    // Requête
      
$result_query=mysql_query($sql_query);     // Exécution de la requête
      
$Erreur mysql_error();
      echo 
"5- \$sql_query=<strong>$sql_query</strong> - \$result_query=<strong>$result_query</strong> <br /> \n";
      echo 
" Ajout d'un enregistrement  <strong>" $Erreur "</strong> <br /> <br />\n";
      if (
strlen($Erreur) > 0)   exit;

      
//  SELECT dans la table Tab_test_DB
      
$sql_query="SELECT Id, NOM, PRENOM FROM `Tab_test_DB` WHERE NOM='NONYME' ";    // Requête
      
$result_query=mysql_query($sql_query);     // Exécution de la requête
      
$Erreur mysql_error();
      echo 
"6- \$sql_query=<strong>$sql_query</strong> - \$result_query=<strong>$result_query</strong> <br /> \n";
      echo 
" SELECT dans la table Tab_test_DB  <strong>" $Erreur "</strong> <br /> <br />\n";
      if (
strlen($Erreur) > 0)   exit;

      
$result_count_row_get mysql_num_rows($result_query);  
      
$Erreur mysql_error();
      echo 
" Nombre d'enregistrements trouves = <strong>$result_count_row_get</strong> <br /> \n";
      if (
strlen($Erreur) > 0)   exit;

      
// Fermeture de la connexion    
      
mysql_close($fh_db);
?>

Tester l’envoi de message via la fonction mail()

Il arrive parfois que les messages n’arrivent pas. Soit ils ne sont pas envoyés car le serveur est en panne, soit ils sont perdus quelque part, soit le script est mal programmé. Voici un script PHP qui fonctionne, il vous aidera à tester la situation. Créez un fichier email.php et copiez le code ci-dessous.

Vous pouvez télécharger ce fichier PHP ici: mail-test.zip (1,1 Ko)

Test fonction mail()
<?php
// TEST FONCTION MAIL() PHP
// CREEZ UNE FICHIER email.php

// *** A configurer
$to "adresse@machin.truc";  
$from  "postmaster@bidule.truc";  

// *** Laisser tel quel
$jour  date("d-m-Y");
$heure date("H:i");

$sujet "Essai Mail - $jour $heure";

$contenu "";
$contenu .= "<html> \n";
$contenu .= "<head> \n";
$contenu .= "<title> Subject </title> \n";
$contenu .= "</head> \n";
$contenu .= "<body> \n";
$contenu .= "Mail au format HTML simple avec la fonction PHP mail().<br> <b>$sujet </b> <br> \n";
$contenu .= "</body> \n";
$contenu .= "</HTML> \n";

$headers  "MIME-Version: 1.0 \n";
$headers .= "Content-Transfer-Encoding: 8bit \n";
$headers .= "Content-type: text/html; charset=utf-8 \n";
$headers .= "From: $from  \n";
// $headers .= "Disposition-Notification-To: $from  \n"; // accuse de reception

$verif_envoi_mail TRUE;

$verif_envoi_mail = @mail ($to$sujet$contenu$headers);
 
if (
$verif_envoi_mail === FALSE) echo " ### Verification Envoi du Mail=$verif_envoi_mail - Erreur envoi mail <br> \n";
else echo 
" *** Verification Envoi du Mail=$verif_envoi_mail - Mail envoy&eacute; avec succ&egrave;s de $to vers $from <br> avec comme sujet: $sujet \n"
?>

Tu seras un Homme…

Re-découvrez le célèbre poème de Rudyard Kipling “Si- tu seras un homme mon fils” qui a inspiré tant de générations. Il célèbre le courage de surmonter les épreuves.

J’ai décidé de réussir

J’ai réuni 10 conseils éprouvés pour trouver la volonté d’accomplir avec succès ses ambitions et franchir certains obstacles dans sa vie personnelle et professionnelle.

Espoir en temps de crise ?

Le cynisme gouverne le monde mais certains refusent ce piège. A-t-on encore envie d’espérer ? Y a-t-il une autre voie, non idéologique, pour en finir avec ce monde ?