Запустите функцию PHP на кнопке html

Мне нужно запустить некоторую функцию PHP при нажатии кнопки. Я знаю, что это не должно быть использование php, скорее js должен это сделать, но то, что мои функции делают при сборе данных с сервера, когда пользователь спрашивает об этом. В частности, он получает некоторые пользовательские данные и записывает их в файл, и пользователь должен решить, какие данные будут собраны.
Как я могу это сделать? Я видел сообщение Запустить файл PHP на кнопке Click, но я все еще не уверен, как его использовать.
Я учусь, поэтому, пожалуйста, не будьте слишком суровы.

Я пробовал onclick() и всевозможные вещи, но это не привело к чему-либо полезному

Ответ 1

Файл php запускается всякий раз, когда вы обращаетесь к нему через HTTP-запрос: GET, POST, PUT.

Вы можете использовать JQuery/Ajax для отправки запроса нажатием кнопки или даже просто изменить URL-адрес браузера, чтобы перейти к php-адресу.

В зависимости от данных, отправленных в POST/GET, вы можете иметь оператор switch, выполняющий другую функцию.

Задание функции через GET

Здесь вы можете использовать код: Как вызвать функцию PHP из строки, хранящейся в переменной, а также оператор switch для автоматического вызова соответствующей функции в зависимости от отправленных данных.

Итак, на стороне PHP вы можете иметь что-то вроде этого:

<?php

//see http://php.net/manual/en/function.call-user-func-array.php how to use extensively
if(isset($_GET['runFunction']) && function_exists($_GET['runFunction']))
call_user_func($_GET['runFunction']);
else
echo "Function not found or wrong input";

function test()
{
echo("test");
}

function hello()
{
echo("hello");
}

?>

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

http://127.0.0.1/test.php?runFunction=hellodddddd

приводит к:

Function not found or wrong input

http://127.0.0.1/test.php?runFunction=hello

приводит к:

hello

Отправка данных

Запрос GET через JQuery

Смотрите: http://api.jquery.com/jQuery.get/

$.get("test.cgi", { name: "John"})
.done(function(data) {
  alert("Data Loaded: " + data);
});

Запрос POST через JQuery

Смотрите: http://api.jquery.com/jQuery.post/

$.post("test.php", { name: "John"} );

Запрос GET через расположение Javascript

Смотрите: http://www.javascripter.net/faq/buttonli.htm

<input type=button 
value="insert button text here"
onClick="self.location='Your_URL_here.php?name=hello'">

Чтение данных (PHP)

См. PHP Turotial для чтения сообщения и получения: http://www.tizag.com/phpT/postget.php

Полезные ссылки

http://php.net/manual/en/function.call-user-func.php http://php.net/manual/en/function.function-exists.php

Ответ 2

Если вы хотите сделать запрос на сервер, вы должны использовать AJAX, чтобы вы могли отправлять свои параметры на сервер, и он может запускать любые php, которые вы хотите, с этими параметрами.

Пример с чистым javascript:

<input type="text" id="name" value="..."/>
<input type="text" id="location" value="..."/>
<input type="button" onclick="ajaxFunction();" value="Submit" />
<div id="ajaxDiv"></div>
<script type="text/javascript">    
    function ajaxFunction(){
        var ajaxRequest;  // The variable that makes Ajax possible!

        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("Your browser broke!");
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var ajaxDisplay = document.getElementById('ajaxDiv');
                ajaxDisplay.innerHTML = ajaxRequest.responseText;
            }
        }
        var name = document.getElementById('name').value;
        var location = document.getElementById('location').value;
        var queryString = "?name=" + name + "&location=" + location;
        ajaxRequest.open("POST", "some.php" + queryString, true);
        ajaxRequest.send(null); 
    }
</script>

Пример с jQuery Ajax: http://api.jquery.com/jQuery.ajax/

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

У вас может быть один файл с функциями, называемыми например functions.php

functions.php

<?php
  myFunction($Name, $Location) {
      // etc...
  }
  myFunction2() {
  }
  // ... many functions
?>

some.php

<?php include("functions.php");    
$Name = $_POST['name'];
$Location = $_POST['location'];

myFunction($Name, $Location);

// make what you want with these variables...?>

Ответ 3

Используйте ajax, простой пример,

HTML

<button id="button">Get Data</button>

Javascript

var button = document.getElementById("button");

button.addEventListener("click" ajaxFunction, false);

var ajaxFunction = function () {
    // ajax code here
}

Альтернативно посмотрите jquery ajax http://api.jquery.com/jQuery.ajax/

Ответ 4

<?php
if (isset($_POST['str'])){
function printme($str){
echo $str;
}

printme("{$_POST['str']}");
}
?>
<form action="<?php $_PHP_SELF ?>" method="POST">
<input type="text" name="str" /> <input type="submit" value="Submit"/>
</form>

Ответ 5

Используйте AJAX-запрос в вашем файле PHP, а затем отобразите результат на своей странице без перезагрузки.

http://api.jquery.com/load/ Это простое решение, если вам не нужны данные POST.

Ответ 6

Это зависит от того, какую функцию вы хотите запустить. Если вам нужно что-то сделать на стороне сервера, например, запросить базу данных или установить что-то в сеансе или что-то, что не может быть сделано на стороне клиента, вам нужен AJAX, иначе вы можете сделать это на стороне клиента с помощью JavaScript. Не делайте работу сервера, когда вы можете делать то, что вам нужно делать на стороне клиента.

jQuery предоставляет простой способ сделать ajax: http://api.jquery.com/jQuery.ajax/