• User Attivo

    Ho provato...ma necessitano di una libreria ahahtext.js che non riesco a trovare in rete...


  • User Attivo

    C'è l ho fatta...diciamo che ho seguito lo stile di una shoutbox in php mysql e ajax e tramite la funzionalità di quella l ho riadattata alla mie esigenze..e anche con una mezz oretta di studio sull ajax...:D


  • User Attivo

    Perfetto, complimenti! 🙂


  • User Attivo

    :DGrazie...c'è un solo problemino che non ho capito a freddo come risolvere..se io aggiorno la pagina manulamente mi riscrive gli ultimi record inseriti...

    Questa e la pagina che mostra a video [PHP]

    <?php
    @header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    @header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
    @header("Cache-Control: no-store, no-cache, must-revalidate");
    @header("Cache-Control: post-check=0, pre-check=0", false);
    @header("Pragma: no-cache");
    @include 'config.php';
    ?>

    <html>
    <head>
    <title>Shoutbox</title>
    <script language="JavaScript" type="text/javascript" src="ajax.js">
    </script>
    </head>
    <body>

    <?
    $query = "SELECT * FROM shoutbox ORDER BY id DESC";
    $result = @mysql_query($query) or die (mysql_error());
    if (mysql_num_rows($result) > 0)
    {
    while($row = mysql_fetch_array($result))
    {
    $nick = stripslashes($row['nick']);
    $testo = stripslashes($row['testo']);
    $data = $row['data'];

    // formattiamo la data in "gg-mm-aaaa"   
    $data = preg_replace('/^(.{4})-(.{2})-(.{2})$/','$3-$2-$1', $data);
    $sito_web = $row['sito_web'];
    echo "$nick - $testo - $data <br>\r";
    

    }
    }
    @mysql_close();
    ?>

    [/PHP]
    Come posso risolvere???


  • Super User

    Non puoi risolvere... Se aggiorni e rinvii i dati, il server non può distinguere il refresh da un nuovo invio...

    Al limite puoi fare un controllo con una query, e vedere se qualcuno ha inviato un messaggio identico nell'arco di tempo di... 10 minuti?

    Questa soluzione dovrebbe andare 🙂


  • User Attivo

    Il problema sta nel file ajax.js

    // funzione per la chiamata dell'oggetto XMLHttpRequest
    function ajax(){
      var ajaxRequest;
      try{
        // controllo per i browser diversi da IE
        ajaxRequest = new XMLHttpRequest();
      }catch (e){
        // contorollo per IE
        try{
          ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        }catch (e){
          try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
          }catch (e){
            // controllo per i browser che non supportano l'XMLHttpRequest
            alert("Il browser non supporta questo ShoutBox");
            return false;
          }
        }
      }
      return ajaxRequest;
    }
    
    // funzione per il salvataggio dei dati
    function salva(){
      htmlRequest = ajax();
      if (htmlRequest==null){ 
        alert ("Il browser non supporta richieste HTTP");
        return;
      } 
      // controlliamo i parametri obbligatori
      if(document.form_invio.nick.value == "" || document.form_invio.nick.value == "NULL" || document.form_invio.testo.value == "" || document.form_invio.testo.value == "NULL")
      {
        alert('Inserisci sia il Nick che il testo');
        return;
      }
      // inviamo i parametri al file per l'INSERT nel database
      htmlRequest.open('POST', 'invia.php');
      htmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      htmlRequest.send('nick='+document.form_invio.nick.value+'&testo='+document.form_invio.testo.value+'&sito_web='+document.form_invio.sito_web.value); 
    
      // svuotiamo il modulo per il messaggio
      document.form_invio.testo.value = '';
      document.form_invio.testo.focus();
    }
    
    
    // funzione per mostrare i dati
    function mostra() {
      htmlRequest = ajax();
      // controllo nel caso in cui non possa richiamato l'oggetto Xmlhttp
      if (htmlRequest==null){ 
        alert ("Il browser non supporta richieste HTTP");
        return;
      }
      htmlRequest.onreadystatechange = function(){
        // Restituisce lo stato della richiesta
        if(htmlRequest.readyState == 4){
          // Restituice il corpo della risposta come stringa
          document.getElementById("modulo").innerHTML = htmlRequest.responseText;
        }
      }
      // chiamata della pagina PHP che estrae i records 
      htmlRequest.open("GET", "mostra.php", true);
      htmlRequest.send(null);
    }
    // chiamata alla funzione
    mostra();
    // intevallo per l'aggiornamento della pagina
    setInterval("mostra()",1000);
    
    

    Se io refresho la pagina mi appare il doppione...se la refresho di nuovo invece non crea piu' doppioni...rimane a video solo il messaggio originale e il doppione anche se refresho 10 volte....poi comunque nel database al refresh non avviene nessun inserimento di doppioni quindi credo che il problema deriva dal file js giusto?


  • Super User

    Non avevi specificato che il doppione è solo a video...

    Posta nella sezione js


  • User Attivo

    Ok
    🙂


  • User Attivo

    @carlitos1982 said:

    [***]
    La cosa strana che ho notato ora e che se guardo il codice sorgente della pagina mi da i record senza doppioni mentre a video si....:?


  • Super User

    E' normale, quando guardi il codice sorgente della pagina il browser ti mostra il codice originale, quello che ha ricevuto quando ha inoltrato la richiesta al server..

    Se hai firefox, prova a selezionare una parte e fai "Visualizza Sorgente Selezione" e vedrai che il doppione lo potrai vedere.