Tchat ajax

Eléphant du PHP | 257 Messages

03 janv. 2016, 21:42

Bonjour j'essaye de mettre en place un tchat en fichier texte sans base de donnée , j'ai quelque soucis le pseudo ok le message de s'insert pas ?

ou une petite idée svp pour m'aidée et peut-être améliorer.

ps: je séparais les différents script une fois le bon fonctionnement

Code : Tout sélectionner

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Chat</title> <style type="text/css"> #conversation { width: 700px; height: 400px; border: black 1px solid; background-color:#FFFFFF; overflow-x: hidden; overflow-y: scroll; padding: 5px; margin-left: 10px; } fieldset { width: 730px; margin-left: 10px; background-color:#FEEBFD; border: black 1px solid; } </style> <script type="text/javascript"> //Fonction d'instance permettant de vérifier si le navigateur supporte l'objet XMLHTTPRequest function objet_XMLHttpRequest() { //On déclare une variable "mavariable" à null var mavariable = null; //Teste si le navigateur prend en charge les XMLHttpRequest if (window.XMLHttpRequest || window.ActiveXObject){ // Si Internet Explorer alors on utilise les ActiveX if(window.ActiveXObject){ //On teste IE7 ou supérieur try{ mavariable = new ActiveXObject("Msxml2.XMLHTTP"); } //Si une erreur est levée, alors c'est IE 6 ou inférieur catch(e){ mavariable = new ActiveXObject("Microsoft.XMLHTTP"); } } //Navigateurs récents (Firefox, Opéra, Chrome, Safari, ...) else{ mavariable = new XMLHttpRequest(); } } //XMLHttpRequest non supporté par le navigateur else{ alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest..."); return null; } //On retourne l'objet mavariable return mavariable; } //code d'envoi du chat function chat_ajax(){ //On déclare une variable var mavariable = objet_XMLHttpRequest(); //récupération des données var pseudo = encodeURIComponent(document.getElementById("pseudo").value); var messtext = encodeURIComponent(document.getElementById("messtext").value); //idem pour le message if(messtext == ''){ alert('Message vide!'); return false; } //On assigne une fonction à la propriété onreadystatechange mavariable.onreadystatechange = function(){ //Si l'attribut readyState renvoie 4 et que l'attribut status renvoie 200 if(mavariable.readyState == 4 && mavariable.status == 200){ //On affiche le résultat chargé dans l'attribut responseText qui est affiché dans un div nommé "conversation" document.getElementById("conversation").innerHTML=mavariable.responseText; //On vide le champ message document.getElementById("messtext").value=''; } }; //On déclare la méthode d'envoie mavariable.open("POST","traitement_chat.php",true); //On assigne un header mavariable.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //On envoie mavariable.send("pseudo="+pseudo+"&messtext="+messtext); } //Fonction permettant de rafraichir le div "conversation" function refresh() { var xhr = objet_XMLHttpRequest(); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200){ document.getElementById("conversation").innerHTML = xhr.responseText; } }; xhr.open("POST","tchat.txt", true); xhr.send(null); } //On lance la fonction toute les secondes setInterval("refresh()", 3000); </script> </head> <?PHP $htmlData = ''; if (!empty($_POST['messtext'])) { if (get_magic_quotes_gpc()) { $htmlData = stripslashes($_POST['messtext']); } else { $htmlData = $_POST['messtext']; } } ?> <script charset="utf-8" src="kindeditor-min.js"></script> <script charset="utf-8" src="lang/zh_CN.js"></script> <script> var editor; KindEditor.ready(function(K) { editor = K.create('textarea[name="messtext"]', { resizeType : 1, allowPreviewEmoticons : false, allowImageUpload : false, items : ['forecolor', 'hilitecolor', 'bold', 'italic','|', 'emoticons', 'link'] }); }); </script> <fieldset> <legend><h1>Tchat</h1></legend> <div id="conversation"></div><br /> <form method="post" id="monform"> <input type="hidden" id="pseudo" value="pseudo"> <?php echo $htmlData; ?> <textarea id="messtext" name="messtext" style="width:600px;height:20px;visibility:hidden;"> <?php echo htmlspecialchars($htmlData); ?></textarea> <input type="button" value="Envoyer" onclick="chat_ajax()"><br /><br /> </form> </fieldset> </body> </html>
traitement du Tchat

Code : Tout sélectionner

<?php //Vérification des données $pseudo = (isset($_POST["pseudo"])) ? $_POST["pseudo"] : NULL; $messtext = (isset($_POST["messtext"])) ? $_POST["messtext"] : NULL; //On créé une variable pour donner un nom au fichier $fichier = "tchat.txt"; //On ouvre le fichier. Si il n'existe pas il sera créé automatiquement $fichier_a_ouvrir = fopen ($fichier, "a+"); //On écrit dans le fichier fwrite($fichier_a_ouvrir, '<div class="bordure">'.$pseudo.' : '.$messtext.'</div>'); //On ferme la connexion fclose ($fichier_a_ouvrir); //On ouvre le fichier en lecture $fichier_a_ouvrir = fopen ($fichier, "r"); //On lit son contenu $contenu_du_fichier = fgets($fichier_a_ouvrir, 1024); //On affiche son contenu echo $contenu_du_fichier; //On ferme la connexion fclose ($fichier_a_ouvrir); ?>

Petit nouveau ! | 9 Messages

04 janv. 2016, 20:00

Salut,

Le message ne s'ajoute pas à ton fichier, c'est ça ?

++
EvenID - La manière la plus simple d'envoyer des e-mails à vos utilisateurs en PHP.

Eléphant du PHP | 257 Messages

04 janv. 2016, 23:13

oui

Petit nouveau ! | 9 Messages

05 janv. 2016, 00:25

Tu as ouvert le fichier pour voir ? Si oui il va falloir loger ce qui est passé au script PHP.

$_POST["messtext"] contient-il la valeur attendue ? Si non, c'est un problème de JS, donc mauvaise section.

++
EvenID - La manière la plus simple d'envoyer des e-mails à vos utilisateurs en PHP.

Eléphanteau du PHP | 16 Messages

05 janv. 2016, 16:18

Ton code semble être fonctionnel. En tout cas chez moi ça fonctionne bien :)
Après avoir enlevé le "visibility:hidden" du textarea bien sur car sinon je ne vois pas l'intérêt du chat si on a pas l'endroit pour écrire.

Eléphant du PHP | 257 Messages

06 janv. 2016, 23:20

Bonsoir chez moi cela ne fonctionne pas

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 janv. 2016, 19:06

Bonjour,

"cela ne fonctionne pas" n'est pas une information suffisante pour permettre de résoudre un problème :)

Qu'est ce qui ne fonctionne pas ? le formulaire ne s'affiche pas ? il n'est pas envoyé ? le fichier n'est pas créé ? il est créé mais il est vide ? il existe et ne se rempli pas ? ... Qu'est ce que ton script est sensé faire et qu'est ce qu'il ne fait pas ?

Si tu passes l'url de traitement_chat.php directement dans ton navigateur, est-ce que cela affiche des messages d'erreur à l'écran ou dans les logs ? ou est-ce que le fichier est bien créé / complété avec les infos NULL / NULL ?

Dans le premier cas, faut voir de quel type d'erreur il s'agit et dans le second, c'est que le problème ne vient pas de l'enregistrement mais de la façon dont les données sont envoyées à ton script...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 257 Messages

08 janv. 2016, 18:06

Bonjour, quand j'ouvre la page du tchat le premier le pseudo est inscrit dans le fichier texte le message lui non et pour une seconde ligne il me mais message vide alors que l'on à écrit un message.

Voilà en gros