• User Attivo

    Contenuto che si aggiorni senza refresh classico

    Salve ragazzi...

    Ho una minichat realizzata con php e mysql...c'è un piccolo problemino che vorrei risolvere,si sa nelle chat il contenuto deve essere aggiornato in tempo reale, ho messo un <meta http-equiv="refresh" content="3" /> nella pagina contenuta dall'iframe.ma la soluzione non mi soddisfa a pieno...io vorrei farsi' che io nel momento in cui invio il dato sia io che l utente che sta dall altra parte possano leggere il tutto in tempo reale senza dover per forza aspettare il refresh della pagina....come è possibile fare ciò..?Ovviamente evitando i classici <meta http-equiv="refresh" content="3" /> ?
    Che soluzioni adottare?

    Grazie


  • ModSenior

    Ciao carlitos1982,

    Puoi fare in ajax le richieste, cosi eviti i refresh.

    Per esperienza personale ti avverto che avevo provato a fare la cosa, e con circa 200 utenti online sono riuscito a far dare i numeri ad un server dedicato che era rallentato non poco perchè iniziavano ad esserci tante richieste simultanee. Se hai poca gente online non avrai problemi, ma se hai numeri un pò più grandi, sopratutto se ti trovi su un hosting penso te lo faranno togliere.


  • User Attivo

    Ciao Thedarkita,
    si diciamo che la chat è per pochi utenti quindi non dovrebbe crearmi problemi..il problemino problemone però è che di ajax aimè l unica cosa che conosco e la squadra di calcio olandese..:D
    Ok..a parte gli scherzi..come si realizza tale cosa con ajax..hai qualche esempio..guida da suggerirmi perpoter realizzare la cosa.?


  • ModSenior

    Non è difficile 😄

    Prova cosi:

    
    <script>
    function Chat() 
    { 
    var xmlHttp; 
    try 
      { 
      // Firefox, Opera 8.0+, Safari 
      xmlHttp=new XMLHttpRequest(); 
      } 
    catch (e) 
      { 
      // Internet Explorer 
      try 
        { 
        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
      catch (e) 
        { 
        try 
          { 
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
          } 
        catch (e) 
          { 
          alert("Il tuo browser non supporta la chat!"); 
          return false; 
          } 
        } 
      } 
      xmlHttp.onreadystatechange=function() 
        { 
        if(xmlHttp.readyState==4) 
          { 
          document.getElementById("QUI-ID-DEL-DIV-IN-CUI-INSERIRE-OUTPUT-DEL-FILE-PHP").innerHTML=xmlHttp.responseText; 
          setTimeout('Chat()', 3000); //tempo di refresh generale  
          } 
        } 
      xmlHttp.open("GET","/filecontesto.php",true); 
      xmlHttp.send(null); 
      } 
      setTimeout('Chat()', 3000); 
    </script>
    
    

  • User Attivo

    allora...questo codice va inserito nella pagina in cui mostro a video i messaggi giusto..?
    Mi spiego la mia chat è composta da due pagine in php...

    Questa e minichat.php che mostra il form per l invio dei messaggi solo a chi è loggato..

    [PHP]
    <?php
    //Apro la sessione e...
    session_start();
    // Sessione impostata a 10 min
    ini_set('session.gc_maxlifetime', '1800');

    include "config.php"; // file di connessione al Db

    //verifico se l utente è bannato o meno..
    if($_SESSION['logged'] == 1 && mysql_num_rows(mysql_query("SELECT bannato FROM minichat WHERE bannato = '".$_SESSION[ 'nickname']. "'" )) > 0)
    die('Sei bannato');

    //verifico che dopo il login io abbia la chiave di sessione ad 1
    elseif($_SESSION['logged'] == 1)

    echo"

    <BODY background="/modificaprofilo.jpeg">

    //il form pe rl invio dei messagggi viene mostrato solo a chi è loggato
    <form action="minichatframe2.php" name="chat" method="POST">
    <textarea rows="2" size="40" maxlength="20" id="text" name="text" cols="30"></textarea><br><br>
    <a href="javascript:Popup2('faccine2.htm')"><img src="faccine3/smile_sorriso.gif" border="0" alt="Qui trovi altre faccine da inserire!"></a>
    <a href="javascript:Popup('faccine.htm')"><img src="faccine/smile.gif" border="0" alt="Inserisce le faccine che piu' ti piacciono!"></a>
    <a href="javascript:Popup1('colori.htm')"><img src="colori.gif" border="0" alt="Inserisci il testo che vuoi colorare fra i tag <font>"></a>
    <br>
    <center><input type="image" src="inviochat.gif" ></center>

    ";
    ?>[/PHP]

    poi ho la pagina che mostra a video il tutto..

    minichat2.php

    [PHP]
    <?

    //Apro la sessione e...
    session_start();

    include "config.php"; // file di connessione al Db
    include "minichatframe.php";

    if(isset($_POST)){

    $id_user="";
    $text="";

    $id_user=mysql_real_escape_string($_SESSION['nickname']);

    $text=htmlentities($_POST['text']);

    $sesso=$_SESSION['sesso'];
    if ((empty($text))== false) // se $text non è vuoto o nullo
    {
    $sql = "INSERT INTO minichat (id_user, testo,tempo,sessochat) VALUES ('$id_user','$text',CURRENT_TIME(),'$sesso')";
    $query= @mysql_query ($sql) or die (mysql_error());

    $recuperoid=mysql_insert_id();
    $trim_id=$recuperoid-60;

    $sql_delete="DELETE FROM minichat WHERE id<'$trim_id'";
    $query= @mysql_query ($sql_delete) or die (mysql_error());

    }
    }else{
    }

    $sql_select="SELECT id_user, testo,tempo,sessochat FROM minichat ORDER BY id DESC LIMIT 5 ";
    $query_select= @mysql_query($sql_select) or die (mysql_error());

    while($row=mysql_fetch_array($query_select))
    {
    $row['testo'] = str_replace("grr","<img_src='/faccine3/smile_diavolo.gif'>",$row['testo']);

    $row['testo'] = str_replace(":*","<img_src='/faccine3/smile_bacio.gif'>",$row['testo']);

    $row['testo'] = str_replace("@_@","<img_src='/faccine3/smile_arrabbiato.gif'>",$row['testo']);

    //Funz<ione che imposta massimo 48 lettere per riga

    $stringa=$row['testo'];

    $nuova_stringa = wordwrap($stringa, 42, "<br />\n",true);
    

    $nuova_stringa = str_replace("<img_src", "<img src", $nuova_stringa);

    $nick=$row['id_user'];
    $maiuscola=$row['id_user'];
    $maiuscola=ucfirst($maiuscola);

    if($row['sessochat'] == 'femmina'){

    $classenick="donna";
    $colore="FF99FF";
    }else{
    $classenick="uomo";
    $colore="0066FF";
    }
    echo"

    <BODY background="/modificaprofilo.jpeg">

    <div id="minichatsito"><font color="#".$colore."" size ="3" face="Arial Bold"><b><a target="contenuto" href="profiloaltri.php?nickname=".$nick.""
    class="".$classenick."" >".$maiuscola.": </font></a></b><font class="tempo" color="#000000"
    face="Arial Bold" size="1">".$row['tempo']."</font><br><font class="testo" color="#000000" face="Arial Bold" size="2">".$nuova_stringa."</font></b></div><br>";

    }
    ?> [/PHP]

    E in questa ultima pagina che devo inserire il codice che te mi hai postato?
    Nel tuo codice filecontesto.php sarebbe nel mio caso sempre quest ultima pagina..?


  • User Attivo

    ho inserito il tuo script nella mia minichat2.php
    cosi..
    [php]
    <html>
    <head>

    <link rel="stylesheet" type="text/css" href="stilechat.css" />
    <script>
    function Chat()
    {
    var xmlHttp;
    try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
    // Internet Explorer
    try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
    try
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
    alert("Il tuo browser non supporta la chat!");
    return false;
    }
    }
    }
    xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
    {
    document.getElementById("minichatsito").innerHTML=xmlHttp.responseText;
    setTimeout('Chat()', 3000); //tempo di refresh generale
    }
    }
    xmlHttp.open("GET","/minichat2.php",true);
    xmlHttp.send(null);
    }
    setTimeout('Chat()', 3000);
    </script>
    [/php]che sarebbe la pagina che mostra a video il contenuto..
    Come mai appena apro il sito mi mostra il tutto normalmente mentre dopo 2 o 3 secondi dopo mi mostra subito sotto la pagina dei contenuti della chat una copia del contenuto di ciò che c'è scritto sopra..?
    Poi quando invio il messaggio subito dopo mi mostra una copia del form pe rl invio dei messaggi..?
    Cioè praticamente mostra a video 2 form per l invio dei messaggi e 2 contenuti uguali di ciò che si scrive nella chat...come mai?

    il sito e strutturato in frame..
    [html]

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Prova con frame</title>
    </head>
    <frameset rows="23%,">
    <frame name="intestazione" id="intestazione" frameborder="no" src="intestazione.php" scrolling="no" NOREsize>
    <frameset cols="20%,
    ">

          <frame name="menu" id="menu" frameborder="no" src="minichat2.php" NOREsize>
           <frame name="contenuto" frameborder="no" id="contenuto" src="contenuto.php">
     </frameset>
    

    </frameset>

     <noframes>
     <p>Qui può essere indicato il link a<A href="senzaFrame.html">
              una versione del sito</a> che non utilizzi un layout a frame</p>
     </noframes>
    

    </frameset>
    </html>[/html]Questo influisce?


  • ModSenior

    Ciao,

    Scusa il ritardo allora di come hai la cosa organizzata non ci ho capito molto, quindi ti faccio un esempio veloce dell'implementazione, che non dovresti avere problemi a comprendere, in caso chiedi ;).

    miapagina.php
    [php]
    <html>
    <head>
    </head>
    <body>
    <!-- altro HTML -->
    <div id="msg"></div>
    <script>
    function Chat()
    {
    var xmlHttp;
    try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
    // Internet Explorer
    try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
    try
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
    alert("Il tuo browser non supporta la chat!");
    return false;
    }
    }
    }
    xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
    {
    document.getElementById("msg").innerHTML=xmlHttp.responseText;
    setTimeout('Chat()', 3000); //tempo di refresh generale
    }
    }
    xmlHttp.open("GET","/aggiorna.php",true);
    xmlHttp.send(null);
    }
    setTimeout('Chat()', 3000);
    </script>
    <!-- Altro HTML-->
    </body>
    </html>
    [/php]

    Nel file aggiorna.php metti i messaggi da mostrare, ogni 3 secondi verrà fatta una richiesta ad aggiorna.php prenderà l'output e verrà sostituito al contenuto del nostro div.
    Il funzionamento come puoi ben vedere è facile facile. 🙂


  • User Attivo

    continua a non funzionare...quando premo invia mi mostra il contenuto dei messaggi due volte..:bho:


  • User Attivo

    funziona...:)
    alcuen volte però si blocca...sto usando un hosting gratuito altervista per provare...e dovuto a quello sicuramente che non regge le connessioni..cosa m consigli di prendere per non avere problemi di bloccaggio della chat..?Ovviamente su costi contenuti...


  • ModSenior

    Purtroppo non credo ci sia soluzione con costi contenuti.
    Quanta gente dovresti avere li collegata nei momenti di picco?


  • User Attivo

    credo una 50 ina...


  • User Attivo

    Mi sa che non funziona..ho appena provato con un amico..lui scriveva ma nulla..i suoi messaggi li ho letti solo dopo che ho scritto io..e pure avevo provato dal mio pc tenendo le pagine della chat aperte su due finestre differenti del browser..e funzionava!Cioè se scrivevo in una finestra automaticamente nell altra mi mostrava il messaggio...
    Dove cavolo sbaglio..?
    :arrabbiato:


  • ModSenior

    Ciao,

    Dovresti postare le pagine, altrimenti non saprei il motivo. 🙂


  • User Attivo

    Ho risolto..:)


  • ModSenior

    Bene 🙂

    Magari posta la soluzione per chi come te sta cercando di fare la stessa cosa. 😉


  • User Attivo

    nulla di che..il problema era il mio di come avvevo strutturato la minchat...
    avevo sia il form che la lettura dei messaggi nella stessa pagina...e quando la funziona in javascript mi richiamava la pagina da visualizzare mi succedeva che mentre scrivevo nel form passati 3 secondi cancellava il tutto...aggiornvava praticamente...quindi ho la pagina con la script in ajax che sta per conto suo,poi ho creato la sola pagina per la lettura dei messaggi che sarebbe quella che viene richiamata dalla pagina che ha al suo interno lo script ajax..e il form sta su un altra pagina per conto suo..che includo solo per chi è loggato..