Affichage des messages dans un chat

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans ce forum.

Modérateur: Equipe

Affichage des messages dans un chat

Messagede Gryffondor le 06 Nov 2008 à 14:50

Bonjour,

J'ai un script de chat bannal. Par défaut, lorsqu'un nouvel utilisateur se connecte, il voit les 50 derniers messages du chat. Moi j'aimerais qu'il voit uniquement les messages à partir de l'instant où il s'est connecté. Soit par exemple il se connecte à un timestamp nommé "$timestamp", il verra donc uniquement les message à "$timestamp+1" un peu comme les clients de messagerie instantanées le font (MSN...)

Pour l'instant, j'ai donc ce code qui affiche les 50 derniers messages:
Code: Tout sélectionner
<?php
//On affiche les résultats
$reponse mysql_query("SELECT * FROM chat ORDER BY id desc LIMIT 50");
// boucle des messages
?>


La table chat comprend les champs suivants:
id | message | pseudo | timestamp

Quel méthode me consélleriez vous pour parvenir à mes fins? C'est à direcomment afficher les messages qu'à partir du moment du timestamp de la connextion de l'utilisateur.
Titi In Love a écrit:La plus grande fierté tel que la grandeur d'un homme ne réside pas dans ces actes mais dans les conséquences que ces actes auront (Titi In Love).

Last Survivor: La fin du monde ne fait que commencer...[b]
Serez vous le Last Survivor?
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2188
Inscription: 31 Juil 2006 à 19:48
Localisation: A Last Survivor : Là où la fin du monde ne fait que commencer!
Avertissements: 1

Re: Affichage des messages dans un chat

Messagede ErnadoO le 06 Nov 2008 à 14:58

Ben c'est simple: Ne pas faire de requête quand il arrive :mrgreen:
ErnadoO · Administrateur et responsable de l'équipe des MODs par intérim
Tu as l'âme d'un codeur? l'équipe des MODs recrute toute l'année!
Tout sur l'installation d'un MOD || Intro à la création de MOD || Erreurs fréquentes lors de l'installation de MODs || Mes MODS

phpBB-Services.com: L'hébergement et l'assistance de votre forum phpBB en toute tranquillité.
Dead zone: LA référence francophone sur la série télé Dead zone: photos, résumés, captures, videos, forum.
Aidez la SPA à nourrir un animal abandonné: http://www.clicanimaux.com/
Avatar de l’utilisateur
ErnadoO
Administrateur et resp. des codeurs
Administrateur et resp. des codeurs
 
Messages: 20523
Inscription: 21 Juin 2003 à 12:42
Localisation: Brest/Quimper/Calais

Re: Affichage des messages dans un chat

Messagede Gryffondor le 06 Nov 2008 à 15:07

Ok mais quand il poste un message, la requête doit se faire pour lister les messages de la BDD et du coup après envoi du formulaire je me retrouve avec le même soucis.
Donc faudrait que je trouve la bonne requête qui liste que les messages posté après sa connexion.
Titi In Love a écrit:La plus grande fierté tel que la grandeur d'un homme ne réside pas dans ces actes mais dans les conséquences que ces actes auront (Titi In Love).

Last Survivor: La fin du monde ne fait que commencer...[b]
Serez vous le Last Survivor?
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2188
Inscription: 31 Juil 2006 à 19:48
Localisation: A Last Survivor : Là où la fin du monde ne fait que commencer!
Avertissements: 1

Re: Affichage des messages dans un chat

Messagede spitfire pat le 06 Nov 2008 à 15:30

si tu as fait
Code: Tout sélectionner
$connect_time = time(); 
après la connexion, alors ta requête deviendra
Code: Tout sélectionner
<?php
//On affiche les résultats
$reponse = mysql_query("SELECT * FROM chat WHERE timestamp > $connect_time ORDER BY id desc LIMIT 50");
// boucle des messages
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14673
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Affichage des messages dans un chat

Messagede Gryffondor le 06 Nov 2008 à 15:45

Oui, j'avais pensé à cela et donc cela présuppose que je dois enregistré le timestamp dans un fichier différent de celui qui fait la requêtte d'affichage des messages?
Car si je fais
spitfire pat a écrit:si tu as fait
Code: Tout sélectionner
$connect_time = time();  
après la connexion, alors ta requête deviendra
Code: Tout sélectionner
<?php
//On affiche les résultats
$reponse = mysql_query("SELECT * FROM chat WHERE timestamp > $connect_time ORDER BY id desc LIMIT 50");
// boucle des messages
?>

Et que tout soit dans le même fichier, alors je n'aurais aucun message d'afficher puisque dans au rechargement de ma page, le $connect_time prend à chaque fois une nouvelle valeure.

Donc en théorie, la solution serait d'enregistrer une seule fois
Code: Tout sélectionner
$connect_time = time();  
dans ma bdd et d'éffectuer cette requêtte
Code: Tout sélectionner
<?php
//On affiche les résultats
$reponse = mysql_query("SELECT * FROM chat WHERE timestamp > $connect_time ORDER BY id desc LIMIT 50");
// boucle des messages
?>
sur une seconde page (la page de traitement du formulaire d'envoi de messages par exemple).
Certes, sa fonctionnerai comme ceci puisque $connect_time garderai toujours la même valeurs et donc je pourrais afficher mes messages postés apres cette valeure.
Le soucis est que je ne veux pas créer un fichier avec 2 lignes 2 codes (c'est du gachi).
Donc le mieux serait d'utiliser une condition dans un même fichier...
Comment faire en PHP pour dire:
Si c'est ma première connection, alors j'enregistre $connect_time dans ma table sinon, je fais la requêtte qui affiche les messages de la table par rapport au dernier $connect_time enregistré?
Titi In Love a écrit:La plus grande fierté tel que la grandeur d'un homme ne réside pas dans ces actes mais dans les conséquences que ces actes auront (Titi In Love).

Last Survivor: La fin du monde ne fait que commencer...[b]
Serez vous le Last Survivor?
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2188
Inscription: 31 Juil 2006 à 19:48
Localisation: A Last Survivor : Là où la fin du monde ne fait que commencer!
Avertissements: 1

Re: Affichage des messages dans un chat

Messagede spitfire pat le 06 Nov 2008 à 16:10

Gryffondor a écrit:Oui, j'avais pensé à cela et donc cela présuppose que je dois enregistré le timestamp dans un fichier différent de celui qui fait la requêtte d'affichage des messages?

ben attends, je suppose que ta requête d'affichage se fait dans un script qui se rafraichit régulièrement. le point d'entrée de ton utilisateur ne doit pas se trouver dans ce script, sinon il serait regulièrement déconnecté/reconnecté
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14673
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Affichage des messages dans un chat

Messagede Gryffondor le 06 Nov 2008 à 16:21

Exact:
Pour mieux comprendre, voici le script:
chat.php
Code: Tout sélectionner
<?php 
session_start
();
$pseudo = $_SESSION['player'];
// -------
$id = $_SESSION['id'];
// TEMPS
$temps = time();
?>
<form method='post'>
<input type='text' name='message' size='45' /> <br /><br /><input type='submit' onclick="affdyn_form('message','tchat_process.php',Form.serialize(this.form)); live_update('message','tchat_process.php','1'); return false;" value='envoyer'/></form>
<div id="message">
</div>

chat_process.php
Code: Tout sélectionner
<?php
session_start
();
$pseudo = $_SESSION['player'];
// -------
$id = $_SESSION['id'];
$heure = date("H : i >");
// TEMPS
$temps = time();

if(isset(
$_POST['message']))
    {
        $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
       //on enregistre la date, le message, le pseudo etc.
        }
//maintenant on affiche les résultats
$reponse = mysql_query("SELECT * FROM chat WHERE timestamp > $temps ORDER BY id desc LIMIT 50");
// Boucle des 50 derniers messages du chat
 

functions:
Code: Tout sélectionner

<script>
affdyn_form = function (div,liens,form){
    var div = div;
    var url = liens;
    var parametres = form;
    var MyAjax = new Ajax.Updater(
        div,
        url,
        {
            method: 'post', 
            parameters
: parametres,
            evalScripts: true
        
}
    );    
}

<!--
 Chat: affichage en live -->
function live_update(div,url,delay) {
    new Ajax.PeriodicalUpdater(
        div, 
        url
,
        {
            method: 'post',
            frequency: delay
        
}
    );
}
</script>
Titi In Love a écrit:La plus grande fierté tel que la grandeur d'un homme ne réside pas dans ces actes mais dans les conséquences que ces actes auront (Titi In Love).

Last Survivor: La fin du monde ne fait que commencer...[b]
Serez vous le Last Survivor?
Avatar de l’utilisateur
Gryffondor
Maître des floodeurs
Maître des floodeurs
 
Messages: 2188
Inscription: 31 Juil 2006 à 19:48
Localisation: A Last Survivor : Là où la fin du monde ne fait que commencer!
Avertissements: 1

Re: Affichage des messages dans un chat

Messagede spitfire pat le 06 Nov 2008 à 16:52

le problème c'est que chat.php bouclant régulièrement sur lui-même à chaque appui du bouton d'envoi, il ne doit pas être le point d'entrée du chat, sinon, tu ne pourras pas garder constante l'heure de connexion
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14673
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Affichage des messages dans un chat

Messagede mani le 11 Nov 2008 à 22:27

Le problème aussi, c'est que tu veux faire apparaître les messages à partir du moment ou l'utilisateur s'est enregistré, sans pour autant avoir enregistré son timestamp de connexion.

Il faudrait rajouter un enregistrement de ce timestamp dans la BDD et la mettre à jour à chaque connexion. Puis dans ton fichier chat.php :

Code: Tout sélectionner
    <?php
    session_start();
    $pseudo = $_SESSION['player'];   
    // -------
    $id = $_SESSION['id'];
    $heure = date("H : i >");
    // TEMPS
    $temps= $_SESSION['timestamp'];

    if(isset($_POST['message']))
        {
            $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
           //on enregistre la date, le message, le pseudo etc.
            }
    //maintenant on affiche les résultats
    $reponse = mysql_query("SELECT * FROM chat WHERE timestamp > $temps ORDER BY id desc LIMIT 50");
    // Boucle des 50 derniers messages du chat
     


C'est une solution si j'ai bien compris ta demande. Il en existe d'autres, notamment avec les cookies... le résultat final est le même.
Avatar de l’utilisateur
mani
Posteur habitué
Posteur habitué
 
Messages: 266
Inscription: 22 Nov 2007 à 17:00
Localisation: Potemania


Retourner vers Coding, Webmastering et Sécurité informatique

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

Liens : phpBB.biz • phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB-Services.com • phpBB3 Styles • phpBB podpora • Net Avenir • PromoBenef • Ticket Gagnant •