Cookie

Thibaut47
Invité n'ayant pas de compte PHPfrance

11 juil. 2011, 12:17

Bonjour à tous j'aimerais intégrer un cookie qui récupère le pseudo d'un utilisateur dans un minichat et qui le met en valeur initiale quand il veut rechater. Voici mon code car ça ne fonctionne pas. Je précise je suis débutant et j'aimerais que vous m'aidiez à trouver l'erreur.

Code : Tout sélectionner

<?php $pseudo = $_POST['pseudo']; setcookie('pseudo', $_POST['pseudo'] , time() + 365*24*3600, null, null, false, true); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title> Bienvenue sur le minichat! </title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <form method="post" action="minichat_post.php"> <p> <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" value= /><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p> </form> <p> </p> </br> <?php try { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options); $reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0,10'); while ($donnees = $reponse->fetch()) { echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } $reponse->closeCursor(); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> </body> </html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 juil. 2011, 12:38

Qu'est ce qui ne fonctionne pas ?

En effet, dans ton code tu créer un cookie, mais tu n'en fais rien par la suite, pas plus que tu n'utilises la valeur de $pseudo que tu as récupéré du formulaire...

Si tu veux ré-exploiter la valeur envoyée comme valeur par défaut de ton champ pseudo, il faut le spécifier dans l'attribut value de ton champ :
<input ... value="<?php echo $pseudo; ?>" />
Pour récupérer la valeur placée dans un cookie, on utilise la super globale $_COOKIE (donc dans ton cas $_COOKIE['pseudo']).
<input ... value="<?php echo $_COOKIE['pseudo']; ?>" />
Attention cependant, lorsque tu définis un cookie dans une page, celui-ci n'est accessible qu'au prochain chargement d'une page. Dans la logique, il faudrait dans ton traitement déterminer le pseudo de la façon suivante :

Code : Tout sélectionner

SI un pseudo est envoyé par le formulaire utiliser le pseudo du formulaire le stocker dans un cookie SINON SI un cookie est défini utiliser le pseudo du cookie FINSI FINSI
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Thibaut47
Invité n'ayant pas de compte PHPfrance

11 juil. 2011, 12:42

Ok merci je vais essayer cela.

Thibaut47
Invité n'ayant pas de compte PHPfrance

11 juil. 2011, 12:45

Voici mon code est ça ne fonctionne toujours pas. Ma page affiche de nombreuses erreurs.

Code : Tout sélectionner

<?php $pseudo = $_POST['pseudo']; setcookie('pseudo', $_POST['pseudo'] , time() + 365*24*3600, null, null, false, true); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title> Bienvenue sur le minichat! </title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <form method="post" action="minichat_post.php"> <p> <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" value="<?php echo $_COOKIE['pseudo']; ?>" /><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyer" /> </p> </form> <p> </p> </br> <?php try { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options); $reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0,10'); while ($donnees = $reponse->fetch()) { echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } $reponse->closeCursor(); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> </body> </html>