Scripts et astuces pour débugger du code PHP, connexion MySQL et mail()
Quand on cherche le bug, on le trouve.
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. On peut ignorer cette ligne si on utilise PHP 8.2 et plus $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>État des variables à la ligne : " . __LINE__ . " dans le fichier : " . __FILE__ . "</strong><br />\n"; $nom_fonction = __FUNCTION__; if ($nom_fonction !== '') { // Vérifie si __FUNCTION__ n'est pas vide echo "<strong>Dans la fonction : $nom_fonction</strong><br />\n"; } else { echo "<strong>En dehors d'une fonction :</strong><br />\n"; } foreach ($variables as $key => $value) { if (!in_array($key, $var_ignore) && str_contains($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,8 Ko)
Débogage connexion base MySQL:<?php /* Créé par "Abogil", créer un fichier debug.php */ // Activer la journalisation des erreurs PHP error_reporting(E_ALL); // ****** Configuration Début ****** $DBhost = "serveur"; // Adresse du serveur SQL $DBName = "nom"; // Nom de la base de données SQL $DBowner = "identifiant"; // Login du serveur SQL $DBpw = "motdepasse"; // Mot de passe du serveur SQL // ****** Configuration Fin ****** try { // Connecter à la base de données $fh_db = mysqli_connect($DBhost, $DBowner, $DBpw, $DBName); if (!$fh_db) { throw new Exception( "Erreur de connexion à la base de données : " . mysqli_connect_error(), ); } else { echo "1- Connexion à la base de données = <strong> OK </strong> <br />\n"; } } catch (Exception $e) { echo "1- Erreur connexion à la base de données = <strong>" . $e->getMessage() . "</strong> <br /> <br />\n"; } try { // Selectionner la base de données $sel = mysqli_select_db($fh_db, $DBName); if (!$sel) { throw new Exception( "Erreur de sélection de la base de données : " . mysqli_error($fh_db), ); } else { echo "2- Accès à la base de données $DBName = <strong> OK </strong> <br />\n"; } } catch (Exception $e) { echo "2- Erreur accès à la base de données $DBName = <strong>" . $e->getMessage() . "</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 try { // Executer la requête $result_query = mysqli_query($fh_db, $sql_query); // Exécution de la requête if (!$result_query) { throw new Exception( "Erreur de création de la table : " . mysqli_error($fh_db), ); } else { echo "3- Création de la table Tab_test_DB =<strong> OK </strong> <br /> \n"; } } catch (Exception $e) { echo "3- Erreur création de la table \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $e->getMessage() . "</strong> <br /> \n"; } // Ajout d'un enregistrement $sql_query = "INSERT INTO `Tab_test_DB` values ('','NONYME','Anne')"; // Requête try { // Executer la requête $result_query = mysqli_query($fh_db, $sql_query); // Exécution de la requête if (!$result_query) { throw new Exception( 'Erreur d\'ajout d\'enregistrement : ' . mysqli_error($fh_db), ); } else { echo "4- Ajout d'un enregistrement =<strong> OK </strong> <br /> \n"; } } catch (Exception $e) { echo "4- Erreur ajout de valeur \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $e->getMessage() . "</strong> <br /> \n"; } // Sélection dans la table Tab_test_DB $sql_query = "SELECT Id, NOM, PRENOM FROM `Tab_test_DB` WHERE NOM LIKE 'NONYME'"; // Requête try { // Executer la requête $result_query = mysqli_query($fh_db, $sql_query); // Exécution de la requête if (!$result_query) { throw new Exception( "Erreur de sélection des données : " . mysqli_error($fh_db), ); } else { echo "5- La colonne <strong>NOM</strong> contenant la valeur <strong>NONYME</strong> a été trouvée. <br /> \n"; } } catch (Exception $e) { echo "5- Erreur de sélection de valeur \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $e->getMessage() . "</strong> <br /> \n"; } $sql_query = "SELECT Id, NOM, PRENOM FROM `Tab_test_DB` ORDER BY NOM"; // Requête try { // Executer la requête $result_query = mysqli_query($fh_db, $sql_query); // Exécution de la requête if (!$result_query) { throw new Exception( "Erreur de sélection des données : " . mysqli_error($fh_db), ); } $result_count_row_get = mysqli_num_rows($result_query); } catch (Exception $e) { echo "5- Erreur de sélection de colonne \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $e->getMessage() . "</strong> <br /> \n"; } echo "5- Nombre de résultats trouvés = <strong>$result_count_row_get</strong> [doit être égal à 1]<br /> \n"; mysqli_free_result($result_query); // Suppression de la table Tab_test_DB $sql_query = "DROP TABLE IF EXISTS `Tab_test_DB`"; // Requête try { // Executer la requête $result_query = mysqli_query($fh_db, $sql_query); // Exécution de la requête if (!$result_query) { throw new Exception( "Erreur de suppression de la table : " . mysqli_error($fh_db), ); } else { echo "6- Suppression de la table Tab_test_DB =<strong> OK </strong> <br /> \n"; } } catch (Exception $e) { echo "6- Erreur suppression de la table \$sql_query=<strong>$sql_query</strong> <br /> \$result_query=<strong>" . $e->getMessage() . "</strong> <br /> \n"; } // Fermeture de la connexion 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,3 Ko)
Test fonction mail()<?php // TEST FONCTION MAIL() PHP // CREEZ UNE FICHIER email.php declare(strict_types=1); // Enable strict types // *** 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"; $htmlContenu =<<<HTML <html> <head> <title>Sujet</title> </head> <body> Mail au format HTML simple avec la fonction PHP mail().<br> <b>$sujet</b> <br> </body> </html> HTML; $headers = [ "MIME-Version: 1.0", "Content-Transfer-Encoding: 8bit", "Content-type: text/html; charset=utf-8", "From: $from", ]; try { $verif_envoi_mail = mail($to, $sujet, $htmlContenu, implode("\n", $headers)); if ($verif_envoi_mail === false) { throw new RuntimeException("Erreur envoi mail"); } echo " *** Verification Envoi du Mail=$verif_envoi_mail - Mail envoyé avec succès vers $to depuis $from avec comme sujet: $sujet\n"; } catch (Throwable $e) { echo " ### Verification Envoi du Mail=$verif_envoi_mail - Erreur envoi mail: " . $e->getMessage() . "\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…).