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


mrc_ao
Auteur
Réponse acceptée

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?>
mrc_ao
Auteur
Réponse acceptée

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 ;)

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
Auteur

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 ;)

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

De rien, avec plaisir.