Cara memanggil fungsi PHP dengan mengklik tombol


151

Saya telah membuat halaman bernama functioncalling.php yang berisi dua tombol, Kirim dan Sisipkan . Sebagai pemula dalam PHP, saya ingin menguji fungsi mana yang dijalankan ketika sebuah tombol diklik. Saya ingin hasilnya muncul di halaman yang sama. Jadi saya membuat dua fungsi, satu untuk setiap tombol. Kode sumber untuk functioncalling.php adalah sebagai berikut:

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

Masalahnya di sini adalah bahwa saya tidak mendapatkan output apa pun setelah salah satu tombol diklik.

Di mana tepatnya saya salah?


10
PHP dijalankan di server. Penangan klik Anda dijalankan pada klien. Anda tidak dapat menjalankan fungsi PHP dengan mengklik tombol seperti ini. Anda dapat melakukannya dalam Javascript.

1
Pertanyaan yang meminta kode harus menunjukkan pemahaman minimal tentang masalah yang sedang dipecahkan. Termasuk solusi yang dicoba, mengapa tidak berhasil, dan hasil yang diharapkan.

4
Terima kasih untuk balasannya. Bisakah Anda memberi tahu saya bagaimana tepatnya saya memanggil fungsi-fungsi PHP ini dari JavaScript?
Razor

Jawaban:


93

Ya, Anda perlu Ajax di sini. Silakan merujuk kode di bawah ini untuk lebih jelasnya.

 

Ubah markup Anda seperti ini

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

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

Kode ini tidak berfungsi untuk saya: Referensi Tidak Tertangkap Kesalahan: $ tidak didefinisikan
Benjamin

Apakah Anda menyertakan pustaka JQuery sebelum menggunakan kode ini.
Roopendra

9
saya lakukan tetapi baru menyadari bahwa //code.jquery.com/...etc tidak memuat di localhost, https: // tidak! kode berfungsi dengan baik maaf kesalahan saya.
Benjamin

1
Cantik! persis apa yang saya cari.

1
suka penangan kelas tombol. pujian untuk kode generik yang berfungsi dalam banyak skenario.
Pablo Contreras

64

Klik tombol adalah sisi klien sedangkan PHP dieksekusi sisi server , tetapi Anda dapat mencapainya dengan menggunakan Ajax :

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

Dalam file PHP Anda:

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

5
Terima kasih telah memberikan solusinya. Dalam cuplikan kode AJAX yang telah Anda berikan kepada saya, bagaimana cara memanggil fungsi PHP di properti .done?
Razor

setelah Anda menggunakan ajax untuk memanggil file php, apakah ada cara untuk memanggil fungsi php tertentu? atau apakah saya harus meletakkan masing-masing dalam file yang berbeda?
Lordbug

1
juga menggunakan JS preventdefault untuk mencegah pengiriman formulir sehingga halaman tidak akan dimuat ulang. w3schools.com/jsref/…
csandreas1

Sebagai seorang pemula, saya ingin menghapus keraguan saya. Haruskah halaman-halaman tersebut dicegah agar tidak berkembang di mana kode HTML dan PHP digabung dalam satu halaman dengan HTML yang melayani tujuan interaksi klien seperti formulir dan PHP yang berfungsi sebagai balasan ke formulir HTML seperti mencetak beberapa hasil berdasarkan pada apakah tombol di sebuah formulir diklik?
KPMG

Bagaimana cara kerjanya? Saya telah menempatkan pernyataan gema di badan fungsi abc, dan saya telah meletakkan breakpoint pada kedua baris deklarasi fungsi, dan pada panggilan gema dalam fungsi. Ketika saya mengklik tombol, breakpoint pertama adalah hit (yaitu fungsi dideklarasikan) tetapi yang ada di tubuh tidak pernah hits, yang saya ambil berarti fungsi tidak pernah dipanggil.
Shaggydog

41

Anda harus membuat tombol memanggil halaman yang sama dan di bagian PHP memeriksa apakah tombol itu ditekan:

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

Anda tidak dapat memanggil fungsi PHP seperti mengeklik tombol dari HTML. Karena HTML ada di sisi klien sementara PHP menjalankan sisi server.

Anda harus menggunakan Ajax atau melakukannya seperti pada cuplikan kode di bawah ini.

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

Anda harus memposting data formulir Anda dan kemudian memeriksa tombol yang sesuai yang diklik.


Dan jika saya ingin memberikan param ke fungsi?
Nick Alexander

Anda dapat meneruskan argumen ke fungsi seperti fungsi lainnya di php
Jason W

14

Untuk menampilkan $ message di input Anda:

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

Untuk menggunakan functioncalling.php sebagai file eksternal Anda harus memasukkannya dalam dokumen HTML Anda.


8

Coba ini:

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

1
ini adalah jawaban terbaik daripada menggunakan kerangka kerja yang bodoh
vincent thorpe

7

Anda dapat menulis seperti ini di JavaScript atau jQuery Ajax dan memanggil 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

The onclickatribut dalam HTML panggilan fungsi JavaScript, tidak fungsi PHP.


4

Saya terjebak dalam hal ini dan saya menyelesaikannya dengan bidang tersembunyi:

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

Di value Anda dapat menambahkan apa pun yang ingin Anda tambahkan.

Di test.php Anda dapat mengambil nilainya $_Post[ID].


Bukankah IDseharusnya dikutip dalam $_Post[ID]? Apakah PHP mendukung kata-kata telanjang, seperti di Perl?
Peter Mortensen

3

Gunakan panggilan rekursif di mana tindakan bentuk panggilan itu sendiri. Kemudian tambahkan kode PHP dalam bentuk yang sama untuk menangkapnya. Dalam foo.phpformulir Anda akan memanggil foo.phppadapost

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

Setelah formulir dikirimkan, ia akan memanggil dirinya sendiri ( foo.php) dan Anda dapat menangkapnya melalui variabel yang telah ditentukan PHP $_SERVERseperti yang ditunjukkan pada kode di bawah ini

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

2

Berikut adalah contoh yang dapat Anda gunakan:

<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

Anda cukup melakukan ini. Di php, Anda dapat menentukan klik tombol dengan menggunakan

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

Karena itu Anda harus memodifikasi kode Anda sebagai berikut:


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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.