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 :

[PHP-JS] Simulez un Post pour afficher un chat (fichier texte)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 141
    Par défaut [PHP-JS] Simulez un Post pour afficher un chat (fichier texte)
    bonjour, j'ai trouver un chat et j'aimerai qu'il se charge a l'ouverture de la page en effet on est obliger d'appyyer sur envoyer pour que les message s'apparaise !

    c'est un chat en ajax.

    Si vous pouvez me donner un coup de main, merci

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    <?php
     
    $username= "toto";
     
    function post($username){
     
    $heure = date("H:i:s");
     
    	$fp = fopen('data',"a+") or die ('Une erreur est survenue');
    	$new = "*[$heure] $username : vient de se connecter...<br/>";
    	fputs($fp,$new);
    	fclose($fp) or die ('Erreur fermeture fichier');
     
    }
     
    post($username);
     
    ?>
     
    <script type="text/javascript">
     
    var nom = <? print $username ;?>;
     
    var xhr = null; 
     
    function getXhr(){
     
    	if(window.XMLHttpRequest) // Firefox et autres
     
    	   xhr = new XMLHttpRequest(); 
     
    	else if(window.ActiveXObject){ // Internet Explorer 
     
    		try {
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    				} catch (e) {
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    	            }
    	}
     
    	else { // XMLHttpRequest non supporté par le navigateur 
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	   xhr = false; 
    	} 
    }
     
    function gestion(post,util){
     
    		getXhr()
     
    		xhr.onreadystatechange = function(){
     
    			if(xhr.readyState==4 && xhr.status == 200){
    				eval(xhr.responseText);
    			}
     
    		}
     
    		xhr.open("GET","post.php?n="+nom+"&post="+post+"&util="+util,true);
    		xhr.send(null);
     
    }
     
    function tempo(){
    	setTimeout(rafraichir,3000);
    }
     
    function rafraichir(){
    	gestion("","0");
    }
     
    function post(){
     
    	var mess = document.getElementById('post').value;
     
    	if(mess!=='' && nom!=="") {
     
    		gestion(mess,"1");
    		document.getElementById('post').value = '';
    		document.getElementById('post').focus();
     
    	}
     
    }
     
     
    </script>
     
    <link href="../images/style.css" rel="stylesheet" type="text/css">
     
    <div id="shotbox" onKeyPress="if(event.which==13||event.keyCode==13) post()" >
    <div id="messages">
    </div>
    <input name="post" size="80" id="post" align="absbottom" />
    </div>
    et voici le Post.php


    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
     
    header('Content-type: text/html; charset=iso-8859-1');
     
    $username="toto";
     
    $util = $_GET['util'];
    $nick = $username;
     
    if(isset($_GET['post'])){
    $post = htmlentities($_GET['post']);
    }else{$post=NULL;}
    $heure = date("H:i:s");
     
    (isset($post)&&$util==1) ? post($post,$nick,$heure) : refresh();
     
    function refresh(){
     
    	header('Content-type: text/html; charset=iso-8859-1');
     
    	$fp = fopen('data',"a+") or die ('Une erreur est survenue');
    	fseek($fp,0);
     
    	while (!feof ($fp)){          	// tant que pas en fin de fichier
     
    		$lecture = fgets($fp);	// stockage dans $lecture
     
    	}
     
    	$donnee=explode('*',$lecture);  // parsing des données
    	$combien=count($donnee); 		// nbre d'éléments
     
    	$affiche = '';
     
    	$i=$combien-25;
     
    	while($i!==$combien){
     
    		if($i>=0) $affiche .= $donnee[$i];
    		$i++;
     
    	}
     
    	fclose($fp) or die ('Une erreur est survenue');
     
    	echo 'document.getElementById("messages").innerHTML = "'.$affiche.'";';
    	echo 'tempo();';
     
    }
     
    function post($post,$nick,$heure){
     
    	$fp = fopen('data',"a+") or die ('Une erreur est survenue');
    	$new = '*['.$heure.'] '.$nick.' : '.$post.'<br/>';
    	fputs($fp,$new);
    	fclose($fp) or die ('Erreur fermeture fichier');
     
    	refresh();
     
    }
     
    ?>

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 466
    Par défaut
    Bonsoir

    Et ci tu mettais une meta balise genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="600"> //refresh toute les 600 secondes

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Par défaut
    Le problème avec le refresh automatique HTML c'est qu'il va effacer, si la personne tappe son message à ce moment, le message que la personne écrit, sans l'envoyer.

    Ce qui peut-être asser embétant (Même si c'est toutes les 5minutes).

    De plus cela ne réglera le problème qu'au bout de 5 minutes ...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 466
    Par défaut
    Bonsoir

    Et juste une idée qui vien de me venir d'activer la balise une fois le bouton envoyer cliquer avec un laps de temps de par exemple 5 s ??

  5. #5
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    • Perso, j'utiliserais Javascript pour faire un submit à interval régulier, en ayant pris soin de vérifier qu'il n'y ait rien dans le textarea avant... Ainsi, le formulaire ne sera pas envoyé si l'utilisateur est en train d'écrire un message... Pour cela, il suffit de connaître le nom du formulaire et du textarea, de programmer un interval avec la fonction Javascript appropriée.

    • Une autre idée : Tu peux également utiliser une IFRAME pour afficher les messages reçus dans un autre conteneur et recharger ce dernier sans toucher au reste de la page... ou bien utiliser une popup pour l'édition du message... etc.

    • Sinon, Flash, tu connais un peu ?

  6. #6
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    J'ai déjà fait un petit chat comme ca en php.

    Pour le problème de refresh, j'ai utilisé une iframe. Dans l'iframe, qui se rafraichissait toute les 2 ou 3 secondes automatiquement avec une balise meta, je ne fesais que lire un fichier texte (contenant ce que tout le monde avait dit) et l'afficher a l'écran.
    L'iframe était incorporée dans une page plus générale avec le formulaire qui permettait de saisir son login, et le message qu'on voulait envoyer. Et quand on cliquait sur envoyer, ca raffraichissait la page complete en envoyant les données.

    En terme de ressources et de propreté, c'était franchement pas top, mais ca marchait plutot bien, tant que le fichier texte qui contiennait le chat en lui même restait a une taille raissonnable.

    Sinon, tu peux utiliser des techniques genre ajax pour ne recharger régulièrement que la partie qui contient le chat en lui même, c'est un peu plus propre.

    Après, il te reste du pur java. C'est nettement mieux, mais faut savoir faire du java ^_^

Discussions similaires

  1. $.post pour afficher le resultat d'une requête sql
    Par philiblues18 dans le forum jQuery
    Réponses: 9
    Dernier message: 03/04/2012, 15h56
  2. Un modèle pour afficher les dossiers/fichiers
    Par rakba dans le forum Composants
    Réponses: 0
    Dernier message: 18/12/2011, 01h02
  3. déclencher traitement pour afficher noms de fichiers en temps réel
    Par Sephiroth66 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 01/08/2011, 17h09
  4. Réponses: 15
    Dernier message: 27/11/2010, 21h42
  5. PHP/FLASH récupérer une variable pour afficher une image dans un clip
    Par Touillette85 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/12/2008, 10h02

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