Scripts et astuces pour débugger du code PHP, connexion MySQL et mail()
Ces bouts de codes vont vous aider quand rien n'ira, quand votre script PHP fait des siennes, quand la connexion à votre base MySQL ne fonctionne pas, quand l'envoi de message par la fonction mail() ne marche pas. Ensuite, à vous de faire le travail...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.Débogage connexion bas 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.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é avec succès de $to vers $from <br> avec comme sujet: $sujet \n";
?>