Logo ShareMyCode.io ShareMyCode.io
Partagez un extrait de code en quelques secondes.
Voici votre URL de partage
Cliquer pour copier dans le presse-papiers. Copié
Nom du fichier : exercice
<?php 


if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    echo "POST détecté ✅";
} else {
    echo "Pas de POST ❌";
}

/*


TP Espace de Tchat :
-----------
- Création d'un espace de dialogue / de tchat en ligne en PHP 

- 01 - Création de la BDD : dialogue  (via PhpMyAdmin)
     -  Table : commentaire
     - Champs de la table commentaire :
        - id_commentaire        INT PK AI
        - pseudo                VARCHAR 255
        - message               TEXT
        - date_enregistrement   DATETIME
        
- 02 - Créer une connexion à cette base avec PDO (instanciation de l'objet PDO, vérification avec var_dump)
- 03 - Création d'un formulaire html permettant de poster un message (html classique, pour un formuler géré avec POST)
     - Champs du formulaire : 
        - pseudo (input type="text")
        - message (textarea)
        - bouton de validation
- 04 - Récupération des saisies du form avec controle (Récupération au travers de la globale POST, contrôle des saisies, champs pas vide, champs d'une certaine longueur minimale)
- 05 - Déclenchement d'une requete d'enregistrement pour enregistrer les saisies dans la BDD (Si les contrôle sont bons, on lance une requête insert into vers notre table, pour sauvegarder ces saisies)
- 06 - Requete de récupération des messages afin de les afficher dans cette page (Requête de selection pour récupérer les messages enregistrés)
- 07 - Affichage des messages avec un peu mise en forme (on manipule pdo, pdostatement, fetch, pour gérer l'affichage comme on le souhaite)

--- Bonus ---
- 08 - Affichage en haut des messages du nombre de messages présents dans la bdd
- 09 - Affichage de la date en français
- 10 - Amélioration du css
*/


try {
    $pdo = new PDO("mysql:host=192.168.1.32:3306;dbname=dialogue", "admin_db", "rootroot");
    echo "Connexion OK";
} catch (PDOException $e) {
    echo "Erreur : " . $e->getMessage();
}


echo '<hr>';
?>


<form method="POST">

Pseudo: <input name="pseudo" type="text"><br>
Message: <textarea name="message"></textarea><br>
<button type="submit">Enregistrer</button>

</form>



<?php 

    $pseudo = $_POST['pseudo'] ?? ''; // ?? quand il n'y a encore aucune valeur dans un tableau
    $message = $_POST['message'] ?? '';
    $erreurs= []; // message erreur dans un tableau

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // Quand l'utilisateur soumet le formulaire 

    echo "<pre>";
    var_dump($_POST);
    echo "</pre>";

    echo "<pre>";
    var_dump($erreurs);
    echo "</pre>";

    

    if (empty($pseudo)) {
    $erreurs[] = 'Le pseudo est obligatoire';
    } 
    elseif (strlen($pseudo) < 3 || strlen($pseudo) > 20) { // || entre 3 'ou' 20
    $erreurs[] = 'Le pseudo doit faire entre 3 et 20 caractères';
    }

    if (empty($message)) {
    $erreurs[] = 'Le message est obligatoire';
    } 
    elseif (strlen($message) < 5) {
    $erreurs[] = 'Le message doit faire au moins 5 caractères';
    }

    if (empty($erreurs)) {
        $stmt = $pdo ->prepare("INSERT INTO commentaire (pseudo, message, date_enregistrement) VALUES (:pseudo, :message, NOW())");
    

    // if empty erreurs alors envoie dans la BDD  PDO -> prepare est la connexion à la BDD (prépare la requête SQL sans l'exécuter encore), prepare est mieux que query contre les injections SQL
    // NOW insère automatiquement la date et l'heure actuelle 
    // :pseudo (ce sont des paramètres (les vrais valeurs seront liées juste après))

    $stmt -> execute([// execute aussi contre les injections SQL
        'pseudo' => htmlspecialchars($pseudo),
        'message' => htmlspecialchars($message) // specialchars contre le cross site scripting)
    ]);

    echo "<p>ID inséré : " . $pdo->lastInsertId() . "</p>";

    echo "<p style='color:green;'>Message envoyé</p>"; 

    } else {
        foreach ($erreurs as $erreur) {
            echo "<p style='color:red;'>$erreur</p>";
        }
    }
}

$stmt = $pdo -> query("
SELECT pseudo, message, date_enregistrement FROM commentaire ORDER BY date_enregistrement DESC"); // le code recupère tout les commentaires de la BDD 

$messages = $stmt -> fetchAll((PDO::FETCH_ASSOC)); // cette ligne recupère tous les résultats de la requête SQL sous forme de tableau PHP

echo "<h2>Messages :</h2>";
echo "<ul>";

foreach ($messages as $msg) {
    echo "<li>";
    echo "<strong>{$msg['pseudo']}</strong> : {$msg['message']} ";
    echo "<em>({$msg['date_enregistrement']})</em>";
    echo "</li>";
}

echo "</ul>";


?>
Informations
Cet extrait a été créé le
23 Mar 2026 à 09:45:21
Cet extrait expire le
22 Apr 2026 à 10:45:21
Langage :
php php
Lien
Demander la suppression