Запустите функцию PHP при нажатии кнопки html
Мне нужно запустить некоторую функцию PHP при нажатии кнопки. Я знаю, что это не должно использоваться php, скорее это должен делать js, но то, что мои функции делают при сборе данных с сервера, когда пользователь спрашивает об этом. В частности, он получает некоторые пользовательские данные и записывает их в файл, и пользователь должен решить, какие данные будут собраны.
Как я могу это сделать? Я видел сообщение Запуск PHP-файла При нажатии кнопки , но я все еще не уверен, как его использовать.
Я учусь, так что, пожалуйста, не надо будьте слишком суровы
Я пробовал onclick()
и всякие другие вещи, но это не привело ни к чему полезному
6 answers
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");
}
?>
И вы можете сделать простейший запрос get, используя адресную строку в качестве тестирования:
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
Отправка данных
ПОЛУЧИТЬ запрос через jQuery
См.: http://api.jquery.com/jQuery.get/
$.get("test.cgi", { name: "John"})
.done(function(data) {
alert("Data Loaded: " + data);
});
Отправить запрос через jQuery
См.: http://api.jquery.com/jQuery.post/
$.post("test.php", { name: "John"} );
ПОЛУЧИТЬ запрос через расположение 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
Если вы хотите сделать запрос на сервер, вам следует использовать 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...?>
Используйте 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/
<?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>
Используйте AJAX-запрос в вашем PHP-файле, затем отобразите результат на своей странице без какой-либо перезагрузки.
Http://api.jquery.com/load / Это простое решение, если вам не нужны никакие почтовые данные.
Это зависит от того, какую функцию вы хотите запустить. Если вам нужно что-то сделать на стороне сервера, например, запросить базу данных или настроить что-то в сеансе или что-то, что невозможно сделать на стороне клиента, вам нужен AJAX, иначе вы можете сделать это на стороне клиента с помощью JavaScript. Не заставляйте сервер работать, когда вы можете делать то, что вам нужно, на стороне клиента.
JQuery предоставляет простой способ сделать ajax: http://api.jquery.com/jQuery.ajax/