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. Crédit photo: 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
<?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 appellerez 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 prendre ce fichier PHP ici: sql-test.zip (1,5 Ko)

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

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

// ****** Configuration - Debut ****** 
 $DBhost = "serveur"; // adresse du serveur SQL
 $DBName = "nom"; // nom de la base SQL
 $DBowner= "identifiant"; // identifiant SQL 
 $DBpw	 = "mdp"; // mot de passe SQL 
// ****** Configuration - Fin ****** 
	 
$fh_db = mysqli_connect($DBhost, $DBowner, $DBpw, $DBName); 
$Erreur = mysqli_connect_error($fh_db); 
if (strlen($Erreur) > 0) { echo "1- mysqli_connect Connexion a la DATABASE = <strong>" . $Erreur . "</strong> <br /> <br />\n"; exit; } 
else { echo "1- mysqli_connect Connexion a la DATABASE = <strong> OK </strong> <br /> <br />\n"; }

$sel = mysqli_select_db($fh_db, $DBName); 
$Erreur = mysqli_error($sel); 
if (strlen($Erreur) > 0) { echo "2- mysqli_select_db Acces a la DATABASE $DBName = <strong>" . $Erreur . "</strong> <br /> <br />\n"; exit; } 
else { echo "2- mysqli_select_db Acces a la DATABASE $DBName = <strong> OK </strong> <br /> <br />\n"; }

// 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=utf8";	 // Requête 
$result_query=mysqli_query($fh_db, $sql_query);	 // Exécution de la requête 
$Erreur = mysqli_error(); 
echo "3- \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $result_query . "</strong> <br /> \n"; 
if (strlen($Erreur) > 0) { echo "Creation de la table Tab_test_DB = <strong>" . $Erreur . "</strong> <br /> <br />\n"; exit; } 
else { echo "Creation de la table Tab_test_DB = <strong> OK </strong> <br /> <br />\n"; }

// Ajout d'un enregistrement
$sql_query="INSERT INTO `Tab_test_DB` values ('','NONYME','Anne')";	 // Requête 
$result_query=mysqli_query($fh_db, $sql_query);	 // Exécution de la requête
$Erreur = mysqli_error(); 
echo "4- \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $result_query . "</strong> <br /> \n"; 
if (strlen($Erreur) > 0) { echo " Ajout d'un enregistrement = <strong>" . $Erreur . "</strong> <br /> <br />\n"; exit; } 
else { echo " Ajout d'un enregistrement = <strong> OK </strong> <br /> <br />\n"; }

// SELECT dans la table Tab_test_DB
$sql_query="SELECT Id, NOM, PRENOM FROM `Tab_test_DB` WHERE NOM=\'NONYME\'";	 // Requête 
$result_query=mysqli_query($fh_db, $sql_query);	 // Exécution de la requête 
$Erreur = mysqli_error(); 
echo "5- \$sql_query=<strong>$sql_query</strong> <br /> \n"; 
if (strlen($Erreur) > 0) { echo "SELECT dans la table Tab_test_DB = <strong>" . $Erreur . "</strong> <br /> <br />\n"; exit; } 
else { echo "SELECT dans la table Tab_test_DB = <strong> OK </strong> <br /> \n"; }

$sql_query="SELECT Id, NOM, PRENOM FROM `Tab_test_DB` ORDER BY NOM";	 // Requête 
$result_query=mysqli_query($fh_db, $sql_query);	 // Exécution de la requête 
$result_count_row_get = mysqli_num_rows($result_query);	
$Erreur = mysqli_error(); 
echo "Nombre d'enregistrements trouves = <strong>$result_count_row_get</strong> <br /> <br /> \n"; 
if (strlen($Erreur) > 0)	exit; 
mysqli_free_result($result_query);

// Supression de la table Tab_test_DB
$sql_query="DROP TABLE IF EXISTS `Tab_test_DB`";	 // Requête 
$result_query=mysqli_query($fh_db, $sql_query);	 // Exécution de la requête 
$Erreur = mysqli_error(); 
echo "6- \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $result_query . "</strong> <br /> \n"; 
if (strlen($Erreur) > 0) { echo "Supression de la table Tab_test_DB = <strong>" . $Erreur . "</strong> <br /> <br />\n"; exit; } 
else { echo "Supression de la table Tab_test_DB = <strong> OK </strong> <br /> <br />\n"; }

// Closing connection 
mysqli_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 courrier.php et copiez le code ci-dessous.

Vous pouvez prendre ce fichier PHP ici: courrier-test.zip (1,1 Ko)

Test fonction mail()
<?php
// TEST FONCTION MAIL() PHP
// CREEZ UN FICHIER courrier.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.

Gourmandises

Des recettes exquises de mignardises (madeleines, financiers, sablés, cakes, muffins) et autres gourmandises (croissants, brioche, gâteaux traditionnels…).