Cách gọi hàm PHP khi nhấp vào nút


151

Tôi đã tạo một trang có tên là functioncalling.php có chứa hai nút, GửiChèn . Là người mới bắt đầu sử dụng PHP, tôi muốn kiểm tra chức năng nào được thực thi khi nhấn nút. Tôi muốn đầu ra đến trên cùng một trang. Vì vậy, tôi đã tạo ra hai chức năng, một cho mỗi nút. Mã nguồn cho functioncalling.php như sau:

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

Vấn đề ở đây là tôi không nhận được bất kỳ đầu ra nào sau khi nhấp vào bất kỳ nút nào.

Chính xác thì tôi đang đi sai ở đâu?


10
PHP thực thi trên máy chủ. Trình xử lý nhấp chuột của bạn thực thi trên máy khách. Bạn không thể chạy các chức năng PHP khi nhấp vào nút như thế này. Bạn có thể làm điều đó trong Javascript, tuy nhiên.

1
Các câu hỏi yêu cầu mã phải thể hiện sự hiểu biết tối thiểu về vấn đề đang được giải quyết. Bao gồm các giải pháp đã thử, tại sao chúng không hoạt động và kết quả mong đợi.

4
Cảm ơn vì nhắn lại. Bạn có thể vui lòng cho tôi biết chính xác làm thế nào để tôi gọi các hàm PHP này từ JavaScript không?
Dao cạo

Câu trả lời:


92

Vâng, bạn cần Ajax ở đây. Vui lòng tham khảo mã dưới đây để biết thêm chi tiết.

 

Thay đổi đánh dấu của bạn như thế này

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

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

Mã này không hoạt động đối với tôi: Uncaught ReferenceError: $ không được xác định
Benjamin

Bạn có bao gồm thư viện JQuery trước khi sử dụng mã này không.
Roopendra

9
tôi đã làm nhưng chỉ nhận ra rằng //code.jquery.com/...etc không tải trên localhost, https: // không! mã hoạt động tốt xin lỗi lỗi của tôi.
Benjamin

1
Xinh đẹp! Chính xác những gì tôi đang tìm kiếm.

1
tình yêu xử lý lớp nút. kudos cho mã chung hoạt động trong nhiều tình huống.
Pablo Tương phản

64

Các lần bấm nút là phía máy khách trong khi PHP được thực thi phía máy chủ , nhưng bạn có thể đạt được điều này bằng cách sử dụng Ajax :

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

Trong tệp PHP của bạn:

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

5
Cảm ơn đã đưa ra giải pháp. Trong đoạn mã AJAX mà bạn đã cung cấp cho tôi, làm cách nào để gọi các hàm PHP trong thuộc tính .done?
Dao cạo

Một khi bạn sử dụng ajax để gọi tệp php, có cách nào để gọi hàm php cụ thể không? hoặc tôi sẽ phải đặt mỗi người trong một tập tin khác nhau?
Bọ rùa

1
đồng thời sử dụng ngăn chặn JS để ngăn chặn biểu mẫu gửi để trang sẽ không tải lại. w3schools.com/jsref/ từ
csandreas1

Là người mới bắt đầu, tôi muốn xóa tan nghi ngờ của mình. Các trang đó có nên bị ngăn không phát triển khi cả hai mã HTML và PHP được hợp nhất trong một trang với HTML phục vụ mục đích tương tác của khách hàng như biểu mẫu và PHP dùng làm phản hồi cho các biểu mẫu HTML đó như in một số kết quả dựa trên việc có một nút trong hình thức được nhấp?
KPMG

Công việc này dự định làm như thế nào nhỉ? Tôi đã đặt một câu lệnh echo trong thân hàm abc và tôi đã đặt các điểm dừng trên cả dòng khai báo hàm và trên lệnh gọi echo trong hàm. Khi tôi nhấp vào nút, điểm dừng đầu tiên được nhấn (tức là chức năng được khai báo) nhưng điểm dừng trong cơ thể không bao giờ nhấn, điều này có nghĩa là chức năng này không bao giờ được gọi.
Shaggydog

41

Bạn nên thực hiện nút gọi cùng một trang và trong phần PHP kiểm tra xem nút có được nhấn không:

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

Bạn không thể gọi các hàm PHP như nhấp vào nút từ HTML. Bởi vì HTML nằm ở phía máy khách trong khi PHP chạy phía máy chủ.

Hoặc bạn cần sử dụng một số Ajax hoặc làm như trong đoạn mã dưới đây.

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

Bạn phải đăng dữ liệu biểu mẫu của bạn và sau đó kiểm tra nút thích hợp được nhấp.


Và nếu tôi muốn cung cấp một param cho hàm?
Nick Alexander

Bạn có thể truyền đối số cho các hàm như các hàm khác trong php
Jason W

14

Để hiển thị thông báo $ trong đầu vào của bạn:

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

Để sử dụng functioncalling.php như một tệp bên ngoài, bạn phải đưa nó vào phần nào đó trong tài liệu HTML của mình.


8

Thử cái này:

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

1
đây là câu trả lời tốt nhất thay vì sử dụng các khung ngu ngốc
vincent thorpe

7

Bạn có thể viết như thế này trong JavaScript hoặc jQuery Ajax và gọi tệp

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

Các onclickthuộc tính trong HTML gọi chức năng Javascript, không phải chức năng PHP.


4

Tôi đã bị mắc kẹt trong điều này và tôi đã giải quyết nó bằng một trường ẩn:

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

Trong valuebạn có thể thêm bất cứ điều gì bạn muốn thêm.

Trong test.php bạn có thể truy xuất giá trị thông qua $_Post[ID].


Không nên IDđược trích dẫn trong $_Post[ID]? PHP có hỗ trợ các từ trần, như trong Perl không?
Peter Mortensen

3

Sử dụng một cuộc gọi đệ quy trong đó hành động biểu mẫu gọi chính nó. Sau đó thêm mã PHP ở dạng tương tự để bắt nó. Trong foo.phphình thức của bạn sẽ gọi foo.phpvềpost

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

Khi biểu mẫu đã được gửi, nó sẽ tự gọi ( foo.php) và bạn có thể bắt nó thông qua biến được xác định trước PHP $_SERVERnhư được hiển thị trong đoạn mã dưới đây

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

2

Đây là một ví dụ mà bạn có thể sử dụng:

<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

Bạn chỉ có thể làm điều này. Trong php, bạn có thể xác định nhấp vào nút bằng cách sử dụng

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

Do đó, bạn nên sửa đổi mã của mình như sau:


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


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.