<!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>