Un tchat avec une vérification des données
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Tout d'abord désolé si la question a déjà été posée. Je suis en train de faire un minichat et j'aimerais que les messages s'affichent seulement si le visiteur a écrit un message ( sinon on affiche un message d'erreur ), j'utilise donc un formulaire et la fonction isset mais je ne sais pas à quel moment mettre la condition : le visiteur a-t-il écrit un message ou non.
J'ai essayé plusieurs possibilités, soit les messages apparaissent alors qu'il n'y a pas de message, soit il est impossible de rentrer un message ( le message d'erreur s'affiche dès le début ).
Quelqu'un a-t-il une idée ? Merci :-)
Voici le code pour lequel on ne peut pas rentrer de message, il y a la page du formulaire ( minichat.php ) et la page qui enregistre dans une base de donnée, le message du visiteur ( minichat_post.php ) :
Tout d'abord désolé si la question a déjà été posée. Je suis en train de faire un minichat et j'aimerais que les messages s'affichent seulement si le visiteur a écrit un message ( sinon on affiche un message d'erreur ), j'utilise donc un formulaire et la fonction isset mais je ne sais pas à quel moment mettre la condition : le visiteur a-t-il écrit un message ou non.
J'ai essayé plusieurs possibilités, soit les messages apparaissent alors qu'il n'y a pas de message, soit il est impossible de rentrer un message ( le message d'erreur s'affiche dès le début ).
Quelqu'un a-t-il une idée ? Merci :-)
Voici le code pour lequel on ne peut pas rentrer de message, il y a la page du formulaire ( minichat.php ) et la page qui enregistre dans une base de donnée, le message du visiteur ( minichat_post.php ) :
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <form action="minichat_post.php" method="post"> <p> <label for="pseudo">pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br /> <label for="message">message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p> </form> <?php // Connexion à la base de données try { $bdd = new PDO('mysql:host=localhost;dbname=dunce;charset=utf8', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } if (isset($_POST['pseudo']) AND $_POST['message']) // Si le pseudo et le message existent { // Récupération des 10 derniers messages $reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10'); // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars) while ($donnees = $reponse->fetch()) { echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } $reponse->closeCursor(); } else // Sinon, on affiche un message d'erreur { echo '<p>Problème </p>'; } ?> </body> </html>
<?php // Connexion à la base de données try { $bdd = new PDO('mysql:host=localhost;dbname=dunce;charset=utf8', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // Insertion du message à l'aide d'une requête préparée $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_POST['pseudo'], $_POST['message'])); // Redirection du visiteur vers la page du minichat header('Location: minichat.php'); ?>
A voir également:
- Un tchat avec une vérification des données
- Fuite données maif - Guide
- Coco tchat - Accueil - Réseaux sociaux
- Tchat gratuit - Accueil - Réseaux sociaux
- Trier des données excel - Guide
- Sauvegarde des données - Guide
1 réponse
Bonjour,
$_POST est envoyé à ton fichier d'insertion en BDD ... il n'est pas présent sur la page de ton formulaire....
A la limite, tu peux :
Soit faire une requête SELECT (en mettant le pseudo du gars dans le WHERE) pour voir s'il a déjà posté un message ...
Soit utiliser les variables de SESSION ( ou les COOKIES) pour "mémoriser" le fait qu'il ait déjà écrit.
Quoi qu'il en soit, je pense que tu devrais mettre TOUT ton code PHP directement dans ta première page au lieu de renvoyer vers minichat_post.php
A ce momment là .. la variable $_POST sera présente sur cette même page.....
Petit conseille, place ton code PHP au début de ta page plutôt qu'au milieu de ton code html...
ça rendra ton code plus simple à maintenir.
par exemple :
Cordialement,
Jordane
$_POST est envoyé à ton fichier d'insertion en BDD ... il n'est pas présent sur la page de ton formulaire....
A la limite, tu peux :
Soit faire une requête SELECT (en mettant le pseudo du gars dans le WHERE) pour voir s'il a déjà posté un message ...
Soit utiliser les variables de SESSION ( ou les COOKIES) pour "mémoriser" le fait qu'il ait déjà écrit.
Quoi qu'il en soit, je pense que tu devrais mettre TOUT ton code PHP directement dans ta première page au lieu de renvoyer vers minichat_post.php
<form action="" method="post">
A ce momment là .. la variable $_POST sera présente sur cette même page.....
Petit conseille, place ton code PHP au début de ta page plutôt qu'au milieu de ton code html...
ça rendra ton code plus simple à maintenir.
par exemple :
<?php //démarrage de la session session_start(); // Connexion à la base de données require_once "connexion_bdd.php"; //récupération des variables $pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : NULL; $message = isset($_POST['message']) ? $_POST['message'] : NULL; // traitement du submit if($pseudo && $message){ // Insertion du message à l'aide d'une requête préparée $sql = "INSERT INTO minichat (pseudo, message) VALUES(?, ?)"; $params = array($pseudo, $message); $req = $bdd->prepare($sql); $req->execute($params); $_SESSION['a_poste'] = true; } //récupération des messages if($_SESSION['a_poste'] == true){ // Récupération des 10 derniers messages $sql = "SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10"; $req = $bdd->prepare($sql); $req->execute($params); $reponse = $req->fetchAll(); } $reponse->closeCursor(); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <form action="minichat_post.php" method="post"> <p> <label for="pseudo">pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br /> <label for="message">message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p> </form> <?php if($_SESSION['a_poste'] == true){ // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars) foreach($reponse as $donnees ){ echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } }else{// Sinon, on affiche un message d'erreur echo '<p>Problème </p>'; } ?> </body> </html>
Cordialement,
Jordane
Utilisateur anonyme
Merci pour ta réponse rapide ;) je vais essayer ça !