Eredmény: 1 - 6 (6) összesen

Téma: Light AJAX Chat.

  1. #1
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás Light AJAX Chat.

    Szenvedek egy ideje egy AJAX chatel de valami nem stimmel valamiért.

    HTML kód:
    <!-- 
    //Browser Support Code
    var c  = 0;
    var start = 0;
    var last = "";
    
    function ajaxFunction(msg){
    	if ( msg !== undefined  ) {
    	last = msg;	
    	}
    	document.getElementById("x") == "";
    	var ajaxRequest;  // The variable that makes Ajax possible!
    	
    	try{
    		// Opera 8.0+, Firefox, Safari
    		ajaxRequest = new XMLHttpRequest();
    	} catch (e){
    		// Internet Explorer Browsers
    		try{
    			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try{
    				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e){
    				// Something went wrong
    				alert("Your browser broke!");
    				return false;
    			}
    		}
    	}
    	// Create a function that will receive data sent from the server
    	ajaxRequest.onreadystatechange = function(){
    		
    		if(ajaxRequest.readyState == 4){
    		    if (msg == undefined) {
    			document.getElementById('chat').innerHTML = ajaxRequest.responseText;			
    			var objDiv = document.getElementById("chat");
    			objDiv.scrollTop = objDiv.scrollHeight;
    			}
    			if (msg !== undefined) {				
    				if  (ajaxRequest.responseText == last)  {start=0; }
    			}
    			
    		}
    		
    	}
    	if (msg == undefined  ) { 
    	ajaxRequest.open("GET", "chat.php?p="+Math.random(), true);
    	ajaxRequest.send(null);	
    	}
    	else
    	{
    	var params = "msg="+encodeURIComponent(msg);
    	ajaxRequest.open("POST", "chat.php", true);
    	ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");	
    	ajaxRequest.send(params); 
    	ajaxFunction();
    	start=1;	
    	}
    	setTimeout("ajaxFunction()", 6000); 	
    }
    function sure(){
    if (confirm("Posting Failed, Resend last message?")) {
    ajaxFunction(last); 
    } else {
    document.getElementById("x").value=last;
    
    } 
    }
    
    
    function timer(){
    	if (start == 1) {		
    		c = c+1;
    		if (c > 5 ) { c=0; start=0; sure(); }		
    	}
    }
    
    setInterval("timer()", 1000);  
    
    
    function online(){
    	
    	var ajaxRequest;  // The variable that makes Ajax possible!	
    	try{
    		// Opera 8.0+, Firefox, Safari
    		ajaxRequest = new XMLHttpRequest();
    	} catch (e){
    		// Internet Explorer Browsers
    		try{
    			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try{
    				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e){
    				// Something went wrong
    				alert("Your browser broke!");
    				return false;
    			}
    		}
    	}
    	// Create a function that will receive data sent from the server
    	ajaxRequest.onreadystatechange = function(){
    		if(ajaxRequest.readyState == 4){
    			document.getElementById('online').innerHTML = ajaxRequest.responseText;			
    			
    		}	
    	}
    
    	ajaxRequest.open("GET", "chat.php?do=online&x="+Math.random(), true);
    	ajaxRequest.send(null);	
    	setTimeout("online()", 10000); 	
    }
    
     
    
     
    //-->
    function enter_pressed(e){
    var keycode;
    if (window.event) keycode = window.event.keyCode; 
    else if (e) keycode = e.which; 
    else return false; 
    return (keycode == 13); 
    }
    
    ajaxFunction();
    online();


    A PHP része meg ha POST ot kap akkor simán vissza küldi amit kapot, az ajax a response ben össze hasonlítja a küldöttet a kapottal és ha passzolnak akkor az azt jelenti, hogy megkapta, ha meg nem passzol akkor rákérdez, hogy megpróbálja-e még1x.

    A php rész meg ez lenne
    PHP kód:
    <?php
    ob_start
    ("ob_gzhandler");
    session_start();

    if (!isset(
    $_SESSION['user'])) {
    die(
    'NOT LOGGED IN!');
    }
    Header('Cache-Control: no-cache');
    Header('Pragma: no-cache');

    // MySQL Settings
    $dbhost 'localhost';
    $dbuser '******';
    $dbpass '******';
    $db '******';
    $dbtable 'chat';

    $conn mysql_connect($dbhost$dbuser$dbpass) or die ('Database Erorr');
    mysql_select_db($db);
    // END Mysql

    //Variables 
    $do $_GET["do"];
    $num $_GET["n"];
    $msg $_POST["msg"];
    $user $_SESSION["user"];

    // END Variables 
    mysql_query("UPDATE userso SET time = now() WHERE user = '".$user."'");

    $query "Select user from userso where time > now()-30";
    $result mysql_query($query);
    while( 
    $row mysql_fetch_array($result)){
    $online $online ." "$row["user"];
    }
    if (
    $do == 'online' )
    {
    echo 
    "Online: $online ";
    mysql_close($conn);
    die();
    }
    if (
    $_SERVER['REQUEST_METHOD'] == 'POST' ) { echo "$msg"; }
    if (isset(
    $msg)) {
    $mit = array(
    ':)',
    ':(',
    ';)',
    ':D',
    ';;)',
    '>:D<',
    ':-/',
    ':x',
    ':">',
    ':P',
    ':-*',
    '=((',
    ':-O',
    'X(',
    ':>',
    'B-)',
    ':-S',
    '#:-S',
    '>:)',
    ':((',
    ':))'
    );


    $mire   = array(
    '<img src="sm/1.gif">',
    '<img src="sm/2.gif">',
    '<img src="sm/3.gif">',
    '<img src="sm/4.gif">',
    '<img src="sm/5.gif">',
    '<img src="sm/6.gif">',
    '<img src="sm/7.gif">',
    '<img src="sm/8.gif">',
    '<img src="sm/9.gif">',
    '<img src="sm/10.gif">',
    '<img src="sm/11.gif">',
    '<img src="sm/12.gif">',
    '<img src="sm/13.gif">',
    '<img src="sm/14.gif">',
    '<img src="sm/15.gif">',
    '<img src="sm/16.gif">',
    '<img src="sm/17.gif">',
    '<img src="sm/18.gif">',
    '<img src="sm/19.gif">',
    '<img src="sm/20.gif">',
    '<img src="sm/21.gif">'
    );
     
    $msgstr_replace($mit$mire$msg);
    mysql_query("INSERT INTO  $dbtable (nick,message) VALUES ('".$_SESSION["user"]."','$msg')");
    if (
    $msg == '/clear' ) {  mysql_query("TRUNCATE TABLE  $dbtable;"); }
    }

    function 
    lst()
    {
    $query "SELECT * FROM (SELECT * FROM chat ORDER BY time DESC LIMIT 25 ) AS ttbl ORDER BY time ASC";      
    $result mysql_query($query);
    while(
    $row mysql_fetch_array($result)){
        if (
    $_SESSION['user'] == $row['nick']  )   $color "white"; else $color"black";
        echo 
    "<span style=\"font-size:18px; color:$color\">[" .substr($row['time'],11,8).  "] " $row['nick']. " : "$row['message'] . "</span>";
        echo 
    "<br />";
        }
    }


    if (
    $_SERVER['REQUEST_METHOD'] == 'GET' ) { lst(); }
    mysql_close($conn);
    ?>


    ADSL kapcsolattal tökéletesen működik, viszont ezt éppen 3G re szeretném ami nagyon ingadozik és sokszor nem ér el a POST, de érdekes módon 5-6x is elküldi ugyan azt, és nem látom hogy mi a hiba.


    [OFF] PHP : Hogyan lehet azt elérni, hogy a smileikat helyesen cserélje ki, es ne keljen átrendezni pl:
    Kód:
    Hello :))
    Ez így kéne kinézzen:
    Hello

    Viszont egyszer kicseréli a
    Kód:
    :)
    erre :
    és a ) marad, eredmény:

    Hello )


    Köszönöm


    * XSS / SQLi most még nem fontos.



  2. #2
    Új tag
    Csatlakozott
    10-07-20
    Hozzászólás
    1
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Light AJAX Chat.

    Hogyan lehet azt elérni, hogy a smileikat helyesen cserélje ki, es ne keljen átrendezni
    A listában előre kell írni a ": ))" és a végére a ": )", mivel a : )-t már lecserélte a hivatkozásra.

    Mellesleg nem jó, ha az "online()" procedúrádban rekurzívan hozod létre sorban az ajax objektumokat.



  3. #3
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Light AJAX Chat.

    Jah rájöttem, lefagy minden
    Most kaptam valami JSON os cuccot nagyon jó és filet használ csak van 1-2 gond vele, mert nem hozza a régi hozzászólásokat.



  4. #4
    Mentor arth2o logója
    Csatlakozott
    10-03-11
    Hely
    Győr
    Hozzászólás
    408
    Begyűjtött 7 köszönetet
    2 hozzászólásával

    Alapbeállítás re: Light AJAX Chat.

    Régebben játsziból csináltam egy ilyet PHP, MySQL, JQuery UI alapokon. Letöltheted és használhatod bátran.

    Ha jól emlékszem az adatbázist átírtam SQLite-ra, mert nem tetszett a sok periodikus kérés a szerver felé.

    Letöltés PHP + jQueryUI + MySQL Chat képződmény:
    http://twitt.hu/r9



  5. #5
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Light AJAX Chat.

    Köszi kipróbálom mindenképp, csak egy kicsit puccosnak túnik

    Van egy most csak nem vágom annyira ezt a jQuery témát, elég jól birja a szerver, és file-t használ csak az a gond, hogy nem hozza a régebbi hozzászólásokat vagyis, ha valakik beszélgetnek rajta addig nem lehet látni mig hozza nem szólsz, és refreshnél ugyan ez van.


    Csatolt fájl-ok Csatolt fájl-ok

  6. #6
    Mentor arth2o logója
    Csatlakozott
    10-03-11
    Hely
    Győr
    Hozzászólás
    408
    Begyűjtött 7 köszönetet
    2 hozzászólásával

    Alapbeállítás re: Light AJAX Chat.

    Idézet KForum eredeti hozzászólása Hozzászólás megtekintése
    Köszi kipróbálom mindenképp, csak egy kicsit puccosnak túnik

    Van egy most csak nem vágom annyira ezt a jQuery témát, elég jól birja a szerver, és file-t használ csak az a gond, hogy nem hozza a régebbi hozzászólásokat vagyis, ha valakik beszélgetnek rajta addig nem lehet látni mig hozza nem szólsz, és refreshnél ugyan ez van.
    Ha jól értem az a gondod, hogy amíg nem ír be, addig nem látod az esetleges frissüléseket?

    Kell csinálni egy háttérben periodikusan ismétlődő folyamatot (kérés a szerver felé, lekéri a bejegyzéseket visszaadja.. becuccolja az adott html elembe)

    1, a szövegek megjelenítése független a beírástól (persze lefuttathatod akkor is)
    2, a szövegek megjelenítése folyamatosan, idő közönként lekéred

    Ezt úgy tudod megúszni js nélkül ha egy Iframe-et újratöltesz headerből (gagy, de műxik)

    Js megoldások:
    hXXp://api.jquery.com/category/ajax/

    AJAX update content every X seconds:
    http://twitt.hu/rB

    ---

    Ha rosszul értem, és egy fájlt használnak, akkor a fájlt zárolja (remélem) az adott beíró és azért nem tudod addig olvasni.

    Vagy egyszerűen csak mentéskor hívod meg a chat előzmények visszatöltését, de egy JS hiba miatt is lehet hogy nem működik.


    Utoljára módosítva: arth2o által : 2010-07-22 17:32

A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •