Как вызвать функцию 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

Да, вам нужен 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: $ не определено
Бенджамин

Вы включили библиотеку JQuery перед использованием этого кода.
Рупендра

9
я сделал, но только что понял, что //code.jquery.com/...etc не загружается на localhost, https: // делает! код работает нормально извините мою ошибку
Бенджамин

1
Прекрасный! именно то, что я искал.

1
люблю обработчик класса кнопки. слава за общий код, который работает во многих сценариях.
Пабло Контрерас

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? или мне придется поместить каждый в другой файл?
Лордбаг

1
также используйте JS protectdefault, чтобы запретить отправку формы, чтобы страница не перезагружалась. 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 работает на стороне сервера.

Либо вам нужно использовать 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

Чтобы показать $ сообщение в вашем входе:

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