• User Attivo •

    Allora devi usare AJAX


  • User Attivo •

    Cè una guida o qualche esempio per realizzare un form simile con ajax e php?


  • User Attivo •

    Sì, una immensa: si chiama GOOGLE 😉


  • 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.