ボタンをクリックするだけでPHP関数を呼び出す方法


151

「送信」と「挿入」の 2つのボタンを含むfunctioncalling.phpというページを作成しました。PHPの初心者として、ボタンがクリックされたときに実行される関数をテストしたいと思います。出力を同じページにしたい。そこで、ボタンごとに1つずつ、2つの関数を作成しました。functioncalling.phpのソースコードは次のとおりです。

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

ここでの問題は、いずれかのボタンをクリックしても出力が得られないことです。

どこが間違っているのですか?


10
PHPはサーバー上で実行されます。クリックハンドラーがクライアントで実行されます。このようなボタンをクリックするだけでPHP関数を実行することはできません。ただし、JavaScriptで実行できます。

1
コードを求める質問は、解決される問題の最小限の理解を示す必要があります。試みた解決策、それらが機能しなかった理由、および期待される結果を含めます。

4
お返事ありがとうございます。これらのPHP関数をJavaScriptからどのように正確に呼び出すことができますか?
Razor

この回答を参照してください。
Amal Murali

回答:


93

はい、ここにAjaxが必要です。詳細については、以下のコードを参照してください。

 

このようにマークアップを変更します

<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

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

このコードは私には機能しません:Uncaught ReferenceError:$ is not defined
Benjamin

このコードを使用する前に、jQueryライブラリを含めましたか?
Roopendra、2015年

9
私はしましたが、// code.jquery.com/...etcがlocalhostにロードされないことに気づきました、https://はロードします!コードは問題なく動作します。
ベンジャミン

1
綺麗な!まさに私が探していたもの。

1
ボタンクラスハンドラーが大好きです。多くのシナリオで機能する汎用コードの称賛。
Pablo Contreras

64

ボタンのクリックはクライアント側ですが、PHPはサーバー側で実行されますが、これはAjaxを使用して実現できます。

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

PHPファイルで:

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

5
解決策を与えてくれてありがとう。提供されたAJAXコードスニペットで、.doneプロパティでPHP関数を呼び出すにはどうすればよいですか?
Razor

ajaxを使用してphpファイルを呼び出したら、特定のphp関数を呼び出す方法はありますか?または、それぞれを別のファイルに配置する必要がありますか?
Lordbug 2017

1
また、JS preventdefaultを使用してフォームが送信されないようにし、ページが再読み込みされないようにします。w3schools.com/jsref/...
csandreas1

初心者として、疑問を解消したいと思います。HTMLとPHPコードの両方が1つのページにマージされ、フォームなどのクライアントとのやり取りの目的でHTMLが使用され、PHPがボタンの有無に基づいて結果を印刷するなどのHTMLフォームへの応答として機能するPHPで、これらのページが開発されないようにする必要があります。フォームがクリックされましたか?
KPMG

これはどのように機能するはずですか?echoステートメントをabc関数本体に配置し、ブレークポイントを関数宣言行と関数のecho呼び出しの両方に配置しました。ボタンをクリックすると、最初のブレークポイントがヒットします(つまり、関数が宣言されます)が、本体のブレークポイントはヒットしません。つまり、関数が呼び出されることはありません。
Shaggydog

41

ボタンを同じページに呼び出し、PHPセクションでボタンが押されたかどうかを確認する必要があります。

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からボタンをクリックするようなPHP関数を呼び出すことはできません。HTMLはクライアント側にあり、PHPはサーバー側で実行されるためです。

Ajaxを使用するか、以下のコードスニペットのように使用する必要があります。

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

フォームデータを投稿し、クリックされた適切なボタンを確認する必要があります。


そして、私は関数にパラメータを与えたいのですか?
Nick Alexander

PHPの他の関数のような関数に引数を渡すことができます
Jason W

14

入力に$ messageを表示するには:

<?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を外部ファイルとして使用するには、なんとかしてHTMLドキュメントに含める必要があります。


8

これを試して:

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

1
これは愚かなフレームワークを使用するよりも最善の答えです
vincent thorpe '26

7

このようにJavaScriptまたはjQuery Ajaxで記述してファイルを呼び出すことができます

$('#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 の属性は、PHP関数ではなくJavaScript関数を呼び出します。


4

私はこれで立ち往生し、私はそれを隠しフィールドで解決しました:

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

ではvalueもしあなたが追加したいものは何でも追加することができます。

test.phpでは、を介して値を取得できます$_Post[ID]


IDで引用されるべきではありません$_Post[ID]か?PHPは、Perlのように、裸の単語をサポートしていますか?
Peter Mortensen

3

フォームアクションがそれ自体を呼び出す再帰呼び出しを使用します。次に、同じ形式でPHPコードを追加して、それをキャッチします。foo.php呼び出すフォームfoo.phppost

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

フォームが送信されると、それ自体が呼び出され(foo.php)、次$_SERVERのコードに示すように、PHPの定義済み変数を介してフォームをキャッチできます。

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

2

使用できる例は次のとおりです。

<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

あなたは単にこれを行うことができます。phpでは、ボタンのクリックを使用して決定できます

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

したがって、次のようにコードを変更する必要があります。


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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.