• User Attivo

    Bacheca con chiamata asincrona

    Sto realizzando una sorta di bacheca usando php mysql e ajax
    Questa e amico.php
    [PHP]
    <?php @include 'config2.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();
    ?>
    <div id="modulo">
    </div>
    <form name="form_invio" method="POST" onsubmit="salva(); return false;">
    Nick: <br><input name="nick" type="text"><br>
    Sito Web: <br><input name="sito_web" type="text"><br>
    Commento <br><input name="testo" type="text"><br>
    <input type="submit" name="submit" value="Invia"><br>
    </form>
    </body>
    </html>

    [/PHP]

    questo e invia5.php sarebbe il file di invio dati
    [PHP]
    <?php
    @include 'config2.php';
    if (isset($_POST['nick']) && isset($_POST['testo']) && isset($_POST['sito_web']))
    {
    $nick=addslashes($_POST['nick']);
    $testo=addslashes($_POST['testo']);
    $sito_web=addslashes($_POST['sito_web']);
    $query = "INSERT into shoutbox (nick, testo, sito_web, data) VALUES ('$nick', '$testo', '$sito_web', now())";
    $result = @mysql_query($query) or die (mysql_error());
    @mysql_close();
    }
    ?>
    [/PHP]

    E questo sarebbe il file javascript

    [HTML]
    // 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', 'invia5.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", "amico.php", true);
    htmlRequest.send(null);
    }
    // chiamata alla funzione
    mostra();
    // intevallo per l'aggiornamento della pagina
    setInterval("mostra()",1000);

    [/HTML]
    Il problema che nn ho capito come mostare a video in modo asincrono i commenti lasciati sulle bacheche degli altri utenti :mmm:
    Esempio
    Mettiamo caso che io mi trovo sulla pagina amico.php?id=$3 devo fare in modo di mostrare solo i commenti relativi all id3

    Nel codice javascript qui
    [HTML] // chiamata della pagina PHP che estrae i records
    htmlRequest.open("GET", "amico.php", true);
    htmlRequest.send(null);
    [/HTML]
    mi richiama la pagina amico.php ...praticamente io qui dovrei fargli capire che deve mostrarmi solo i commenti relativi all id3
    C'è un modo per risolvere?Devo agire sul codice javascript?


  • ModSenior

    Ciao carlitos1982,

    fai una richiesta alla pagina amico.php?id=3 cosi da sapere l'id.


  • User Attivo

    Ciao the darkita
    La richiesta va fatta tramite questa codice?

    [html]// chiamata della pagina PHP che estrae i records
    htmlRequest.open("GET", "amico.php", true);
    htmlRequest.send(null);[/html]Mi chiedo...e possibile del codice php in questa stringa per ricavarmi l id della pagina da mostrare?
    [html]htmlRequest.open("GET", "amico.php", true); [/html]
    Io in questa stringa dovrei passarci l id della pagina amico in cui mi ritrovo inq uel momento...in modo da mostrarmi solo i messaggi relativi a quell utente..


  • User Attivo

    @carlitos1982 said:

    Ciao the darkita
    La richiesta va fatta tramite questa codice?

    [html]// chiamata della pagina PHP che estrae i records
    htmlRequest.open("GET", "amico.php", true);
    htmlRequest.send(null);[/html]Mi chiedo...e possibile del codice php in questa stringa per ricavarmi l id della pagina da mostrare?
    [html]htmlRequest.open("GET", "amico.php", true); [/html]Io in questa stringa dovrei passarci l id della pagina amico in cui mi ritrovo inq uel momento...in modo da mostrarmi solo i messaggi relativi a quell utente..

    Ho pensato una cosa... qui
    [html]htmlRequest.open("GET", "amico.php", true); [/html]
    invece di far puntare ad amico.php faccio puntare ad una pagina esterna
    che chiamerò mostra.php quindi cosi'

    [html]htmlRequest.open("GET", "mostra.php", true); [/html]

    Se creo una variabile di sessione contente l id del profilo che visito...inserendo poi quest ultima nella pagina mostra.php potrei permettere di far visualizzare la bacheca di messaggi relativa solo a quell id...e un ipotesi potrebbe andare?


  • User Attivo

    Forse ci sono...si tratta di giocare un pò con le sessioni :fumato: