<!DOCTYPE html> <html lang="fr"> <head> <title>Mon Blog</title> <style> body { font-family:sans-serif; font-size:10px; } .error { background-color:#FFCC99;} .success { background-color:#99FF99;} .comments { margin-top : 2rem; } </style> </head> <body> <h1>Mon Blog</h1> <!-- article --> <article> <?php // utliser mysqli pour se connecter à la base de donnée // pour mémoire https://www.php.net/manual/fr/book.mysqli.php // se connecter // à savoir par défait sur une installation xampp // l'utilisateur "root" est définit avec un mot de passe vide // https://www.php.net/manual/fr/mysqli.quickstart.connections.php $mysqli = new mysqli("localhost", "root", "", "b1bak"); // si une erreur se produit alors un numero d'erreur est intialisé if ($mysqli->connect_errno) { echo "Échec lors de la connexion à MySQL : (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } //sinon on est connecté else { echo "connecté à "; } echo $mysqli->host_info . "\n"; // aller chercher le premier article dans la table article // SELECT * FROM `article` // appeler la méthode query de mysqli // https://www.php.net/manual/fr/mysqli.quickstart.statements.php $resultat = $mysqli->query('SELECT * FROM `article`'); // récupérer le premier l'article. $ligne_de_resultat = $resultat->fetch_array(MYSQLI_ASSOC); // afficher en deboguage mon resultat /* echo "<pre>"; print_r($ligne_de_resultat); echo "</pre>"; */ // afficher l'article ?> <h2><?php echo $ligne_de_resultat['titre']; ?></h2> <p><?php echo $ligne_de_resultat['contenu']; ?></p> <footer class="date">publié le <?php echo $ligne_de_resultat['date']; ?></footer> </article> <?php //print_r($_POST); // si le pseudo n'est pas déifnit l'intialiser à vide $pseudo = ""; $erreur_pseudo = false; // sinon récupérer le pseudo if(!empty($_POST['pseudo'])) { $pseudo = $_POST['pseudo']; } //si le champs est vide mais initialisé alors c'est une erreur elseif(isset($_POST['pseudo'])) { $erreur_pseudo = true; } // si l'email n'est pas déifnit l'intialiser à vide $email = ""; $erreur_email = false; // sinon récupérer l'email if(!empty($_POST['courriel'])) { $email = $_POST['courriel']; //vérrifier avec une expression rationnelle que c'est bine un email // version compliquée :^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$ if(!preg_match('/^[a-zA-Z0-9]+@[a-zA-Z0-9-_]+\.[a-zA-Z0-9]+$/',$email)) { $erreur_email = true; } } // si le commentaire n'est pas déifnit l'intialiser à vide $commentaire = ""; $erreur_commentaire = false; // sinon récupérer le commentaire if(!empty($_POST['commentaire'])) { $commentaire = $_POST['commentaire']; // s'assurer qu'il n y'a pas de script ou d'attaque dedans //$commentaire = htmlentities($commentaire); $commentaire = strip_tags($commentaire); //print_r($commentaire); //si une fois qu'on asupprimé les tags il ne reste rien c'est une erreur if(empty($commentaire)) { $erreur_commentaire = true; } } elseif(isset($_POST['commentaire'])) { $erreur_commentaire = true; } // il n'y a pas d'erreur si aucun des champs est en erreur. if(!($erreur_commentaire || $erreur_email || $erreur_pseudo)) { // on prépare la requete sql, après insertion dans phpmyadmin on cette instruction exemple : // INSERT INTO `commentaire` (`id_comentaire`, `article_id`, `pseudo`, `mail`, `commentaire`) VALUES (NULL, '<identifiant>', '<pseudo>', '<email>', '<commentaire>'); // ce qui nous donne la requête préparée : $requete = $mysqli->prepare("INSERT INTO `commentaire` (`id_comentaire`, `article_id`, `pseudo`, `mail`, `commentaire`) VALUES (NULL, ?, ?, ?, ?)"); //ensuite on lie les paramètres approprié. //l'identifiant de l'article on l'a avec la première requete pour afficher le blog, c'est $ligne_de_resultat['id_article']. C'est un entier //les autre champs on les a vérifié ce sont des chaines. //pour liés les paramètre on commence par décrire les types //ce sera donc entier, chaine, chaine, chaine soit integerstringstringstring soit isss //l'instruction de bin est donc : $requete->bind_param('isss',$ligne_de_resultat['id_article'],$pseudo,$email,$commentaire); $resultat = $requete->execute(); if($resultat) { echo "<div class='success'>Commentaire enregistré !</div>"; $pseudo = $mail = $commentaire = ""; } else { echo "<div class='error'>Error description: ".$mysqli -> error."</div>"; } } ?> <div class="comments"> <form action="" method="post"> <label for="pseudo">votre pseudo</label> <br/> <?php if($erreur_pseudo) { echo "<div class='error'>Vous devez saisir un pseudo</div>"; } ?> <input type="text" required id="pseudo" name="pseudo" value="<?php echo $pseudo; ?>" /> <br/> <label for="courriel">votre courriel</label> <br/> <?php if($erreur_email) { echo "<div class='error'>Vous devez saisir un email valide</div>"; } ?> <input type="email" id="courriel" name="courriel" value="<?php echo $email; ?>" /> <br/> <label for="commentaire">votre commentaire</label> <br/> <?php if($erreur_commentaire) { echo "<div class='error'>Vous devez saisir un commentaire (html non autorisé)</div>"; } ?> <textarea required id="commentaire" name="commentaire"><?php echo $commentaire; ?></textarea> <br/> <button type="submit">envoyer</button> </form> </div> </body> </html>