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>";
?>