2013-12-23 4 views
98

Я новичок в PHP и только начал изучать основы этого языка.Как вызвать функцию PHP при нажатии кнопки

Я создал страницу под названием functioncalling.php, содержащую две кнопки: «Отправить» и «Вставить». Как новичок в PHP, я хочу проверить, какая функция выполняется при нажатии кнопки. Я хочу, чтобы вывод отображался на той же странице. Поэтому я создал две функции, по одной для каждой кнопки. Исходный код functioncalling.php выглядит следующим образом:

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

Проблема здесь в том, что я не получаю никакого вывода после того, как любой из кнопок нажата.

Может кто-нибудь скажет мне, где именно я иду не так? Ответы как можно скорее будут оценены. Заранее спасибо.

+4

PHP выполняется на сервере. Обработчики кликов выполняются на клиенте. Вы не можете запускать функции PHP одним нажатием кнопки. Однако вы можете сделать это в Javascript. –

+0

Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают и ожидаемые результаты. –

+2

Благодарим вас за ответ. Не могли бы вы рассказать мне, как именно я называю эти функции PHP из JavaScript? – Razor

ответ

34

Кнопка щелчок client side тогда РНР server side, но вы можете добиться этого с помощью 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 
} 
?> 
+3

Спасибо за предоставление решения. В фрагменте кода AJAX, который вы мне предоставили, как я могу назвать функции PHP в свойстве .done? – Razor

+0

Как только вы используете ajax для вызова php-файла, есть ли способ вызвать определенную функцию php? или мне придется поместить каждый в другой файл? – Lordbug

+0

также использовать JS preventdefault для предотвращения отправки формы, чтобы страница не перезагружалась. https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_event_preventdefault – csandreas1

14

вы не можете вызывать функции 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."; 
    } 

?>. 

Вы должны отправить данные о своей форме, а затем проверить соответствующую кнопку, нажав кнопку.

+0

И если я хочу дать параметр функции? – Nick

+0

Вы можете передавать аргументы в функции, подобные другим функциям в php –

2

Атрибут onclick в HTML вызывает функции Javascript, а не функции PHP.

60

Да, вам нужен аякс здесь. Для получения более подробной информации см. Приведенный ниже код.

 

Измените разметку, как этот

<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; 
} 
?> 
+0

Этот код для меня не работает: Uncaught ReferenceError: $ не определен – Benjamin

+0

У вас есть библиотека JQuery перед использованием этого кода. – Roopendra

+8

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

7

Попробуйте это:

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

я не уверен на PHP попробовать просто

<html> 
<head> 
<script> 
function insert() 
{ 
document.getElementById("demo").innerHTML="The insert function is called"; 
} 
function select() 
{ 
document.getElementById("demo").innerHTML="The select function is called."; 
} 
</script> 
</head> 
<body> 
<form> 
    <input type="text" name="txt" /> 
    <input type="button" name="insert" value="insert" onclick="insert()" /> 
    <input type="button" name="select" value="select" onclick="select()" /> 
</form> 
<p id="demo"></p> 
</body> 
</html> 
-3
<input type="button" name="insert" value="insert" onclick="insert()" /> 
<input type="button" name="select" value="select" onclick="select()" /> 

Изменить твое к этому, он должен работать.

+0

Это php-функции, а не javascripts для вызова с клиентской стороны. поэтому им необходимо, чтобы POST отправил запрос на сервер для выполнения этих запросов изнутри php-файла. –

1

Вот пример, который вы можете использовать:

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

Используйте рекурсивный вызов, где форма действия называет себя. Затем добавьте 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> 
9

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

<?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 документе

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 
 

 
} 
 
} 
 
?>

3

я застрял в этом и я решил это с помощью Скрытого поля

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

в ценности, вы можете добавить whateve г вы хотите добавить

в test.php вы можете получить значение через $ _POST [ID]

10

Вы должны сделать кнопку называть ту же страницу и в проверке 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  
    } 
?> 
Смежные вопросы