Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Refresh PHP

  1. #1

    Refresh PHP

    Salve, ho un problema sulla rilevazione degli utenti on-line su un sito in PHP e MySQL.
    Mi spiego meglio.
    Nella pagina principale di ogni utente c'è un area contatti con l'elenco di tutti i conoscenti. (tipo gmail)
    Un'icona dice se un'utente è connesso o meno.
    Alla login di ogni utente viene aggiornato il campo VISIBILE (1) di quell'utente e ad ogni logout viene ripristinato il valore di default (0).
    Il problema sorge perchè se un mio amico si connette me ne accorgo solo quando faccio il refresh della pagina che interroga nuovamente il campo VISIBILE del mio amico, renderizzando l'icona corrispondente.
    C'è un modo per ri-effettuare l'interrogazione del database alla modifica del database?
    Il db è un MySQL e sapevo che su PostgreSQL c'era un sistema di notifica in caso di modifiche, sapete se c'è anche su MySQL e se si può usare per il mio caso?
    Oppure se non si può pensavo ad un refresh temporizzato solo sull'area dei contatti che però è un include e non un iframe.
    Grazie!

  2. #2
    Oppure se non si può pensavo ad un refresh temporizzato solo sull'area dei contatti che però è un include e non un iframe.
    potresti pensare a una soluzione ajax-php

    ajax fa la richiesta alla tua pagina php che si occupa di prelevare i dati dal db e aggiorna la tua lista dei contatti ogni tot tempo

  3. #3
    mmm, la parte di contatti è una pagina php però è inserita sottoforma di include nella pagina.

    Index.php:
    Codice PHP:
    <html>
    <body>
    Benvenuti ecc...
    [b]Contatti[/b]
    <?
    include("contatti.php");
    ?>
    </body>
    </html>
    contatti.php:
    Codice PHP:
    <table name="contatti" id="contatti">
    <?
    //query al db
    while($row){
    echo
    "
    <tr><td class='"
    .$row[online]."'>".$row[nome]."</td></tr>
    "
    ;
    }
    </
    table>
    Quindi se ho capito bene il server prima esegue il codice php di contatti.php e poi copia e incolla il codice generato all'interno dell'index.
    Poi (lato client) il javascript vede e può agire sul codice:
    Codice PHP:
    <html>
    <
    body>
    Benvenuti ecc...
    [
    b]Contatti[/b]
    <
    table name="contatti" id="contatti">
    <
    tr><td class='online'>Ciccio</td></tr>
    <
    tr><td class='offline'>Pasticcio</td></tr>
    </
    table>
    </
    body>
    </
    html
    Ora io non voglio fare il refresh della tabella già generata altrimenti la otterrei uguale, bensì voglio rigenerare il codice php solo dell'include contatti.php (in modo che riesegua l'interrogazione al db) e non di tutto l'index.php.
    Spero di essermi spiegato bene.

    Dici che con ajax si può fare? Riesci ad accennarmi un esempio di soluzione con due righe di codice o mi consigli qualche link?

  4. #4
    stavo pensando a quello che vuoi fare e se pensi bene il fatto di aggiornare i contatti al refresh è la soluzione da preferire anche se non hai un aggiornamento in tempo reale(o quasi), pensa quante chiamate al server vengono fatte in caso più utenti visitino la stessa pagina solo per aggiornare la lista contatti, cmq attendiamo opinioni più autorevoli...

    l' idea di usare ajax che ti avevo proposto non esula da questo inconveniente

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    37
    Con ajax si può!

    Non so, mi sembrava uno slogan ad effetto.
    Stampi tutto nell'index, e poi dove vuoi ti puoi creare un div (potresti impiccarti con i nodi html del dom se ti va) che riempi con un innerHTML generato dalla funzione ajax.
    Vuoi due righe di codice?
    mhhh
    Codice PHP:
    //varia roba dell'head
    <script type="text/javascript">
    <!--
    function 
    getData() {
    if (
    window.XMLHttpRequest) {
    request = new XMLHttpRequest();
    } else { 
       
    request = new ActiveXObject("Msxml2.XMLHTTP");
    }
    var 
    message"";

    var 
    url"contatti.php";
    if (
    request) {
    request.open("POST"url);
    request.setRequestHeader("Content-Type""application/x-www-form-urlencoded; charset=UTF-8"); //o cmq il charset che usi
    request.onreadystatechange =
    function() {
    if (
    request.readyState == 4) {

    document.getElementById("tabella").innerHTML request.responseText;

    }
    }
    request.send(message);
    }
    else
    {
    alert("Il tuo browser obsoleto non supporta ajax.");
    }
    var 
    tempo =  setTimeout("getData();",30000); //sono millisecondi, ed indicano la frequenza del refresh
    }
    //-->
    </script>
    <body onLoad="getData();">
    //presentazione etc etc

    <div id="tabella">
    Caricamento in corso...
    </div>
    </body>
    </html> 
    Questo è un codice abbastanza semplice, che fa solo quello che deve.
    Non sono sicuro che funzioni perchè avendolo scritto sul momento potrebbe presentare errori anche stupidi magari dovuti alla distrazione.
    Debuggalo tu, e se vuoi piazzaci più controlli nella funzione js.
    Lato server, ovviamente il file contatti.php dovrà limitarsi a restituire (con echo o con print) la tabella, con le sue righe e le sue celle.
    Insomma quel codice che includi tu, però fatto tutto con echo o print.
    Credo di esser stato chiaro, nel caso sempre disponibile per chiarimenti

  6. #6
    Grande! Ora provo e vi faccio sapere.
    Grazie mille!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.