Jak wywołać funkcję PHP jednym kliknięciem przycisku


151

Utworzyłem stronę o nazwie functioncalling.php, która zawiera dwa przyciski: Prześlij i Wstaw . Jako początkujący w PHP chcę sprawdzić, która funkcja jest wykonywana po kliknięciu przycisku. Chcę, aby wynik znajdował się na tej samej stronie. Stworzyłem więc dwie funkcje, po jednej dla każdego przycisku. Kod źródłowy funkcji functioncalling.php jest następujący:

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

Problem polega na tym, że po kliknięciu któregokolwiek z przycisków nie otrzymuję żadnego wyniku.

Gdzie dokładnie się mylę?


10
PHP jest uruchamiane na serwerze. Twoje moduły obsługi kliknięć są wykonywane na kliencie. Nie możesz uruchamiać funkcji PHP jednym kliknięciem takiego przycisku. Możesz to jednak zrobić w Javascript.

1
Pytania wymagające podania kodu muszą wykazywać minimalne zrozumienie rozwiązywanego problemu. Uwzględnij wypróbowane rozwiązania, dlaczego nie zadziałały i oczekiwane rezultaty.

4
Dziękuję za odpowiedź. Czy mógłbyś mi powiedzieć, jak dokładnie mam wywołać te funkcje PHP z JavaScript?
Razor

Odpowiedzi:


93

Tak, potrzebujesz tutaj Ajax. Więcej informacji można znaleźć w poniższym kodzie.

 

Zmień swoje znaczniki w ten sposób

<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");
        });
    });
});

W 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;
    }
?>

Ten kod nie działa dla mnie: Uncaught ReferenceError: $ nie jest zdefiniowane
Benjamin

Czy przed użyciem tego kodu włączyłeś bibliotekę JQuery.
Roopendra

9
Zrobiłem, ale właśnie zdałem sobie sprawę, że //code.jquery.com/...etc nie ładuje się na localhost, https: // tak! kod działa dobrze, przepraszam za mój błąd.
Benjamin

1
Piękny! dokładnie to, czego szukałem.

1
uwielbiam program obsługi klas przycisku. brawa za ogólny kod, który działa w wielu scenariuszach.
Pablo Contreras

64

Kliknięcia przycisków są po stronie klienta, podczas gdy PHP jest wykonywane po stronie serwera , ale możesz to osiągnąć za pomocą Ajax :

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

W Twoim pliku PHP:

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

5
Dziękuję za rozwiązanie. Jak we fragmencie kodu AJAX, który mi przekazałeś, mam wywołać funkcje PHP we właściwości .done?
Razor

kiedy użyjesz ajax do wywołania pliku php, czy istnieje sposób na wywołanie określonej funkcji php? czy będę musiał umieścić każdy z nich w innym pliku?
Lordbug

1
użyj również JS disabledefault, aby zapobiec przesyłaniu formularza, aby strona nie ładowała się ponownie. w3schools.com/jsref/…
csandreas1

Jako początkujący chcę rozwiać wątpliwości. Czy należy uniemożliwić tworzenie tych stron, na których zarówno kody HTML, jak i PHP są połączone na jednej stronie, a HTML służący do interakcji z klientem, taki jak formularze i PHP służący jako odpowiedź na takie formularze HTML, jak drukowanie niektórych wyników w oparciu o to, czy przycisk w formularz jest kliknięty?
KPMG

Jak to ma działać? Umieściłem instrukcję echo w treści funkcji abc i umieściłem punkty przerwania zarówno w wierszu deklaracji funkcji, jak iw wywołaniu echo w funkcji. Kiedy klikam przycisk, trafia się pierwszy punkt przerwania (tj. Funkcja jest zadeklarowana), ale ten w treści nigdy nie trafia, co rozumiem, że funkcja nigdy nie jest wywoływana.
Shaggydog

41

Powinieneś wywołać przycisk na tej samej stronie iw sekcji PHP sprawdzić, czy przycisk został naciśnięty:

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

Nie możesz wywoływać funkcji PHP, takich jak kliknięcie przycisku z HTML. Ponieważ HTML jest po stronie klienta, podczas gdy PHP działa po stronie serwera.

Albo musisz użyć Ajax, albo zrobić to tak, jak w poniższym fragmencie kodu.

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

Musisz opublikować dane swojego formularza, a następnie sprawdzić, czy odpowiedni przycisk jest klikany.


A jeśli chcę nadać parametr funkcji?
Nick Alexander,

Możesz przekazywać argumenty do funkcji, takich jak inne funkcje w php
Jason W

14

Aby wyświetlić wiadomość $ w swoim wejściu:

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

Aby użyć functioncalling.php jako pliku zewnętrznego, musisz w jakiś sposób dołączyć go do swojego dokumentu HTML.


8

Spróbuj tego:

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

1
to najlepsza odpowiedź, zamiast używać głupich ram
Vincent Thorpe

7

Możesz pisać w ten sposób w JavaScript lub jQuery Ajax i wywołać plik

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



4

Utknąłem w tym i rozwiązałem to z ukrytym polem:

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

W valuemożesz dodać wszystko, co chcesz.

W test.php możesz pobrać wartość poprzez $_Post[ID].


Nie powinno IDbyć cytowane w $_Post[ID]? Czy PHP obsługuje nagie słowa, tak jak w Perlu?
Peter Mortensen,

3

Użyj wywołania rekurencyjnego, w którym akcja formularza wywołuje samą siebie. Następnie dodaj kod PHP w tej samej formie, aby go złapać. W foo.phpformularzu będzie zadzwonić foo.phpnapost

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

Po wysłaniu formularz wywoła sam siebie ( foo.php) i możesz go przechwycić poprzez predefiniowaną zmienną PHP, $_SERVERjak pokazano w kodzie poniżej

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

2

Oto przykład, którego możesz użyć:

<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

Możesz to po prostu zrobić. W php możesz określić kliknięcie przycisku za pomocą

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

Dlatego powinieneś zmodyfikować swój kod w następujący sposób:


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.