IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

actualisation automatique dans un minichat


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut actualisation automatique dans un minichat
    Bonjours
    Dans un minichat, Je voudrais que lorsque l’on appui sur le bouton « envoyer » la page se réactualise automatiquement, et que le message apparaisse sur le pc du correspondant sans être obligé de réactualiser manuellement.
    Si quelqu’un a une idée, merci d’avance.
    Le code de la page du chat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    try{
    $bdd =new PDO('mysql:host=localhost; dbname=minichat; 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());
    }
    // Récupération des 15 derniers messages
    $reponse = $bdd->query('SELECT id,pseudo, message, DATE_FORMAT(date_creation, \'%d/%m/%Y a %Hh%i\')
    AS date_fr FROM chatcheurs ORDER BY ID DESC LIMIT 0, 15');
    ?>
    <form action="mini_chat_post.php" method="post">
    <p><label for="pseudo">Pseudo :</label><input type="text" name="pseudo" id="pseudo" /></p>
    <p><label for="message">Message :</label><textarea id="message" name="message"  cols="40" rows="4" autofocus></textarea></p>
     
    <p><input type="submit" value="Envoyer" /></p>
     
    <h4>Pour le Chat en Live: <br />Cliquez sur le bouton
    <input type="button" onclick='window.location.reload(false)' value="Actualiser"/>
    Pour afficher les messages réponses de votre correspondant.<br />
    </h4>
    </form>
    <?php
    // Affichage de chaque message
    $last_id = 0;
    while ($donnees = $reponse->fetch()){
    echo '<p id="msg_'.$donnees['id'].'"> ' . $donnees['date_fr']. ':<strong> ' . htmlspecialchars($donnees['pseudo']) . '</strong> :
    ' . htmlspecialchars($donnees['message']) . '</p>';
    $last_id = $donnees['id'];
    }
    ?>

  2. #2
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Salut,

    Il te faut de l'ajax ou des websockets.
    Le problème de l'ajax c'est que la demande vient du client et pas du serveur.
    Le plus simple pour toi c'est un refresh toute les X secondes en javascript.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Pour moi il y a 3 maniéres de procéder:

    J'ai déjà fait une actualisation automatique avec une balise "meta"toutes les 30s, mais voila si on a pas fini d'écrire le message,

    tout s'efface et il te reste 30s pour le refaire et l'envoyer, sinon ...................

    Ou alors réactualiser que le contenue des balises <div>...</div> de manière a ce que le formulaire ne rentre pas en ligne de compte.

    Mais le plus logique ce serait que l'actualisation se fasse a chaque post du message quand on clique sur le bouton "envoyer", le message devrait s'inscrire automatiquement sur la page du correspondant, mais dans l'état actuel du code, ce correspondant est obligé de cliquer sur le bouton "Actualiser" pour voir apparaitre ce message.(pas trés pratique).

    Réactualisé que le contenu du <div>qui contient les messages ( toutes les secondes), je pense que ce serait le plus simple.

    Je cherche mais je ne suis pas encore assez fort en php et javascript pour pondre un code, quand a l'ajax n'en parlons pas.

    Il me faudrait trouver le code et la marche a suivre en entier ça m'évitera de chercher des heures, je n'ai trouvé que pas grand chose comme explications sur internet.

    Merci d'avance

  4. #4
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    J'ai déjà fait une actualisation automatique avec une balise "meta"toutes les 30s, mais voila si on a pas fini d'écrire le message,

    tout s'efface et il te reste 30s pour le refaire et l'envoyer, sinon ...................
    Pourquoi effacer? tu ne dois récupérer que ce que tu as besoin (pas de duplication) tu affiches à la suite. Regarde du côté jquery qui simplifie la chose avec la fonction append.
    Tes message doivent être dans une div ou li je ne sais pas trop, avec un id celui du message.

    Déjà enlève ton formulaire, m'est un event javascript ou jquery https://api.jquery.com/click/ ensuite tu envoi ton message http://api.jquery.com/jquery.ajax/ .
    Tu dois avoir à côté de ça une fonction javascript avec un setintervall qui fera une requête ajax pour récupérer tes messages en utilisant l'id du dernier message posté (dernière div ou li).
    Tu fais une requête sql select en prenant les id supérieur à ton id envoyé (cela veut dire qu'il non pas encore était affiché).
    Tu retournes un json c'est pas volumineux http://php.net/manual/fr/function.json-encode.php tu le récupère côté client avec jquery http://api.jquery.com/jquery.getjson/ .
    Moi j'aurais fait comme ça, il faut maintenant que tu essayes n'hésites pas à poser des questions bonne journée.

  5. #5
    Invité
    Invité(e)
    Par défaut
    regarde du côté de SSE ServerSentEvent https://developer.mozilla.org/fr/doc...er-sent_events ou WebSockets ou NodeJS.

  6. #6
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Quand j’envoie des données la bdd les enregistre,et justement quand la table reçoit des nouvelles information n'y aurait il pas un moyen a laide d'un code de remettre a jour automatiquement la page côté client.
    donc en php ça devrait donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if{
     bdd change;
    else
    envoie commande pour refress "http://ma page.php";
    je ne suis pas assez calé pour faire ce code, je vais chercher, mais si quelqu'un a une idée elle sera la bienvenue .
    J'ai essayé ça avec les explications vues plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script type="text/javascript">
    var source = new EventSource("mini_chat_post.php");
    source.onmessage = function(event) {
        document.getElementById("vert").innerHTML += event.data + "<br>";
    }; 
    </script>
    mais ça ne marche pas

Discussions similaires

  1. Réponses: 10
    Dernier message: 18/12/2015, 11h47
  2. [2010] Actualiser automatiquement une valeur choisie dans une liste déroulante
    Par cottingf dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 27/11/2015, 10h02
  3. Actualisation automatique du Stock dans la table T_Produits
    Par Ruimateus dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/08/2011, 17h25
  4. Actualisation automatique de graphiques dans un rapport
    Par bruchpilot dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/09/2009, 12h39
  5. Actualisations automatiques des liens dans mon script
    Par Geekolin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/01/2008, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo