Visualizzazione risultati 1 fino 19 di 19

Discussione: record database aggiornati col tempo

  1. #1
    Guest

    Predefinito record database aggiornati col tempo

    Salve a tutti, mi chiedevo se qualcuno aveva un'idea su come fare un meccanismo simile a quello di un browsergame, ovvero che io ho una "risorsa" e ogni tot mi sale di un valore che decido io.
    Ad esempio ho 10 punti di energia, e voglio che mi salga di 1 ogni 5 minuti.
    Stavo pensando di mettere in ogni pagina un update dei record in base al timestamp, ma poi non verrebbe un lavoro troppo pesante per il server?
    Qualcuno può aiutarmi?

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Potresti più semplicemente annotarti quando è avvenuto l'ultimo aggiornamento delle risorse e poi aggiornarle tutte insieme non appena ti è necessario.

  3. #3
    Guest

    Predefinito

    Potresti farmi un esempio più pratico?

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,179

    Predefinito

    Cercando sul forum, puoi trovare tante discussioni inerenti, ad esempio questa: http://forum.it.altervista.org/php-m...ornamento.html

    Ciao!

  5. #5
    Guest

    Predefinito

    "Ad esempio ho 10 punti di energia, e voglio che mi salga di 1 ogni 5 minuti."

    Se non ho capito male, un semplice ciclo con javascript o php se lo vuoi fare server side che incrementa di 1 una variabile numerica ogni 5 minuti...setinterval con javascript o strtotime con php

    Ps:ti ho trovato un esempio nel web....ciao

    http://stackoverflow.com/questions/6...-by-15-minutes
    Ultima modifica di fractalcosmo : 19-06-2015 alle ore 20.50.14

  6. #6
    Guest

    Predefinito

    Grazie alemoppo, leggendo quel topic ho capito il funzionamento, e grazie anche a fractalcosmo per avermi già dato il comando del tanto odiato javascript... mi serviva proprio anche quello per far aggiornare automaticamente il valore senza riaggiornare la pagina.

  7. #7
    Guest

    Predefinito

    Se posso vorrei farvi un'altra domanda...
    Quali sono i vantaggi/svantaggi e qual è la differenza tra fare tutto in una pagina usando ad esempio

    if($_GET['action'] == 'profilo'){
    mi mostra il profilo
    }else if($_GET['action'] == 'impostazioni'{
    mi mostra le impostazioni
    }else{
    mi mostra la home
    }

    o semplicemente creare la pagina impostazioni.php, la pagina profilo.php la pagina home.php ecc...

  8. #8
    Guest

    Predefinito

    Tu invii in get una variabile dall'HTML action e fai uno switch tra profilo e impostazione, di sbagliato non c'è niente, secondo me, nel senso ognuno fa come vuole però sempre secondo me, scontrandomi quotidianamente con porzioni di codice e architetture sto diventando un pò maniaco della mantenibilità e dell'ordine di scrittura del codice(ed è anche la difficoltà in PHP), php è un linguaggio che ti permette di fare quello che vuoi, è molto dinamico e versatile a differenza di altri linguaggi, questo ha dei vantaggi e degli svantaggi, gli svantaggi sono L'ORDINE, scrivere codice ORDINATO E ARCHITETTURATO, se tu un domani devi aggiornare la pagina profilo, le impostazioni o mettere nuovo codice dentro la home avrai comunque un pò di disordine facendo tutto nella stessa pagina, hai uno sbrodolio di codice nella stessa pagina, per una variabile che fondamentalmente non è uno switch di valori ma è una vera e propria pagina con funzionalità diverse, secondo me non è ordinato, è più sensato se proprio vuoi fare così, switchare l'action e reindirizzare alle pagine.

  9. #9
    Guest

    Predefinito

    Ok, grazie delle informazioni :)
    E un'altra cosa
    In pratica voglio fare che quando uno preme un pulsante, viene modificato il database,e allora stesso tempo venga fuori un messaggio che vado a mettere in una variabile.
    Il problema è che se non metto un refresh della pagina, non mi si modificano subito i dati che prelevo dal db, ma mi rimangono quelli vecchi, se metto il refresh invece mi si annulla la variabile...
    Come posso fare?

  10. #10
    Guest

    Predefinito

    Uhmmm, sicuramente Ajax fa al tuo caso, ma andiamo per ordine, faccio un esempio, io visualizzo sulla pagina html una tabella dal DB, giusto?questa tabella ha i dati recuperati nel momento in cui entro nella pagina ed il PHP fa la sua select from db e fa la fetch dei record, in quel momento a caricamento di pagina, il php ha finito di interrogare il db e quindi mostra quello che ha ricavato con la select, nel momento in cui tu vai a modificare un record lato server dal php, il php farà l'update ma per vedere l'aggiornamento ovviamente deve fare ancora una select nello script quindi devi fare il reload della pagina, perchè deve rilanciare lo script.

    Con il submit ogni volta che tu clicchi lui fa il reload della pagina, per evitare di fare il reload nel momento in cui tu hai aggiornato il DB ti serve Ajax, questa è la differenza tra chiamate asincrone e sincrone, tu con Ajax cosa farai?farai il tuo update del DB, recuperi la tua variabile e la gestisci...Ajax aggiorna il db ma non ricarica la pagina, è asincrono, in questo senso, quindi una volta che tu sei nel "success" hai la tua variabile e la gestisci come vuoi...poi per far vedere il DB aggionrato.

    http://www.mrwebmaster.it/jquery/lav...jax_10463.html

    Ps:Spero che sia chiaro il procedimento ma è semplice, leggiti l'articolo è capisci al volo, immagina un metodo di programmazione dove io ho non so ho 10 variabili le invio al server a PHP e lo script effettua controlli e aggiorna in automatico i valori senza ricaricare la pagina, poi cosa fa il php da una risposta al client cioè Ajax e tu gestisci le risposte, ti puoi muovere come vuoi, la comodità è che non c'è una form di submit e quindi nel momento in cui invii i dati il parse non ricarica la pagina, ma fa tutto in background, se tu fai 10 upload con Ajax la pagina non si ricarica mai ma sul DB ci saranno 10 upload eseguiti.

    Dovrai prenderci un pò di dimestichezza nello scrivere la chiamata ma una volta che capisci l'architettura ti sentirai SUPERMAN... :) perchè è veramente comodo, soprattutto nelle applicazioni moderne e di gestione e controlli dei dati, io posso aggiornare il db senza ricaricare la pagina, poi cosa faccio?Ho bisogno di interrogare il DB, fare dei controlli ma con i dati aggiornati, Ajax ti permette di fare proprio questo, carica il DB senza ricaricare la pagina, con un'altra chiamata interroghi il DB con il PHP, tutto in background ed alla fine ti fai printare dal PHP la risposta controllo OK o controllo KO.
    Sappi che quello che printi nel PHP è la risposta che dai all'Ajax il famoso success(RESPONSE)...nel php fai tutto quello che devi fare e poi PHP "PARLA" con il client e gli dice OK o KO...ma con i dati aggiornati.
    È la logica di programmazione anche dei famosi framework di MVC, l'MVC, model view controller non è un altro che una logica simile l'UTENTE invia al controller un'azione, il controller controlla l'azione inserita invia al model l'azione(se è corretta) il model si interfaccia con il DB e restituisce una risposta al controller che a sua volta dirotterà una VIEW in base alla risposta del model, ecco il PHP è il tuo MODEL, AJAX il tuo CONTROLLER....Guardala sotto quest'ottica...
    Ciao
    Ultima modifica di fractalcosmo : 22-06-2015 alle ore 20.12.53

  11. #11
    Guest

    Predefinito

    Grazie mille della risposta dettagliata, proverò a darci un'occhiata e ti farò sapere!

  12. #12
    Guest

    Predefinito

    Ehm... non riesco a capirci granché :P
    Come faccio a fargli fare una domanda al db? devo creare per forza un nuovo file .php?
    In pratica ciò che volevo fare io era:

    Una select e un pulsante.
    Quando premo il pulsante php mi crea 6 numeri random.
    Prende i valori attuali dal db, li somma a quelli random e aggiorna il db.
    Oltre a questo crea una variabile $successo= "ce l'hai fatta!";
    Nell'html ho scritto questo:
    Codice:
    <input type="submit" name="premi">
    <?php 
    if(!empty($successo){ echo "<br>".$successo; }
    ?>
    A fianco dello schermo c'è un div che mostra tutti i valori attuali.


    Il fatto è che se lo lascio così, quando premo il pulsante mi esce $successo, mi si aggiorna il db ma sul div a fianco rimangono i valori vecchi.
    Se ci metto un header("location:questapagina.php"); mi si aggiornano i valori nel div a fianco ma non esce $successo.
    Ho provato a guardare un po' come funziona ajax, ma non saprei proprio come fare ciò di cui ho bisogno io.

  13. #13
    Guest

    Predefinito

    Son riuscito a far qualcosa su ajax usando questa funzione:
    Codice:
      function values()
        {
            var xmlhttp;
            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    document.getElementById("div").innerHTML=xmlhttp.responseText;
                }
            }
            var x = "username";
            xmlhttp.open("POST", "values.php",true);
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlhttp.send("username="+x);
        }
    Quello che volevo chiedervi ora è:
    Come faccio a fare più richieste simultaneamente?
    Se ricopio la stessa funziona facendola però andare su un'altra pagina .php non funziona nulla...

    EDIT:
    Mi spiego meglio...
    Voglio fare 2 richieste insieme nella stessa pagina, per stampare delle informazioni in un div, e altre informazioni in un altro div.
    Ad esempio voglio che con l'onload del body appaiano nel div "utente" le informazioni dell'utente, e nel div "sito" le informazioni del sito.
    Appunto ho provato a copiare la stessa funzione cambiandone il nome, ho provato a cambiare anche il nome della variabile, modificato la pagina nel xmlhttp.open...Il problema è che va solo una delle due(la seconda per precisare).
    Forse non si possono fare due funzioni con l'onload?
    Nel mio caso vado ad includere file php in un altro, quindi mi viene un body in un altro body.
    Ultima modifica di competenzepertutti : 08-07-2015 alle ore 21.19.19

  14. #14
    Guest

    Predefinito

    Si stai usando il vecchio modo di javascript con il success oK l'http request a 200 etc..etc.., che per me a dire il vero è molto più rognoso e meno comodo, io non lo uso, mi rifuto proprio di usarlo...Non si usa più orami non lo usa più nessuno :)
    Perchè non hai dato un'occhiata al sito che ti avevo messo?
    È molto più semplice ed è progettato con la nascita del WEB 2.0

    http://www.mrwebmaster.it/jquery/int...ery_10443.html

    Quindi ricapitoliamo, ti scarichi le librerie di jquery, che sono tre file Jquery.js jquery min se vuoi un tema particolare e jquery UI per la human interface..Sono tre file che metterai in una cartella e richiamerai dall'html con <script src="miopercorsoJquery.js" ></script> etc..etc... ovviamente non devi includerlo 50 mila volte ma basta metterlo nell'header, se l'header ovviamente viene caricato ad ogni pagina.
    Dopodichè con Jquery ti risulterà molto più semplice fare tutte le chiamate che vuoi..

    basterà scrivere

    Codice:
    //$ document ready vuol dire al caricamento della pagina al DOM ready esegui quello che è scritto dentro le parentesi graffe
    $(document).ready(function(){
    
    //Imposto due variabili a caso nomeID e cognomeID che recupero il valore dalle input con id "idNome" "idCognome"
    
    var nomeID = $('#idNome').val();
    var cognomeID = $('#idCognome').val(); //NB idCognome è l'ID DELLA INPUT TEXT HTML
    
    //qui metterai le tue chiamate Ajax....1-2-3-4-5-6 quante ne vuoi...
    
    $.ajax({
    
      // definisco il tipo della chiamata POST o GET che nella pagina PHP recupererò in $_POST o $_GET
    
      type: "POST",
    
      // specifico la URL della risorsa da contattare, la pagina a cui faccio la chiamata
    
      url: "pagina.php",
      
       // passo dei dati alla risorsa remota nel php dove nomeID è la variabile che recupero nel JS mentre nome o cognome 
       // sono il nome delle $_POST['nome'] e $_POST['cognome'] che recupero nella pagina.php
       data: {nome : nomeID, cognome:cognomeID},
      
    
      // definisco il formato della risposta per esempio se devi gestire un JSON di risposta dal PHP metterai datatype json
      dataType: "html",
    
    
      // imposto un'azione per il caso di successo, risposta non è altro che il print che hai nel php a fine esecuzione di codice
      success: function(risposta){
        $("div#risposta").html(risposta);
      },
      // ed una per il caso di fallimento
      error: function(){
        alert("Chiamata fallita!!!");
      }
    }
    
    
    
    })
    Adesso le tue informazioni sono nel PHP e le devi recuperare per poi inserirle dentro il DIV basta che come risposta dal PHP metti quello che vuoi nel DIV e poi nel success compili il div... ;)
    Ovviamente se non devi passare valori da html / javascript al PHP basta solamente che non compili la parte "data :" perchè fai una chiamata e ti fai dare dei parametri dal PHP che poi vai a mettere nell'HTML...l'esempio però che ti ho messo è completo se per esempio devi passare anche dei dati dalle input di inserimento dati HTML al PHP poi farai i tuoi calcoli nel PHP e darai una risposta al CLIENT AJAX...

    Ciao

    PS:Se incontri difficoltà vedrò di metterti un esempio completo..
    Ultima modifica di fractalcosmo : 12-07-2015 alle ore 01.47.42

  15. #15
    Guest

    Predefinito

    Perfetto, ho capito, ora mi basta creare più $.ajax...Non so perché con l'altro metodo non funzionasse.
    Grazie :)

  16. #16
    Guest

    Predefinito

    Esatto, però il codice deve essere ordinato, cosa vuol dire?che dovrai inserire un discriminante in Ajax che poi recupererai in PHP, perchè se tu chiami la stessa pagina due volte con AJAX non ha molto senso e sinceramente non so ma a logica ti darà sempre il primo print(cioè risposta da PHP ad AJAX) ma dovrai inserire un discriminante cioè una variabile AZIONE nell'invio DATA di Ajax, nell'esempio sotto di metto due azioni primaAzione e secondaAzione, poi il codice nella pagina php:

    Codice:
    
        $.ajax({
          type: "POST",
          url: "index.php",	
          dataType: "html",
          data : {
              primaAzione : 'primoRecupero',}, 
               
          success:function(risposta){
              $("div#rispostaPrimaAzione").html(risposta);
          },
          error:function (){
            alert ('Errore di comunicazione con il server');
          }                        
        });   
    
        $.ajax({
          type: "POST",
          url: "index.php",	
          dataType: "html",
          data : {
              secondaAzione : 'secondoRecupero',}, 
               
          success:function(risposta){
              $("div#rispostaSecondaAzione").html(risposta);
          },
          error:function (){
            alert ('Errore di comunicazione con il server');
          }                        
        });

    La pagina che viene invocata è la index.php quindi nell'index.php avrai:

    Codice PHP:

    //Qui stai dicendo se la chiamata arriva dalla primaAzione dammi una risposta che poi inserisco nel primoDiv
    if (isset($_POST['primaAzione'])){

    //eseguo qui il codice di recupero per il primo div

    print "QUESTA STRINGA E' LA RISPOSTA AD AJAX prima chiamata e sarà inserita nel primo div";

    }

    //Qui stai dicendo se la chiamata arriva dalla secondaAzione dammi una risposta che poi inserisco nel secondoDiv
    if (isset($_POST['secondaAzione'])){

    //eseguo qui il codice

    print "Questa stringa è la risposta alla seconda chiamata e sarà inserita nel secondo div";//NB ovviamente la risposta //possono essere variabili PHP

    }
    Ciao....
    Ultima modifica di fractalcosmo : 13-07-2015 alle ore 00.29.59

  17. #17
    Guest

    Predefinito

    Ahh ecco cercavo anche come fare a farlo con 1 pagina, io avevo creato 2 pagine php...
    Ma se avessi bisogno di riempire 2 div nella stessa pagina e quindi sarebbero settate sia primaszione che secondaazione, funziomerebbe lo stesso,giusto?
    In pratica la parte "data" serve proprio a dividere i print di php?

  18. #18
    Guest

    Predefinito

    La parte DATA di Ajax è l'invio dei parametri a PHP, quali parametri invii?le metti in DATA...Quando ajax, ma anche come avevi fatto tu con il javascript a basso livello invia a PHP i parametri il php li gestisce in base al codice che tu hai messo nella pagina alla fine della gestione risponderà qualcosa ad Ajax, e risponde un print o un echo, quindi tu fai il tuo codice in PHP e poi metterai nel print quello che vuoi inviare ad Ajax.Se tu vuoi inviare 10 variabili ad ajax il tuo print sarà

    Codice PHP:

    print $var1.'|'.$var2.'|'.$var3 //etc...
    Questo print è la variabile risposta che vedi nella success di Ajax function(risposta)...se tu fai un alert (risposta) vedi quello che è stato inviato dal PHP....ovviamente se hai tante variabili userai la barra '|' per dividerle e poi in Ajax sotto la funzion risposta metterai un var gestisciRisposta = risposta.split('|') e così gestisciRisposta[0] sarà $var1 che metterai nel tuo div , gestisciRisposta[1] sarà $var2 etc...etc...

    Quindi Ajax invia a PHP ma il parse che interpreta il PHP parte dalla prima riga a decodificare il codice(ammeno che tu non gli dica cosa fare, ma comunque entra dalla prima riga),legge dalla prima riga di codice, ovviamente, il parse fa così quando interpreta il codice, se tu non dai un discriminante il parse entra nel PHP appena incontra un print risponde ad Ajax, quindi ti troveresti la stessa risposta per due div che invece necessitano di risposte diverse...è per questo che ti serve inserire dei discriminanti e dire al PHP guarda che devi entrare in questa porzione di codice solo se è settata primaAzione oppure secondaAzione, cioè gli stai dicendo se la chiamata da Ajax che stai leggendo è la primaAzione mi dai questa risposta e poi metti exit, se invece stai interpretando la chiamata di Ajax nella secondaRisposta entri nel secondo isset...Quindi ti crei una variabile primaAzione e secondaAzione che passerai al PHP e nel PHP all'interno degli isset svilupperai il tuo codice per valorizzare il div in risposta ad Ajax, altrimenti il parse non sa cosa deve fare, sei tu che devi programmare mica può fare tutto da solo :)
    Ancora non hanno un cervello i computer....Ciao ;)
    Ultima modifica di fractalcosmo : 13-07-2015 alle ore 01.46.07

  19. #19
    Guest

    Predefinito

    Ok, capito..
    Grazie mille :)

Regole di scrittura

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