Як викликати функцію 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?
Бритва

Відповіді:


93

Так, тут вам потрібен Аякс. Будь ласка, зверніться до коду нижче для отримання детальної інформації.

 

Змініть розмітку так

<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: // робить! код працює чудово вибачте за мою помилку.
Бенджамін

1
Гарний! саме те, що я шукав.

1
люблю обробник клавіш. kudos для загального коду, який працює у багатьох сценаріях.
Пабло Контрерас

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, який ви надали мені, як мені викликати функції PHP у властивості .done?
Бритва

як тільки ви використовуєте ajax для виклику файлу php, чи є можливість зателефонувати на конкретну функцію php? чи мені доведеться помістити кожного в інший файл?
Lordbug

1
також використовуйте JS prevendefault, щоб запобігти надсиланню форми, щоб сторінка не завантажувалася. w3schools.com/jsref/…
csandreas1

Як початківець, я хочу усунути свої сумніви. Якщо ці сторінки не можуть розвиватися там, де і HTML, і PHP-коди об'єднуються в одній сторінці з HTML, що служить меті взаємодії з клієнтами, як форми, і PHP, що слугує відповіддю на такі форми HTML, як друк деяких результатів на основі того, чи є кнопка в форма натиснута?
KPMG

Як це має працювати? Я помістив оператор ехо в тіло функції abc, і я поставив точки перерви як в рядку оголошення функції, так і в ехо-виклику функції. Коли я натискаю кнопку, потрапляє перша точка розриву (тобто функція оголошена), але ця в тілі ніколи не потрапляє, і я вважаю, що функція ніколи не викликається.
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
це найкраща відповідь, а не використання дурних рамок
Вінсент Торп,

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?
Пітер Мортенсен

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>


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.