Aggiornamento stato variabile db senza aggiornare la pagina

di il
4 risposte

Aggiornamento stato variabile db senza aggiornare la pagina

Buongiorno a tutti,
Ho un pulsante su pagina php che si deve attivare solo quando una variabile all'interno del database cambia dal valore 0 al valore 1.
Questa variabile viene cambiata a random dal sistema.
Vi è un modo (tramite script) per controllare quella variabile in php in ogni momento, senza che l'utente debba aggiornare la pagina web per effettuare il controllo?

In questi casi si usa ajax o javascript? (deve essere compatibile anche con smartphone)

Vi ringrazio

4 Risposte

  • Re: Aggiornamento stato variabile db senza aggiornare la pagina

    JQUERY:
    
    setInterval(function () {
    	tuo codice
    }, 2000);
    
    Se imposti un timer troppo basso rischi che il bottono si attivi e disattivi continuamente.

    Vedi tu come gestire.... Sai solo tu perchè hai bisogno di questa cosa.

    2000 sono millisecondi quindi ogni 2 secondi ripete il codice.

    Ciao
  • Re: Aggiornamento stato variabile db senza aggiornare la pagina

    Ti ringrazio per la rispista celere.
    Purtroppo il sito smette di funzionare con SetInterval (credo vada in loop).

    Replico a mano cio' che vorrei far fare automaticamente :
    In un monitor di un pc ho una pagina web con un pulsante disabilitato.
    Con un altro pc vado all'interno del database e cambio un valore
    Guardo nuovamente il monitor del primo pc e il pulsante risulta abilitato. (senza, quindi, aver ricaricato la pagina)

    Come potrei fare?
  • Re: Aggiornamento stato variabile db senza aggiornare la pagina

    Aspetta php è linguaggio lato server mentre Javascript lato cliente.
    Da cliente (browser) "example.com/index.php?pulsante=1"
    Probabile switch cliente: (richiesta GET tramite browser, o Javascript, o php che effettua una richiesta GET ergo cliente) [CODE]<?php $super_var = 0; if(isset($_GET['pulsante']) && $_GET['pulsante'] == '1') //Condizione vera $super_var = 1; //altrimenti default 0 Mentre il codice Javascript è eseguito dal tuo cliente e ovviamente non sarà aggiornato ma avrà un valore locale, se poi effettui una richiesta GET/POST (con o senza ajax) aggiorni il valore nel codice php (lato server) e quindi crei il valore Javascript in base alla variabile $super_var. Lo switch cambia da 1 a 0 o 0 a 1 (sia per php o Javascript).
    Potresti riscontrare problemi di collisioni se ci sono più connessioni eseguite allo stesso tempo o con differenza di millesimi di secondi (a seconda di quanto impiega php per analizzare e eseguire il codice, ma prima della fine di esecuzione) e giustamente con stato opposto (cioè se il primo stato è 0 e il secondo è 1, php li mostra all'ultimo codice eseguito, ove è chiamato più di una volta ma purtroppo arriva allo stato del cambiamento senza completare l'esecuzione di ogni singola chiamata). In questo caso il database MySQL gestisce le connessioni simultanee e quindi crei/aggiorni il tuo 1 o 0 proprio come fai adesso mentre da cliente javascript recuperi il valore php che ti da MySQL, quindi da random dovrai passare a quasi random (che non deve cambiare per tutto il tempo di esecuzione massimo allo stato di cambiamento). "Il tempo massimo di esecuzione allo stato di cambiamento" significa calcola dal tuo codice "if, else se dentro ciclo etc" quanto tempo impiega. Altrimenti rimarrai sorpreso dalla collisione.

    Recupero variabile php con script di html5, il codice php deve terminare esattamente con il recupero del valore del database, nemmeno altri echo o print etc a eccezione del semplice markup testuale che completa il sorgente html "dunque veloce". [CODE]<?php $sql = 'SELECT stato FROM tabella'; $result = $mysqli->query($sql); $row = $result->fetch_array(MYSQLI_ASSOC); //se non uso echo non stampo a video $row['stato'] [CODE]<script> var MyJSStringVar = "<?php echo $super_var; ?>"; </script> Funzione Javascript ogni 2 secondi, effettua una richiesta GET con 0 o 1 e verifica il valore dal database e poi invia la risposta. [CODE]var NuovaMyJSStringVar = setInterval(myCallback, 2000); function myCallback() { // Your code here //Request POST here return 1+1; // qui va la risposta invece del 2 } console.log(NuovaMyJSStringVar) Jquery AJAX: https://api.jquery.com/jquery.ajax
  • Re: Aggiornamento stato variabile db senza aggiornare la pagina

    Grazie mille per la spiegazione esaustiva.
    Spero possa essere utile ad altri come lo è stato per me.
Devi accedere o registrarti per scrivere nel forum
4 risposte