单击按钮如何调用PHP函数


151

我创建了一个名为functioncalling.php的页面,其中包含两个按钮SubmitInsert。作为PHP的初学者,我想测试单击按钮时执行的功能。我希望输出出现在同一页面上。因此,我创建了两个功能,每个按钮一个。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
感谢您的回复。您能告诉我如何从JavaScript调用这些PHP函数吗?
Razor

Answers:


92

是的,您在这里需要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;
    }
?>

这段代码对我不起作用:未捕获的ReferenceError:未定义$
Benjamin

在使用此代码之前,您是否包括JQuery库。
Roopendra

9
我做到了,但是才意识到//code.jquery.com/...etc不会在本地主机上加载,https://可以!代码工作正常,对不起我的错误。
本杰明2015年

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

1
还使用JS preventdefault来阻止表单提交,因此不会重新加载页面。w3schools.com/jsref/...
csandreas1

作为一个初学者,我想清除我的疑问。如果要阻止这些页面在HTML和PHP代码都合并到一个页面中的情况下开发,而HTML用于实现诸如表单之类的客户端交互目的,而PHP充当对此类HTML形式的答复,例如根据是否有一个按钮打印一些结果。表格被点击了吗?
毕马威(KPMG)

这应该如何工作?我已经在abc函数主体中放置了echo语句,并且在函数声明行和函数中的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

您不能调用PHP函数,例如单击HTML中的按钮。因为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.";
    }
?>

您必须发布表单数据,然后检查是否单击了适当的按钮。


如果我想给函数一个参数?
尼克·亚历山大

您可以将参数传递给函数,例如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

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



4

我陷入其中,并用一个隐藏字段解决了它:

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

在其中value您可以添加任何要添加的内容。

在test.php中,您可以通过检索值$_Post[ID]


不应ID在中引用$_Post[ID]?和Perl一样,PHP是否支持裸词?
彼得·莫滕森

3

在表单操作自行调用的地方使用递归调用。然后以相同的形式添加PHP代码以捕获它。在foo.php您的形式将调用foo.phppost

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

提交表单后,它将自行调用(foo.php),您可以通过PHP预定义变量来捕获它$_SERVER,如以下代码所示

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.