récupérer la variable "pseudo" d'une table msql via cookie ou session

Par mrc_ao, il y a 10 ans


Bonjour,

je suis débutant en php et je développe un chat qui permet d'incrémenter des messages et des pseudos dans une base de données msql via un formulaire - jusque là, pas de problème.

Je souhaiterais créer une session / un cookie qui conserve le pseudo de l'utilisateur après l'envoi d'un premier message et l'affiche dans le champ de pseudo de mon formulaire ; et là, je n'y arrive pas ... ça fait 3 jours que je m'échine sur ce problème sans trouver de solution ...

Quelqu'un pourrait-il venir à mon aide ?

voici mon code page 1 :

<?php $temps = 365*24*5500; setcookie ("pseudo", "LA GLOBULE", time() + $temps); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Mini-chat</title> </head> <style> form { text-align:center; } </style> <body> <form action="minichat_post_Cookie.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> <?php // Connexion à la base de données try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // Récupération des 10 derniers messages $reponse = $bdd->query('SELECT DATE_FORMAT(date, \'le %d/%m/%Y à %Hh%imin%ss\') AS date_creation, pseudo, message FROM minichat_ameliore 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>' . $donnees['date_creation'] . ' <strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } $reponse->closeCursor(); ?> </body> </html>

code page 2 :

<?php // Connexion à la base de données try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $date_creation_fr = // Insertion du message à l'aide d'une requête préparée $req = $bdd->prepare('INSERT INTO minichat_ameliore (pseudo, message, date) VALUES(?, ?, NOW())'); $req->execute(array($_POST['pseudo'], $_POST['message'])); // Redirection du visiteur vers la page du minichat header('Location: Minichat_Cookie.php'); ?>

Par avance merci.

6 réponses

Lartak, il y a 10 ans

Bonjour.
Commences par exemple par regarder le tutoriel Tutoriel Vidéo PHP » Sécuriser avec les Sessions.
Ensuite, il ne t'est pas nécessaire de mettre un champ dans ton formulaire pour le pseudo, si tu fais en sorte de faire un système d'identification avant que l'utilisateur n'accède au chat, vu que tu pourras accéder à son pseudo via la session.
Ensuite, une variable session, ça ne se récupère pas depuis une base de données, tu peux définir une variable session pour le pseudo en récupérant la valeur du champ en base de données concernant le pseudo, mais la session c'éest du PHP et non du SQL.
Pour terminer, une fois la session mise en place, tu pourras sauvegarder les messages de l'utilisateur à la base de données, comme ça par exemple :

$req->execute(array($_SESSION['pseudo'], $_POST['message']));
mrc_ao, il y a 10 ans

Merci Lartak, je commençais un peru à désespérer ... ;)
Juste pour clarifier ton point car je ne suis pas sûr de bien comprendre :
si je veux faire apparaître mon identifiant sur ma page de chat il me faut impérativement créer une page d'entrée qui va renseigner mon login dans mon code PHP et ce login - même s'il est ajouté à ma base sql - sera géré par la session créée en page d'accès ? Suis-je correct ?

Si oui, en réalité il me faut créer une troisième page qui sera ma page d'entrée donc ?

Grand merci pour ton aide et pour cette dernière clarification ;)

mrc_ao, il y a 10 ans

Lartak, merci pour ton aide, j'ai finalement trouvé un script qui donne ce que je cherche à produire ... c'était pas grand chose mais ...

<?phparoundsession_start();aroundif(isset($_POST['pseudo']))around{around $_SESSION['pseudo']=$_POST['pseudo'];around}aroundaroundaround?>
Lartak, il y a 10 ans

Bonsoir.
Pas obligatoirement, tu peux faire quelque chose comme ça : Chat exemple et le code.

mrc_ao, il y a 10 ans

Merci beaucoup pour ces indications Lartak. J'ai fini par trouver une solution identique à celle de ton premier lien - chat exemple - et j'ai pu terminer mon chat.
A une très prochaine sans doute ;)

Lartak, il y a 10 ans

De rien, avec plaisir.