Come chiamare una funzione PHP con un clic di un pulsante


151

Ho creato una pagina chiamata functioncalling.php che contiene due pulsanti, Invia e Inserisci . Come principiante in PHP, voglio testare quale funzione viene eseguita quando si fa clic su un pulsante. Voglio che l'output arrivi sulla stessa pagina. Quindi ho creato due funzioni, una per ciascun pulsante. Il codice sorgente per functioncalling.php è il seguente:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>
        <form action="functioncalling.php">
            <input type="text" name="txt" />
            <input type="submit" name="insert" value="insert" onclick="insert()" />
            <input type="submit" name="select" value="select" onclick="select()" />
        </form>

        <?php
            function select(){
               echo "The select function is called.";
            }
            function insert(){
               echo "The insert function is called.";
            }
        ?>

Il problema qui è che non ottengo alcun output dopo aver fatto clic su uno dei pulsanti.

Dove sbaglio esattamente?


10
PHP viene eseguito sul server. I gestori dei clic vengono eseguiti sul client. Non è possibile eseguire le funzioni PHP facendo clic su un pulsante come questo. Puoi farlo in Javascript, tuttavia.

1
Le domande che richiedono il codice devono dimostrare una comprensione minima del problema da risolvere. Includi soluzioni tentate, perché non hanno funzionato e i risultati previsti.

4
Grazie per avermi risposto. Potresti dirmi come posso chiamare esattamente queste funzioni PHP da JavaScript?
Rasoio,

Risposte:


93

Sì, qui hai bisogno dell'Ajax. Si prega di fare riferimento al codice qui sotto per maggiori dettagli.

 

Cambia il tuo markup in questo modo

<input type="submit" class="button" name="insert" value="insert" />
<input type="submit" class="button" name="select" value="select" />

 

jQuery:

$(document).ready(function(){
    $('.button').click(function(){
        var clickBtnValue = $(this).val();
        var ajaxurl = 'ajax.php',
        data =  {'action': clickBtnValue};
        $.post(ajaxurl, data, function (response) {
            // Response div goes here.
            alert("action performed successfully");
        });
    });
});

In ajax.php

<?php
    if (isset($_POST['action'])) {
        switch ($_POST['action']) {
            case 'insert':
                insert();
                break;
            case 'select':
                select();
                break;
        }
    }

    function select() {
        echo "The select function is called.";
        exit;
    }

    function insert() {
        echo "The insert function is called.";
        exit;
    }
?>

Questo codice non funziona per me: Uncaught ReferenceError: $ non è definito
Benjamin

Hai incluso la libreria JQuery prima di utilizzare questo codice.
Roopendra,

9
l'ho fatto ma ho appena realizzato che //code.jquery.com/...etc non si carica su localhost, https: // lo fa! il codice funziona bene, scusate il mio errore.
Benjamin,

1
Bellissimo! esattamente quello che stavo cercando.

1
adoro il gestore di classi di pulsanti. complimenti per il codice generico che funziona in molti scenari.
Pablo Contreras,

64

I clic sui pulsanti sono lato client mentre PHP viene eseguito lato server , ma puoi farlo utilizzando Ajax :

$('.button').click(function() {
  $.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John" }
  }).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
});

Nel tuo file PHP:

<?php
    function abc($name){
        // Your code here
    }
?>

5
Grazie per aver dato la soluzione. Nello snippet di codice AJAX che mi hai fornito, come posso chiamare le funzioni PHP nella proprietà .done?
Rasoio

una volta che usi Ajax per chiamare il file PHP, c'è un modo per chiamare la specifica funzione PHP? o dovrò mettere ognuno in un file diverso?
Lordbug

1
utilizzare anche JS preventdefault per impedire l'invio del modulo in modo che la pagina non venga ricaricata. w3schools.com/jsref/…
csandreas1

Come principiante, desidero chiarire i miei dubbi. Dovrebbe essere impedito lo sviluppo di quelle pagine in cui entrambi i codici HTML e PHP sono uniti in una singola pagina con HTML che serve allo scopo di interazione client come moduli e PHP che serve come risposta a tali moduli HTML come stampare alcuni risultati in base al fatto che un pulsante in un si fa clic sul modulo?
KPMG,

Come dovrebbe funzionare? Ho inserito un'istruzione echo nel corpo della funzione abc e ho inserito punti di interruzione sia nella riga di dichiarazione della funzione, sia nella chiamata echo nella funzione. Quando faccio clic sul pulsante, viene colpito il primo punto di interruzione (ovvero viene dichiarata la funzione) ma quello nel corpo non colpisce mai, cosa che intendo per dire che la funzione non viene mai chiamata.
Shaggydog,

41

Si dovrebbe fare in modo che il pulsante chiami la stessa pagina e in una sezione PHP verificare se il pulsante è stato premuto:

HTML:

<form action="theSamePage.php" method="post">
    <input type="submit" name="someAction" value="GO" />
</form>

PHP:

<?php
    if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['someAction']))
    {
        func();
    }
    function func()
    {
        // do stuff     
    }
?>

17

Non puoi chiamare funzioni PHP come fare clic su un pulsante da HTML. Perché HTML è sul lato client mentre PHP esegue il lato server.

O devi usare un po 'di Ajax o farlo come nello snippet di codice qui sotto.

<?php
    if ($_GET) {
        if (isset($_GET['insert'])) {
            insert();
        } elseif (isset($_GET['select'])) {
            select();
        }
    }

    function select()
    {
       echo "The select function is called.";
    }

    function insert()
    {
       echo "The insert function is called.";
    }
?>

È necessario pubblicare i dati del modulo e quindi verificare la presenza del pulsante appropriato su cui si fa clic.


E se voglio dare un parametro alla funzione?
Nick Alexander

Puoi passare argomenti a funzioni come altre funzioni in php
Jason W

14

Per mostrare $ message nel tuo input:

<?php
    if(isset($_POST['insert'])){
        $message= "The insert function is called.";
    }
    if(isset($_POST['select'])){
        $message="The select function is called.";
    }
?>


<form  method="post">
    <input type="text" name="txt" value="<?php if(isset($message)){ echo $message;}?>" >
    <input type="submit" name="insert" value="insert">
    <input type="submit" name="select" value="select" >
</form>

Per usare functioncalling.php come file esterno devi includerlo in qualche modo nel tuo documento HTML.


8

Prova questo:

if($_POST['select'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    select();
}
if($_POST['insert'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    insert();
}

1
questa è la risposta migliore piuttosto che usare stupidi framework
vincent thorpe il

7

Puoi scrivere in questo modo in JavaScript o jQuery Ajax e chiamare il file

$('#btn').click(function(){
  $.ajax({
    url:'test.php?call=true',
    type:'GET',
    success:function(data){
    body.append(data);
    }
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<form  method='get' >

  <input type="button" id="btn" value="click">
</form>

<?php
    if(isset($_GET['call'])){

        function anyfunction(){
            echo "added";

            // Your funtion code
        }
    }
?>


5

L' onclickattributo in HTML chiama le funzioni JavaScript, non le funzioni PHP.


4

Ero bloccato in questo e l'ho risolto con un campo nascosto:

<form method="post" action="test.php">
    <input type="hidden" name="ID" value"">
</form>

In valuepuoi aggiungere quello che vuoi aggiungere.

In test.php puoi recuperare il valore attraverso $_Post[ID].


Non dovrebbe IDessere citato $_Post[ID]? PHP supporta le parole nude, come in Perl?
Peter Mortensen,

3

Utilizzare una chiamata ricorsiva in cui l'azione del modulo si chiama da sola. Quindi aggiungi il codice PHP nella stessa forma per catturarlo. Nel foo.phpmodulo chiamerà foo.phpsupost

<html>
    <body>
        <form action="foo.php" method="post">

Una volta che il modulo è stato inviato, si chiamerà da solo ( foo.php) e puoi catturarlo tramite la variabile predefinita PHP $_SERVERcome mostrato nel codice seguente

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        echo "caught post";
    }
?>
        </form>
    </body>
</html>

2

Ecco un esempio che potresti usare:

<html>
    <body>
        <form action="btnclick.php" method="get">
            <input type="submit" name="on" value="on">
            <input type="submit" name="off" value="off">
        </form>
    </body>
</html>
<?php
    if(isset($_GET['on'])) {
        onFunc();
    }
    if(isset($_GET['off'])) {
        offFunc();
    }

    function onFunc(){
        echo "Button on Clicked";
    }
    function offFunc(){
        echo "Button off clicked";
    }
?>

0

Puoi semplicemente farlo. In php, puoi determinare il clic sul pulsante usando

if(isset($_Post['button_tag_name']){
echo "Button Clicked";
}

Pertanto, è necessario modificare il codice come segue:


<?php

if(isset($_Post['select']){
 echo "select button clicked and select method should be executed"
}
if(isset($_Post['insert']){
 echo "insert button clicked and insert method should be executed"
}

        ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>
        <form action="functioncalling.php">
            <input type="text" name="txt" />
            <input type="submit" name="insert" value="insert" onclick="insert()" />
            <input type="submit" name="select" value="select" onclick="select()" />
        </form>

<script>
//This will be processed on the client side
function insert(){
  window.alert("You click insert button");
}

function select(){
  window.alert("You click insert button");
}
</script>
</body>
</html>


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.