So rufen Sie eine PHP-Funktion auf Knopfdruck auf

150

Ich habe eine Seite namens functioncalling.php erstellt, die zwei Schaltflächen enthält: Senden und Einfügen . Als Anfänger in PHP möchte ich testen, welche Funktion ausgeführt wird, wenn auf eine Schaltfläche geklickt wird. Ich möchte, dass die Ausgabe auf derselben Seite erscheint. Also habe ich zwei Funktionen erstellt, eine für jede Schaltfläche. Der Quellcode für functioncalling.php lautet wie folgt:

<!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.";
            }
        ?>

Das Problem hierbei ist, dass ich nach dem Klicken auf eine der Schaltflächen keine Ausgabe erhalte.

Wo genau gehe ich falsch?

Rasierer
quelle
10
PHP wird auf dem Server ausgeführt. Ihre Click-Handler werden auf dem Client ausgeführt. Sie können PHP-Funktionen nicht auf Knopfdruck ausführen. Sie können dies jedoch in Javascript tun.
1
Fragen, die nach Code fragen, müssen ein minimales Verständnis des zu lösenden Problems aufweisen. Geben Sie Lösungsversuche, warum sie nicht funktionierten und die erwarteten Ergebnisse an.
4
Vielen Dank für Ihre Antwort. Können Sie mir bitte sagen, wie genau ich diese PHP-Funktionen von JavaScript aus aufrufe?
Rasiermesser
Siehe diese Antwort .
Amal Murali

Antworten:

92

Ja, du brauchst Ajax hier. Weitere Informationen finden Sie im folgenden Code.

 

Ändern Sie Ihr Markup wie folgt

<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;
    }
?>
Roopendra
quelle
Dieser Code funktioniert nicht für mich: Ungefangener Referenzfehler: $ ist nicht definiert
Benjamin
Haben Sie die JQuery-Bibliothek eingeschlossen, bevor Sie diesen Code verwendet haben?
Roopendra
9
Ich habe aber gerade festgestellt, dass //code.jquery.com/...etc nicht auf localhost geladen wird, https: //! Code funktioniert gut Entschuldigung mein Fehler.
Benjamin
1
Wunderschönen! genau das, wonach ich gesucht habe.
1
Ich liebe den Button Class Handler. Ein großes Lob für generischen Code, der in vielen Szenarien funktioniert.
Pablo Contreras
64

Schaltflächenklicks sind clientseitig, während PHP serverseitig ausgeführt wird. Sie können dies jedoch mithilfe von Ajax erreichen :

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

In Ihrer PHP-Datei:

<?php
    function abc($name){
        // Your code here
    }
?>
Moeed Farooqui
quelle
5
Vielen Dank für die Lösung. Wie rufe ich in dem von Ihnen bereitgestellten AJAX-Codefragment die PHP-Funktionen in der Eigenschaft .done auf?
Rasiermesser
Gibt es eine Möglichkeit, die spezifische PHP-Funktion aufzurufen, sobald Sie Ajax zum Aufrufen der PHP-Datei verwenden? oder muss ich jedes in eine andere Datei legen?
Lordbug
1
Verwenden Sie auch JS Preventdefault, um das Senden von Formularen zu verhindern, damit die Seite nicht neu geladen wird. w3schools.com/jsref/…
csandreas1
Als Anfänger möchte ich meine Zweifel klären. Sollte verhindert werden, dass sich diese Seiten entwickeln, bei denen sowohl HTML- als auch PHP-Codes auf einer einzigen Seite zusammengeführt werden, wobei HTML dem Zweck der Clientinteraktion wie Formulare dient und PHP als Antwort auf solche HTML-Formulare dient, z. B. das Drucken einiger Ergebnisse basierend darauf, ob eine Schaltfläche in a Formular angeklickt?
KPMG
Wie soll das funktionieren? Ich habe eine Echo-Anweisung in den Funktionskörper von abc eingefügt und Haltepunkte sowohl in die Funktionsdeklarationszeile als auch in den Echo-Aufruf in der Funktion eingefügt. Wenn ich auf die Schaltfläche klicke, wird der erste Haltepunkt getroffen (dh die Funktion wird deklariert), aber der im Körper trifft nie, was ich meine, dass die Funktion niemals aufgerufen wird.
Shaggydog
40

Sie sollten die Schaltfläche auf dieselbe Seite rufen lassen und in einem PHP-Bereich prüfen, ob die Schaltfläche gedrückt wurde:

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     
    }
?>
DavidS
quelle
17

Sie können keine PHP-Funktionen wie das Klicken auf eine Schaltfläche aus HTML aufrufen. Weil HTML auf der Clientseite ist, während PHP auf der Serverseite ausgeführt wird.

Entweder müssen Sie Ajax verwenden oder Sie tun es wie im folgenden Code-Snippet.

<?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.";
    }
?>

Sie müssen Ihre Formulardaten veröffentlichen und dann nach der entsprechenden Schaltfläche suchen, auf die geklickt wird.

Jason W.
quelle
Und wenn ich der Funktion einen Parameter geben möchte?
Nick Alexander
Sie können Argumente an Funktionen wie andere Funktionen in PHP übergeben
Jason W
14

So zeigen Sie $ message in Ihrer Eingabe an:

<?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>

Um functioncalling.php als externe Datei zu verwenden, müssen Sie sie irgendwie in Ihr HTML-Dokument aufnehmen.

user5253060
quelle
8

Versuche dies:

if($_POST['select'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    select();
}
if($_POST['insert'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    insert();
}
user2399308
quelle
1
Dies ist die beste Antwort, anstatt dumme Frameworks zu verwenden
Vincent Thorpe
7

Sie können so in JavaScript oder jQuery Ajax schreiben und die Datei aufrufen

$('#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
        }
    }
?>

Vipul Tank
quelle
5

Das onclickAttribut in HTML ruft JavaScript-Funktionen auf, keine PHP-Funktionen.

Linien sind verschwommen
quelle
4

Ich steckte darin fest und löste es mit einem versteckten Feld:

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

In können valueSie hinzufügen, was Sie hinzufügen möchten.

In test.php können Sie den Wert über abrufen $_Post[ID].

Sanya Zahid
quelle
Sollte nicht IDzitiert werden $_Post[ID]? Unterstützt PHP bloße Wörter wie in Perl?
Peter Mortensen
3

Verwenden Sie einen rekursiven Aufruf, bei dem sich die Formularaktion selbst aufruft. Fügen Sie dann PHP-Code in derselben Form hinzu, um ihn abzufangen. In dem foo.phpFormular ruft foo.phpaufpost

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

Sobald das Formular gesendet wurde, ruft es sich selbst auf ( foo.php) und Sie können es über die vordefinierte PHP-Variable abrufen , $_SERVERwie im folgenden Code gezeigt

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

Hier ist ein Beispiel, das Sie verwenden könnten:

<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";
    }
?>
Sagar Mali
quelle
0

Sie können dies einfach tun. In PHP können Sie den Klick auf eine Schaltfläche mithilfe von bestimmen

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

Daher sollten Sie Ihren Code wie folgt ändern:


<?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>


trustidkid
quelle