Bir düğmeyi tıklatarak bir PHP işlevi nasıl çağrılır


151

Submit ve Insert olmak üzere iki düğme içeren functioncalling.php adlı bir sayfa oluşturdum . PHP'de bir acemi olarak, bir düğme tıklandığında hangi işlevin yürütüldüğünü test etmek istiyorum. Çıktının aynı sayfaya gelmesini istiyorum. Bu yüzden her düğme için bir tane olmak üzere iki işlev oluşturdum. Functioncalling.php için kaynak kodu aşağıdaki gibidir:

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

Buradaki sorun, düğmelerden herhangi birine tıklandıktan sonra herhangi bir çıktı almıyorum.

Nerede yanlış gidiyorum?


10
PHP sunucuda çalışır. Tıklama işleyicileriniz istemcide yürütülür. Bunun gibi bir düğmeyi tıklatarak PHP işlevlerini çalıştıramazsınız. Ancak bunu Javascript ile yapabilirsiniz.

1
Kod isteyen sorular, çözülmekte olan sorunun asgari düzeyde anlaşıldığını göstermelidir. Denenmiş çözümleri, neden işe yaramadıklarını ve beklenen sonuçları ekleyin.

4
Yanıtladığınız için teşekkürler. Lütfen bu PHP işlevlerini tam olarak nasıl JavaScript'ten çağırdığımı söyleyebilir misiniz?
Razor

Bu cevaba bakınız .
Amal Murali

Yanıtlar:


93

Evet, burada Ajax'a ihtiyacınız var. Daha fazla bilgi için lütfen aşağıdaki koda bakın.

 

İşaretlemenizi böyle değiştirin

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

Ajax.php içinde

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

Bu kod benim için çalışmıyor: Yakalanmayan ReferenceError: $ tanımlı değil
Benjamin

U bu kodu kullanmadan önce JQuery kitaplığını dahil ettiniz.
Roopendra

9
yaptım ama sadece //code.jquery.com/...etc localhost üzerinde yüklenmedi, https: // yok! kod iyi çalışıyor üzgünüm benim hatam.
Benjamin

1
Güzel! tam olarak aradığım şey.

1
düğme sınıfı işleyicisini seviyorum. birçok senaryoda çalışan genel kod için kudos.
Pablo Contreras

64

Düğme tıklamaları istemci tarafındayken PHP sunucu tarafında yürütülür , ancak Ajax kullanarak bunu yapabilirsiniz :

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

PHP dosyanızda:

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

5
Çözümü verdiğiniz için teşekkürler. Bana sağladığınız AJAX kod snippet'inde .done özelliğinde PHP işlevlerini nasıl çağırabilirim?
Jilet

php dosyasını çağırmak için ajax kullandığınızda, belirli php işlevini çağırmak için herhangi bir yolu var mı? ya da her birini farklı bir dosyaya koymam gerekecek mi?
Lordbug

1
sayfanın yeniden yüklenmemesi için formun gönderilmesini önlemek amacıyla JS engelleme hatasını da kullanın. w3schools.com/jsref/...
csandreas1

Yeni başlayan biri olarak, şüphelerimi silmek istiyorum. Bu sayfaların HTML ve PHP kodlarının tek bir sayfada birleştirildiği yerlerde, formlar gibi istemci etkileşimi amacına hizmet eden HTML ve PHP gibi bir düğmenin, form tıklanır mı?
KPMG

Bunun nasıl çalışması gerekiyor? Abc fonksiyon gövdesine bir echo ifadesi koydum ve hem fonksiyon bildirim satırına hem de fonksiyondaki echo çağrısına kesme noktaları koydum. Düğmeye tıkladığımda, ilk kesme noktası vurulur (yani işlev bildirilir), ancak gövdedeki hiçbir zaman vurulmaz, bu da işlevin hiçbir zaman çağrılmadığı anlamına gelir.
Shaggydog

41

Düğmenin aynı sayfayı aramasını ve bir PHP bölümünde düğmenin basılı olup olmadığını kontrol etmelisiniz:

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

HTML'deki bir düğmeyi tıklatmak gibi PHP işlevlerini çağıramazsınız. Çünkü PHP sunucu tarafında çalışırken HTML istemci tarafındadır.

Ya bazı Ajax kullanmanız ya da aşağıdaki kod snippet'indeki gibi yapmanız gerekir.

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

Form verilerinizi göndermeniz ve ardından tıklatılan uygun düğmeyi kontrol etmeniz gerekir.


Ve eğer işleve param vermek istersem?
Nick Alexander

Php diğer işlevleri gibi işlevlere argümanlar iletebilirsiniz
Jason W

14

Girişinizde $ mesajını göstermek için:

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

Functioncalling.php dosyasını harici bir dosya olarak kullanmak için dosyayı bir şekilde HTML belgenize eklemeniz gerekir.


8

Bunu dene:

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

1
aptal çerçeveler kullanmaktan ziyade en iyi cevap bu
vincent thorpe

7

JavaScript veya jQuery Ajax'ta böyle yazabilir ve dosyayı çağırabilirsiniz

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

onclickHTML nitelik JavaScript işlevleri değil, PHP fonksiyonları çağırır.


4

Bu konuda sıkışmış ve gizli bir alan ile çözdüm:

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

In valuesize Eklemek istediğiniz ne olursa olsun ekleyebilir.

Test.php içinde değeri üzerinden alabilirsiniz $_Post[ID].


Olmamalı IDalıntı edilecek $_Post[ID]? PHP, Perl'deki gibi çıplak kelimeleri destekliyor mu?
Peter Mortensen

3

Form eyleminin kendisini çağırdığı bir özyinelemeli çağrı kullanın. Daha sonra onu yakalamak için PHP kodunu aynı forma ekleyin. In foo.phparayacak formunuzda foo.phpüzerindepost

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

Form gönderildikten sonra kendisini ( foo.php) çağırır ve $_SERVERaşağıdaki kodda gösterildiği gibi PHP önceden tanımlanmış değişkeni kullanarak yakalayabilirsiniz.

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

2

İşte kullanabileceğiniz bir örnek:

<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

Bunu basitçe yapabilirsiniz. Php, kullanarak düğmesini tıklama belirleyebilirsiniz

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

Bu nedenle kodunuzu aşağıdaki gibi değiştirmeniz gerekir:


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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.