Visualizzazione risultati 1 fino 23 di 23

Discussione: Chiamata funzione PHP con onclick

  1. #1
    Guest

    Predefinito Chiamata funzione PHP con onclick

    Salve a tutti!
    Come da titolo volevo creare una funzione php che venisse richiamata dalla funzione onclick (nell'HTML).
    Inoltre mi piacerebbe che la variabile (creata dentro alla funzione) venga restituita.
    Il problema è che non so come fare.
    Grazie Mille!

  2. #2
    Guest

    Predefinito

    Inizia con lo studiare.
    PHP è un linguaggio lato SERVER. Una volta elaborato restituisce una pagina statica visualizzata dal browser.

    La gestione degli elementi della pagina (DOM) degli eventi e quant'altro riguardi la pagina visualizzata nel browser è demandata a linguaggi lato CLIENT quale è JavaScript (che non è JAVA).

  3. #3
    Guest

    Predefinito

    E fino qua ci ero arrivato anchio...il punto e che non riesco a combinare questi 2 linguaggi

  4. #4
    Guest

    Predefinito

    Intanto non puoi mischiare i due codici perchè come detto uno viene eseguito dal server e l'altro dal client e quindi in tempi e maniere differenti.
    L'unica cosa che puoi fare è passare dei dati dall'uno all'altro.

    Descrivi quello che vuoi fare e come stai tentando di farlo.

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Concordo con vplaza .

    E aggiungo: per fare quanto chiedi, in generale, un modo è effettuare una chiamata AJAX o AJAJ (tramite JavaScript) verso una pagina PHP che applichi la funzione di cui hai bisogno e ne restituisca il risultato.

    A volte è più semplice, ma non sempre possibile, scrivere una funzione equivalente in JavaScript.

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Il codice PHP verrà interpretato alla prima connessione della pagina e non cambierà più.. Devi passare i dati da ajax a una pagina php, la pagina PHP avrà la tua funzione...
    Ecco un esempio di come aggiungere un nuovo elemento tramite ajax o jquery http://forum.it.altervista.org/javas...ml#post1319633

  7. #7
    Guest

    Predefinito

    Vi descrivo cosa volevo fare...praticamente volevo che al click di un pulsante si incrementi una variabile e che questa variabile ad ogni click venga scritta (sovrascritta) su un file..

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Questo richiederà AJAX.

    Ti servirà una pagina PHP che mantenga lo stato della variabile condivisa, e possa essere interrogata per restituire il valore della variabile oppure incrementarlo. Risulta abbastanza naturale modellare la richiesta del valore tramite richiesta GET, e richiesta di incremento tramite POST.

    C'era una discussione simile: controllo pulsante, anche quella con stato condiviso e AJAX. Vedi se ti è utile.

  9. #9
    Guest

    Predefinito

    interessante mzanella...la cosa interessante da fare sarebbe quella di leggere dal file la variabile che viene incrementata cosi ogni volta che si ricarica la pagina il contatore non si azzera...
    Come posso modificare?
    Codice PHP:
    // Legge lo stato condiviso e lo restituisce come vettore associativo
    function read_status() {
    $filename = "pos.txt";
    if (!
    file_exists($filename) || !is_readable($filename)) {
    touch($filename);
    }

    $status = file_get_contents($filename);
    if (
    stripos($status, "on") === 0) {
    return array(
    'pulsante1' => "on",
    'pulsante2' => "off"
    );
    } else {
    return array(
    'pulsante1' => "off",
    'pulsante2' => "on"
    );
    }
    }

    // Scrive lo stato condiviso
    function write_status($status) {
    $filename = "pos.txt";

    file_put_contents($filename, $status['pulsante1']);
    }

    // Inverte lo stato, restituendone una copia
    function switch_status($status) {
    return array(
    'pulsante1' => $status['pulsante2'],
    'pulsante2' => $status['pulsante1']
    );
    }



    // Se è stato premuto un pulsante/richiesto un cambiamento dello stato condiviso...
    if (isset($_POST['pulsante'])) {
    $pulsante = $_POST['pulsante'];

    // Legge lo stato condiviso
    $status = read_status();

    // Se il pulsante premuto era abilitato, inverte lo stato
    if ($status[$pulsante] === "on") {
    $status = switch_status($status);
    write_status($status);
    }

    // Restituisce lo stato condiviso
    echo json_encode($status);
    }

    // Altrimenti, mostra semplicemente lo stato attuale senza intervenire attivamente
    else {
    echo
    json_encode(read_status());
    }

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Basta semplificare il codice che hai trovato nell'altra discussione, anziché "fare calcoli" sullo stato di n pulsanti basta leggere il valore. Qualcosa del genere:
    Codice PHP:
    // Legge il valore della variabile (stato condiviso) dal file
    function read_value() {
    $filename = "valore.txt";
    if (!
    file_exists($filename) || !is_readable($filename)) {
    touch($filename);
    }

    $value = file_get_contents($filename);
    // Se il file era vuoto, si assume valore 0
    if (empty($value)) {
    $value = 0;
    }

    return
    $value;
    }

    // Scrive lo stato condiviso
    function write_value($value) {
    $filename = "valore.txt";

    file_put_contents($filename, $value);
    }



    // Se è stato l'incremento della variabile...
    if (isset($_POST['incrementa'])) {
    // Legge il valore dallo stato condiviso
    $value = read_value();

    // Effettua l'incremento
    $value = $value + 1;

    // Salva il valore modificato
    write_value($value);

    // Restituisce il valore modificato
    echo json_encode($value);
    }

    // Altrimenti, mostra semplicemente il valore attuale senza intervenire attivamente
    else {
    echo
    json_encode(read_value());
    }
    Questa è pressapoco l'idea, naturalmente occorre impostare il $filename con il nome del file da leggere/scrivere, effettuare eventuali controlli, ecc. ecc.
    In quell'esempio, per attivare l'incremento occorre effettuare una richiesta POST in cui il campo incrementa sia definito.

  11. #11
    Guest

    Predefinito

    scusa l'ignoranza ma come faccio ad effettuare una richiesta POST al click del pulsante?

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nell'altra discussione (controllo pulsante) c'è il codice completo, incluso quello per effettuare una richiesta POST. In ogni caso:

    Codice HTML:
    ...
    <button id="my_button">Richiesta POST</button>
    ...
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script>
         $('#my_button').click(function () {
            $.post("indirizzo_pagina.php", {incrementa: "true"}, eventuale_funzione_di_callback);
        });
    </script>
    Dove al posto di indirizzo_pagina.php va usato il percorso della pagina PHP verso cui effettuare la richiesta, e eventuale_funzione_di_callback è una funzione (JavaScript) che verrà invocata quando la chiamata AJAX terminerà (puoi usarla, ad esempio, per mostrare il nuovo valore della variabile).

    L'esempio usa jQuery... che è caldamente consigliato! Se hai dubbi guarda la documentazione del metodo post.

  13. #13
    Guest

    Predefinito

    su eventuale_funzione_di_callback metto un document.write?

  14. #14
    Guest

    Predefinito

    inoltre nella pagina controller.php non ho la variabile incrementa

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    su eventuale_funzione_di_callback metto un document.write?
    Dipende da cosa vuoi fare!

    inoltre nella pagina controller.php non ho la variabile incrementa
    E chi ha mai parlato di una variabile incrementa?

  16. #16
    Guest

    Predefinito

    Lo so sono stupido e ignorante...mi potresti strutturare il codice completo del pulsante e del controller.php :(

  17. #17
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non intendevo dire questo...

    Il codice del controller.php già c'è, pochi messaggi indietro: chiamata funzione ph con onclick # 10.

    Quello del pulsante è praticamente lo stesso del precedente, con qualche abbellimento diventa così:
    index.html
    Codice HTML:
    <body>
    	<h1>Chiamata funzione PHP on click</h1>
    
    	<p>Valore corrente della variabile condivisa: <span id="value"></span></p>
    
    
    	<button id="read_value">Leggi valore</button>
    	<button id="update_value">Incrementa valore</button>
    
    	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    	<script>
    		// Mostra il valore indicato
    		function show_value(value) {
    			var container = $('#value');
    			container.html(JSON.parse(value));
    		}
    
    
    		// Associa il click alla lettura e stampa della variabile
    		$('#read_value').click(function () {
    			$.get("controller.php", show_value);
    		});
    
    
    		// Associa il click all'incremento e stampa della variabile
    		$('#update_value').click(function () {
    			$.post("controller.php", { incrementa: "true" }, show_value);
    		});
    	</script>
    </body>
    Puoi vederne un esempio funzionante nel mio spazio AlterVista.

    Non sapendo in che modo intendessi stampare il valore del contatore, ho supposto ci fosse uno <span> predisposto per contenerlo, di conseguenza la stampa consiste nell'accedere a questo <span> ed inserirvi il valore restituito dalle chiamate AJAX.

  18. #18
    Guest

    Predefinito

    Mzanella e proprio quello che volevo fare solo che il valore rimane sempre visualizzato😉😉

  19. #19
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Esatto, con il codice proposto il valore viene "inserito" dentro allo <span> come un normale testo, e viene sostituito alle successive pressioni dei tasti.

    Tu invece come lo volevi?

  20. #20
    Guest

    Predefinito

    Cosi lo volevo pero al posto di scomparire ogni volta che ricarichi la pagina , resta sempre visualizzato

  21. #21
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    È sufficiente effettuare la richesta GET appena lo <span> è pronto:
    Codice HTML:
    $('#value').ready(function () {
    	$.get("controller.php", show_value);
    });
    Il codice diventa quindi:
    Codice HTML:
    <body>
    	<h1>Chiamata funzione PHP on click</h1>
    
    	<p>
    		Valore corrente della variabile condivisa: <span id="value"></span>
    	</p>
    
    
    	<button id="read_value">Leggi valore</button>
    	<button id="update_value">Incrementa valore</button>
    
    	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    	<script>
    		// Mostra il valore indicato
    		function show_value(value) {
    			var container = $('#value');
    			container.html(JSON.parse(value));
    		}
    
    
    		// Mostra il valore al caricamento dall pagina
    		$('#value').ready(function () {
    			$.get("controller.php", show_value);
    		});
    
    
    		// Associa il click alla lettura e stampa della variabile
    		$('#read_value').click(function () {
    			$.get("controller.php", show_value);
    		});
    
    
    		// Associa il click all'incremento e stampa della variabile
    		$('#update_value').click(function () {
    			$.post("controller.php", { incrementa: "true" }, show_value);
    		});
    	</script>
    </body>

  22. #22
    Guest

    Predefinito

    Sono senza parole... TI RINGRAZIO DI CUORE!

  23. #23
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Prego !

Regole di scrittura

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