Mon formulaire ne marche pas
Résolu
Altaïr Rouss
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour*
Voici mon problème:
Je veux créer dans mon site, un chat permettant aux visiteurs de communiquer.
Je me sers des COOKIES et d'une base de données afin d'avoir une saisie automatique du pseudo pour un utilisateur enregistré et pour éviter que plusieurs utilisateurs aient le même pseudo.
Cependant, mon code ne marche pas. Voici le protocole de l'erreur étape par étape:
- Ma base de données est vide, je n'ai aucun cookie lié à ce site (RAS)
- J'entre un pseudo et un message. Ils s'affichent sur la page et mon champ "pseudo" prend automatiquement la valeur du cookie (RAS)
- Je supprime le cookie qui à été créé pour simuler un nouvel utilisateur utilisant le chat (RAS)
- Quel que soit le pseudo que j'utilise, il prendra la valeur "Array" et aucun cookie n'est enregistré
Voici le code de mon chat
Voici le code de ma page de traitement:
Je ne sais vraiment pas comment régler ce soucis ni même d'où il vient.
Merci beaucoup à qui trouvera une réponse et bonne journée
Voici mon problème:
Je veux créer dans mon site, un chat permettant aux visiteurs de communiquer.
Je me sers des COOKIES et d'une base de données afin d'avoir une saisie automatique du pseudo pour un utilisateur enregistré et pour éviter que plusieurs utilisateurs aient le même pseudo.
Cependant, mon code ne marche pas. Voici le protocole de l'erreur étape par étape:
- Ma base de données est vide, je n'ai aucun cookie lié à ce site (RAS)
- J'entre un pseudo et un message. Ils s'affichent sur la page et mon champ "pseudo" prend automatiquement la valeur du cookie (RAS)
- Je supprime le cookie qui à été créé pour simuler un nouvel utilisateur utilisant le chat (RAS)
- Quel que soit le pseudo que j'utilise, il prendra la valeur "Array" et aucun cookie n'est enregistré
Voici le code de mon chat
<div id="form">
Envoyer un message:
<form action="recus.php" method="post">
<p>
<label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" value=
<?php
if (isset($_COOKIE['pseudo']))
{
echo $_COOKIE['pseudo'];
}
?>
><br />
<label for="message">Message</label> : <input type="text" name="message" id="message" /><br />
<input type="submit" value="Envoyer" />
</p>
</form>
</div>
<div id="chat">
<h2>Chat :</h2>
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=ptsi;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// Récupération des 25 derniers messages
$reponse = $bdd->query('SELECT date_message, pseudo, message FROM recus ORDER BY ID DESC LIMIT 0, 25') OR die(print_r($bdd->errorInfo()));
// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
while ($donnees = $reponse->fetch())
{
echo
'<p><em>'
.htmlspecialchars($donnees['date_message']).
'</em><strong> -'
.htmlspecialchars($donnees['pseudo']).
': </strong>'
.htmlspecialchars($donnees['message']).
'</p>'
;
}
$reponse->closeCursor();
?>
</div>
Voici le code de ma page de traitement:
<?php $autorisation = NULL; // Si les deux champs sont remplis if (!empty($_POST['pseudo']) AND !empty($_POST['message'])) { // Si le PC client possède un pseudo if (isset($_COOKIE['pseudo'])) { // Si le pseudo est celui du client if ($_POST['pseudo'] = $_COOKIE['pseudo']) { // On se connecte à MySQL try { $bdd = new PDO('mysql:host=localhost;dbname=ptsi;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } // En cas d'erreur, on affiche un message et on arrête tout catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // Insertion du message à l'aide d'une requête préparée $req = $bdd->prepare('INSERT INTO recus (date_message, pseudo, message) VALUES(:date_message, :pseudo, :message)'); if (!$req) {echo "\nPDO::errorInfo():\n"; print_r($bdd->errorInfo());} $req->execute(array( 'date_message' => date('Y-m-d H:i:s'), 'pseudo' => $_POST['pseudo'], 'message' => $_POST['message'])); // Redirection du visiteur vers la page du minichat header('Location: forum.php'); // Si le pseudo n'est pas celui du client } else { echo "Ceci n'est pas votre pseudo"; } } // Si le PC client ne possède pas de pseudo else { // On se connecte à MySQL try { $bdd = new PDO('mysql:host=localhost;dbname=ptsi;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } // En cas d'erreur, on affiche un message et on arrête tout catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } // On récupère l'ensemble des pseudos $reponse = $bdd->query('SELECT pseudo FROM recus') OR die(print_r($bdd->errorInfo())); // On vérifie tous les pseudos while ($donnees = $reponse->fetch()) { // Si le pseudo est déja utilisé if ($_POST['pseudo'] = $donnees) { $autorisation = false; } // Si le pseudo n'est pas déja utilisé elseif ($_POST['pseudo'] != $donnees) { } } $reponse->closeCursor(); if ($autorisation == NULL) { // On crée un cookie pour donner un nom à l'utilisateur setcookie('pseudo', $_POST['pseudo'], time()+2.5*365*24*3600, null, null, false, true); // On se connecte à MySQL try { $bdd = new PDO('mysql:host=localhost;dbname=ptsi;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } // En cas d'erreur, on affiche un message et on arrête tout catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // Insertion du message à l'aide d'une requête préparée $req = $bdd->prepare('INSERT INTO recus (date_message, pseudo, message) VALUES(:date_message, :pseudo, :message)'); if (!$req) {echo "\nPDO::errorInfo():\n"; print_r($bdd->errorInfo());} $req->execute(array( 'date_message' => date('Y-m-d H:i:s'), 'pseudo' => $_POST['pseudo'], 'message' => $_POST['message'])); // Redirection du visiteur vers la page du minichat header('Location: forum.php'); } else { echo "Ce pseudo est déjà utilisé, veuillez en choisir un autre"; } } // S'il manque un champ } else { echo "Veuillez renseigner un pseudo et un message pour intéragir avec le chat"; } ?>
Je ne sais vraiment pas comment régler ce soucis ni même d'où il vient.
Merci beaucoup à qui trouvera une réponse et bonne journée
A voir également:
- Mon formulaire ne marche pas
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Confirmer le nouvel envoi du formulaire err_cache_miss - Forum Webmastering
- Problème avec Google Chrome - Forum Google Chrome
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir,
peux-tu donner les noms de tes deux fichiers php?
peux-tu aussi expliquer le scenario plus factuellement?
- Ma base de données est vide, je n'ai aucun cookie lié à ce site (RAS)
- J'entre un pseudo et un message (?sur quelle page?). Ils s'affichent sur la page (quelle page, la même?) et mon champ "pseudo" prend automatiquement la valeur du cookie (RAS) (tu n'as aucun cookie, comment le champ peut-il prendre la valeur du cookie?)
- Je supprime le cookie qui à été créé pour simuler un nouvel utilisateur utilisant le chat (RAS)
- (et ensuite que fais-tu?) Quel que soit le pseudo que j'utilise, il prendra la valeur "Array" (où vois-tu cette valeur?) et aucun cookie n'est enregistré
peux-tu donner les noms de tes deux fichiers php?
peux-tu aussi expliquer le scenario plus factuellement?
- Ma base de données est vide, je n'ai aucun cookie lié à ce site (RAS)
- J'entre un pseudo et un message (?sur quelle page?). Ils s'affichent sur la page (quelle page, la même?) et mon champ "pseudo" prend automatiquement la valeur du cookie (RAS) (tu n'as aucun cookie, comment le champ peut-il prendre la valeur du cookie?)
- Je supprime le cookie qui à été créé pour simuler un nouvel utilisateur utilisant le chat (RAS)
- (et ensuite que fais-tu?) Quel que soit le pseudo que j'utilise, il prendra la valeur "Array" (où vois-tu cette valeur?) et aucun cookie n'est enregistré
Bonjour,
On le code de connexion à la bdd dans un fichier à part qu'il suffit d'inclure dans ses pages au lieu de le réécrire à chaque fois !
Puis concernant le reste de ton code :
déjà.. on place le maximum de code php EN DEHORS du html (au début du fichier)
par exemple.. la connexion à la bdd, la récupération PROPRE des variables AVANT de les utiliser
le traitement du formulaire .. etc...
Ensuite.. pour gérer les erreurs PHP .. on utilise des blocs TRY/CATCH .. pas des " OR DIE.. "
Et pour finir .. les égalité se vérifient avec == ou === mais pas avec = !
On le code de connexion à la bdd dans un fichier à part qu'il suffit d'inclure dans ses pages au lieu de le réécrire à chaque fois !
<?php //fichier cnxbdd.php try{ $bdd =new PDO('mysql:host=localhost;dbname=ptsi; charset=utf8', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
Puis concernant le reste de ton code :
déjà.. on place le maximum de code php EN DEHORS du html (au début du fichier)
par exemple.. la connexion à la bdd, la récupération PROPRE des variables AVANT de les utiliser
le traitement du formulaire .. etc...
Ensuite.. pour gérer les erreurs PHP .. on utilise des blocs TRY/CATCH .. pas des " OR DIE.. "
Et pour finir .. les égalité se vérifient avec == ou === mais pas avec = !
<?php //Activation des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //connexion à la bdd require_once "cnxbdd.php"; //récupération PROPRE des variables $pseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL; // Récupération des 25 derniers messages $sql = "SELECT date_message , pseudo , message FROM recus ORDER BY ID DESC LIMIT 0, 25"; try{ $requete = $bdd -> prepare($sql) ; $requete->execute() ; //on stocke le résultat dans un ARRAY $messages = $requete->fetchAll(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } ?> <div id="form"> Envoyer un message: <form action="recus.php" method="post"> <p> <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" value="<?php echo $pseudo; ?>"><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p> </form> </div> <div id="chat"> <h2>Chat :</h2> <?php // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars) foreach($messages as $donnees) { echo '<p><em>' .htmlspecialchars($donnees['date_message']). '</em><strong> -' .htmlspecialchars($donnees['pseudo']). ': </strong>' .htmlspecialchars($donnees['message']). '</p>' ; } ?> </div> </div> <!-- Fin div "form" -->
<?php //Fichier recus.php //Activation des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //connexion à la bdd require_once "cnxbdd.php"; //fonctions function add_message($post_pseudo,$message){ $sql = 'INSERT INTO recus (date_message, pseudo, message) VALUES(:date_message, :pseudo, :message)'; $datas = array( 'date_message' => date('Y-m-d H:i:s'), 'pseudo' => $post_pseudo, 'message' => $message); try{ $requete = $bdd -> prepare($sql) ; $result = $requete->execute($datas) ; // Redirection du visiteur vers la page du minichat if($result){ header('Location: forum.php'); exit(); } }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } } //récupération PROPRE des variables $autorisation = NULL; $cookie_pseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL; $post_pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL; $message = !empty($_POST['message']) ? $_POST['message'] : NULL; // Si les deux champs sont remplis if ($post_pseudo && $message) { // Si le PC client possède un pseudo if ($cookie_pseudo) { // Si le pseudo est celui du client if ($post_pseudo == $pseudo) { add_message($post_pseudo,$message); } else { // Si le pseudo n'est pas celui du client echo "Ceci n'est pas votre pseudo"; } } else { // Si le PC client ne possède pas de pseudo // On regarde si le pseudo existe en base $sql = 'SELECT pseudo FROM recus WHERE pseudo =:pseudo'; $datas = array( 'pseudo' => $post_pseudo); try{ $requete = $bdd -> prepare($sql) ; $result = $requete->execute($datas) ; $reponse = $result->fetchAll(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); } if(empty($reponse)){ $autorisation = false; // On crée un cookie pour donner un nom à l'utilisateur setcookie('pseudo', $_POST['pseudo'], time()+2.5*365*24*3600, null, null, false, true); add_message($post_pseudo,$message); } else { echo "Ce pseudo est déjà utilisé, veuillez en choisir un autre"; } } }else{ // S'il manque un champ echo "Veuillez renseigner un pseudo et un message pour intéragir avec le chat"; } ?>