Visualizzazione risultati 1 fino 8 di 8

Discussione: Aggiornamento dati php

  1. #1
    Guest

    Question Aggiornamento dati php

    Salve,
    Ho una tabella nel db del tipo..

    username | num | value |
    ------------------------------
    player1 | 10 | 20 |
    player2 | 5 | 10 |


    Ho creato un pagina lista.php che mi legge e mostra la tabella.
    Vorrei far in modo che la pagina si aggiorni automaticamente ogni x secondi.
    È possibile però aggiornare solo i dati senza refreshare la pagina?
    La query di lettura la tengo in un altro file query.php che ho incluso nella pagina lista.php.
    Praticamente un qualcosa che ogni x secondi richiama la pag query.php, esegue la query di lettura e aggiorna i dati.
    Ho provato qualche funzione js presente sul web ma non ci sono riuscito.
    Ultima modifica di born2kill : 10-03-2016 alle ore 03.10.41

  2. #2
    Guest

    Predefinito

    Puoi usare Ajax. Sia con puro JS, che utillizzando dei framework come jQuery che semplificano la stesura del codice.

  3. #3
    Guest

    Predefinito

    Ciao, come dice VPlaza Ajax, asynchronous javascript and xml, ti permette di fare chiamate al server side e salvataggi senza dover ricaricare la pagina, però dobbiamo precisare alcuni punti:
    Io utente, inserisco i dati in un form, perfetto, clicco il bottone SALVA SU DB, e senza ricaricare la pagina chiamo il DB e salvo i dati sul DB perfetto, se vado sul DB, il DB è già aggiornato senza che la pagina web abbia dovuto ricaricarsi(fondamentalmente è questa la dinamica del 2.0) ma dobbiamo però sempre fare una precisazione quando devo LEGGERE i dati e mostrarli sul web, abbiamo comunque necessità di fare la query di select aggiornata a quel preciso istante, quindi se io ho una tabella sul web che mi mostra i dati del DB, nel salvataggio, senza ricaricare la pagina, il DB si aggiorna ma in lettura e quindi nella tabella sul web avrò necessità di ricaricare la pagina O MEGLIO di rieffettuare la query di select per mostrare la tabella aggiornata(ovviamente).
    Adesso il punto è il seguente, quando fai la chiamata al server con Ajax, il server risponde in maniera aggiornata e senza ricaricare la pagina ma lo devi comunque inserire in tabella nell'html.
    La soluzione al tuo caso cioè riaggiornare la tabella senza ricaricare la pagina è molto semplice ed è la seguente:

    La funzione sotto Ajax fa una chiamata al server il server risponde con la tabella aggiornata, cioè nel PHP creo le righe le td le th tutta la tabella, il success della chiamata non fa altro che appendere il risultato in un DIV, io ti metto tutto il codice di select e la chiamta come faccio, la soluzione comunque è inserire il risultato della chiamata(CIOE' TUTTA LA TABELLA )in un DIV, io faccio questo ad un click di un bottone e mostro la tabella sotto il bottone, tu metterai un setTimeout ogni 10 minuti fai la chiamata.

    Codice:
    function visualizzaPermessi(){
        
        var utente = $('#InserisciUtente').val();
        
        $.ajax({
          type: "POST",
          url: "../index.php?azione=permessi",
          dataType: "html",
          data:{utente : utente},
          success:function(data){
               
                response = data.replace(/(\r\n|\n|\r)/gm,"");
                //alert(response);
                    if (response.length>0){
                    var risultati = response.split('|');
                    if (risultati[0] == '00'){
                       $('#visualizzaPermessi').html(risultati[1]);
                    }
                    if (risultati[0] == '99'){    
                       $('#contenutoPermessi').html(risultati[1]);	       
                       $('#modalPermessi').modal('show');   
                       //$('#dialogPermessi').dialog('open').html(risultati[1]);
                    }
              }
          },
          error:function(data){
            alert('Errore di comunicazione con il Server');
          }
        });
            
    }

    La funzione sotto viene chiamata al click del bottone cioè dalla funzione visualizzaPermessi, il codice PHP crea una tabella con i dati e la inserisce in una RISPOSTA[1], cioè printa tutta la tabella Ajax riceve la risposta se il codice è 00 cioè tutto ok e prende tutta la risposta(che è la tabella) e l'appende al div visualizzaPermessi..

    Codice PHP:

    public function permessi(){
    utilsController::securityAjaxCall();
    //require_once "view/template.php";
    ob_start();

    $utenteGet = $_POST['utente'];
    $classe = "";

    //Apriamo il Db phpMyAdmin
    $db = new connessione();
    $db = $db->apriConnessione();

    //Controllo che ci sia l'Utente in tabella
    $sqlUtente = 'SELECT * FROM TABLE WHERE utente = \''.
    mysqli_real_escape_string($db, $utenteGet).'\'';
    $risultatoUtente = mysqli_query($db, $sqlUtente);
    $righe = $risultatoUtente->num_rows;

    if (
    $righe == '0'){
    $msg = '99';
    $msg .= '|';
    $msg .= "L'utente non esiste!";
    print
    $msg;
    exit;
    }

    if (isset(
    $_POST['utente'])){

    $response = '00';
    $response .= "|";

    $html = new Tpl("view/html/TabellaPermessiTestata.html");
    $html -> setTplVar(array(
    ));
    $html -> processTpl();
    $response .= $html-> returnTpl2();

    $sql = $db->prepare("SELECT * FROM TABLE WHERE utente = ? ");
    $sql->bind_param('s', $utenteGet);
    $esecuzione = $sql->execute();

    $righe = $sql->bind_result($id,$Utente, $Mese, $OrePermesso);

    while (
    $sql->fetch()){

    //$classe = "info";

    if ($classe == "info"){
    $classe = "active";
    }
    else{
    $classe="info";
    }

    $html = new Tpl("view/html/TabellaPermessiRiga.html");
    $html -> setTplVar(array(
    "Utente" => $Utente,
    "Mese" => $Mese,
    "OrePermesso" => $OrePermesso,
    "classe" => $classe
    ));
    $html -> processTpl();
    $response .= $html -> returnTpl2();
    ob_flush();
    }
    $response = str_replace("\n", "", $response);
    $response = str_replace("\r", "", $response);
    print
    $response;
    print
    "</tbody></table></fieldset>";

    }
    }
    Se posti il codice vedo di darti una mano...Ciao

  4. #4
    Guest

    Predefinito

    Allora... Ho la seguente lista.php che mostra i records del database:

    Codice PHP:
    <title>titolopagina</title>
    <head>
    <?php include 'query.php';?>
    </head>
    <body id="listplayer" onLoad="calcSUM();">



    <table>
    <tr>
    <td>Player</td>
    <td>Numero</td>
    <td>Valore</td>
    </tr>
    <?php while($rows=mysql_fetch_array($result)){ ?>
    <tr>
    <td>
    <?php echo $rows['username']; ?>
    </td>
    <td>
    <?php echo $rows['num']; ?>
    </td>
    <td>
    <?php echo $rows['value']; ?>
    </td>
    </tr>
    <?php } ?>


    <script>
    function calcSUM() {
    var sumN = <?php echo $r['sumn']; ?>;
    var sumV = <?php echo $r['sumv']; ?>;
    document.getElementById('sn').value = addPoint(Math.round(sumN));
    document.getElementById('sv').value = addPoint(Math.round(sumV));
    }
    </script>

    <tr>
    <td>TOTALE</td>
    <td><input type='text' readonly='readonly' id='sn' /></td>
    <td><input type='text' readonly='readonly' id='sv' /></td>
    </tr>
    </table>


    Questa è la query.php per la lettura db e somma num e value:

    Codice PHP:
    <?php
    mysql_connect
    ("localhost", "born2kill", "password")or die("Connessione fallita...");
    mysql_select_db("my_born2kill")or die("Impossibile accedere al database...");
    $sql="SELECT user_id, username, num, value FROM db_users ORDER BY num DESC";
    $result=mysql_query($sql);
    mysql_close();

    mysql_connect("localhost", "born2kill", "password")or die("Connessione fallita...");
    mysql_select_db("my_born2kill")or die("Impossibile accedere al database...");
    $q = mysql_query('SELECT SUM(num) AS sumn, SUM(value) AS sumv FROM db_users');
    $r = mysql_fetch_assoc($q);
    mysql_close();
    ?>
    Ogni player, dalla sua postazione varia i suoi dati. La pagina lista.php è un resoconto per cui vorrei si aggiornasse ogni x secondi in modo da mostrare i valori aggiornati a chi è su un altra postazione.
    Questo aggiornamento vorrei che fosse automatico, ovvero senza la necessità di premere alcun pulsante... Si potrei usare il setInterval volendo... ma non devo fare il refresh della pagina.

    Grazie mille per il supporto :)

  5. #5
    Guest

    Predefinito

    Piccola domanda.... Pensate sia un problema inviare una query di lettura al db ogni x secondi? Come traffico per altervista dico...
    Diciamo che siamo una decina di utenze, difficile tutte e dieci contemporaneamente con la pagina aperta...

  6. #6
    Guest

    Predefinito

    Forse devi usare Jquery con un load url, ma forse va bene anche la classica $.Ajax, ho questo dubbio guardando il tuo codice ma dovrebbero andar bene tutte e due per sicurezza comunque ti posto tutte e due le soluzioni la prima con il load url la seconda in chiamata Ajax, ma la risposta va gestita, invece con load url carica tutta la pagina dentro il div, per te forse è meglio.Ovviamente devi include le librerie Jquery, sono tre file jquery.js, jquery_ui.js e uno con i css.

    NB: TI DEVI CREARE UN DIV NELLA PAGINA DOVE VUOI FAR VEDERE LA TABELLA COSì

    <div id="visualizzaTabella"> </div>

    LOAD URL OGNI 5 SECONDI:
    Codice:
    var tempo = 5000; 
    function chiamataAjax(){
    	
      	url= "lista.php";	
        $('#visualizzaTabella').load(url,function () {
             setTimeout(chiamataAjax, tempo);
        });  
            
    }	
    setTimeout(chiamataAjax, tempo);
    CHIAMATA CLASSICA $.ajax OGNI 5 SECONDI


    Codice:
    var tempo = 5000; 
    function chiamataAjax(){
    	
        var url='lista.php';
    
        $.ajax({
          type: "POST",
          url: url,
          dataType: "html",
          data:{},
          success:function(data){
    	           $('#visualizzaTabella').html(data);
    	           setTimeout(chiamataAjax, tempo);
              
          },
          error:function(data){
            alert('Errore di comunicazione con il Server');
          }
        });
            
    }	
    setTimeout(chiamataAjax, tempo);

  7. #7
    Guest

    Predefinito

    Vi ringrazio per l'aiuto Sono riuscito ad ottenere ciò che volevo... modificando mezzo mondo ma ci sono riuscito.
    Ripongo la mia domanda che magari, sbadatamente non è stata letta. Diciamo che non è nemmeno nella sezione appropriata ma visto che sono in discussione qui....

    Piccola domanda.... Pensate sia un problema inviare una query di lettura al db ogni x secondi? Come traffico per altervista dico...
    Diciamo che siamo una decina di utenze, difficile tutte e dieci contemporaneamente con la pagina aperta...
    Eventualmente questo traffico (invio-ricevi) lo vedo dalla pagina altervista/risorse/traffico 0.0/30Gb ???
    Attualmente ho settato a 5 secondi. Parliamo di 807 bytes di richiesta e 926 bytes di risposta.
    Non credo sia un problema, no?

    Grazie ancora.

  8. #8
    Guest

    Predefinito

    In attesa di una risposta da qualche amministratore, secondo me non dovresti avere problemi, ad intuito il traffico totale lo vedi da risorse traffico con anche l'invio e ricezione dei dati, male che va se diventi una SPA compri più spazio Ma no dai non credo ci siano problemi...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •