วิธีการเรียกใช้ฟังก์ชัน PHP ด้วยการคลิกปุ่ม


151

ฉันได้สร้างหน้าที่เรียกว่า functioncalling.php ซึ่งมีปุ่มสองปุ่มส่งและแทรกแทรกในฐานะผู้เริ่มต้นใน 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
ขอบคุณสำหรับการตอบกลับ โปรดบอกฉันว่าฉันจะเรียกฟังก์ชัน PHP เหล่านี้จาก JavaScript ได้อย่างไร?
มีดโกน

ดูคำตอบนี้
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: $ ไม่ได้กำหนดไว้
Benjamin

คุณรวมไลบรารี JQuery ก่อนที่จะใช้รหัสนี้หรือไม่
Roopendra

9
ฉันทำ แต่เพิ่งรู้ว่า //code.jquery.com/...etc ไม่โหลดบน localhost https: // ทำ! รหัสทำงานได้ดีขอโทษความผิดพลาดของฉัน
Benjamin

1
สวย! สิ่งที่ฉันกำลังมองหา

1
รักตัวจัดการคลาสปุ่ม รุ่งโรจน์สำหรับรหัสทั่วไปที่ใช้งานได้ในหลายสถานการณ์
Pablo Contreras

64

คลิกปุ่มอยู่ด้านลูกค้าในขณะที่ PHP จะถูกดำเนินการด้านเซิร์ฟเวอร์แต่คุณสามารถบรรลุนี้โดยใช้อาแจ็กซ์ :

$('.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 ที่คุณให้ไว้ฉันจะเรียกฟังก์ชัน PHP ในคุณสมบัติ. do ได้อย่างไร
มีดโกน

เมื่อคุณใช้ ajax เพื่อโทรหาไฟล์ php มีวิธีใดในการเรียกใช้ฟังก์ชั่น php เฉพาะหรือไม่ หรือฉันต้องใส่แต่ละไฟล์ในไฟล์ที่แตกต่างกันหรือไม่
Lordbug

1
นอกจากนี้ยังใช้การป้องกัน JS เริ่มต้นเพื่อป้องกันไม่ให้ส่งแบบฟอร์มเพื่อให้หน้าไม่โหลดซ้ำ w3schools.com/jsref/…
csandreas1

ในฐานะผู้เริ่มต้นฉันต้องการล้างข้อสงสัยของฉัน หน้าเหล่านั้นควรได้รับการป้องกันไม่ให้พัฒนาโดยที่ทั้ง HTML และรหัส PHP รวมอยู่ในหน้าเดียวกับ HTML ที่ให้บริการเพื่อตอบสนองความต้องการของลูกค้าเช่นแบบฟอร์มและ PHP ที่ให้บริการเป็นการตอบกลับไปยังรูปแบบ HTML เช่นการพิมพ์ผลลัพธ์บางอย่าง คลิกแบบฟอร์มหรือไม่
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

คุณไม่สามารถเรียกฟังก์ชัน PHP เช่นคลิกที่ปุ่มจาก HTML เพราะ HTML อยู่ฝั่งไคลเอนต์ในขณะที่ PHP รันฝั่งเซิร์ฟเวอร์

ไม่ว่าคุณจะต้องใช้อาแจ็กซ์บางตัวหรือทำอย่างที่เป็นในข้อมูลโค้ดด้านล่าง

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

หากต้องการแสดงข้อความ $ ในข้อมูลที่คุณป้อน:

<?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]? PHP รองรับคำเปล่าเช่นเดียวกับ Perl หรือไม่?
Peter Mortensen

3

ใช้การเรียกซ้ำที่การกระทำของฟอร์มเรียกตัวเอง จากนั้นเพิ่มรหัส PHP ในรูปแบบเดียวกันเพื่อจับ ในfoo.phpรูปแบบของคุณจะเรียกfoo.phpในpost

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.