我正在寻找一个简单的解决方案,仅在单击a-tag时调用PHP 函数。
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
更新: html 和 PHP 代码在同一个 PHP 文件中
我正在寻找一个简单的解决方案,仅在单击a-tag时调用PHP 函数。
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
更新: html 和 PHP 代码在同一个 PHP 文件中
首先,了解您有三种语言协同工作:
PHP:它只由服务器运行并响应点击链接(GET)或提交表单(POST)等请求。
HTML & JavaScript:它只能在某人的浏览器中运行(不包括 NodeJS)。
我假设您的文件看起来像:
<!DOCTYPE HTML>
<html>
<?php
function runMyFunction() {
echo 'I just ran a php function';
}
if (isset($_GET['hello'])) {
runMyFunction();
}
?>
Hello there!
<a href='index.php?hello=true'>Run PHP Function</a>
</html>
因为 PHP 只响应请求(GET、POST、PUT、PATCH 和 DELETE,通过 $_REQUEST),所以即使它们在同一个文件中,这也是您必须运行 PHP 函数的方式。这为您提供了一定程度的安全性,“我应该为这个用户运行这个脚本吗?”。
如果您不想刷新页面,您可以通过称为异步 JavaScript 和 XML (AJAX) 的方法向 PHP 发出请求而无需刷新。
不过,这是您可以在 YouTube 上查找的内容。只需搜索“jquery ajax”
我向任何刚开始的新手推荐 Laravel:http: //laravel.com/
在javascript中,制作一个ajax函数,
function myAjax() {
$.ajax({
type: "POST",
url: 'your_url/ajax.php',
data:{action:'call_this'},
success:function(html) {
alert(html);
}
});
}
然后从html调用,
<a href="" onclick="myAjax()" class="deletebtn">Delete</a>
在你的 ajax.php 中,
if($_POST['action'] == 'call_this') {
// call removeday() here
}
您必须通过AJAX来执行此操作。我强烈建议你使用 jQuery 来让这对你更容易......
$("#idOfElement").on('click', function(){
$.ajax({
url: 'pathToPhpFile.php',
dataType: 'json',
success: function(data){
//data returned from php
}
});
)};
如果这是您的按钮,则可以使用相当简单的 php 来完成
<input type="submit" name="submit>
这是你的 php 代码
if(isset($_POST["submit"])) { php code here }
当单击按钮时发生提交获取发布时调用代码获取。
无需重新加载页面的解决方案
<?php
function removeday() { echo 'Day removed'; }
if (isset($_GET['remove'])) { return removeday(); }
?>
<!DOCTYPE html><html><title>Days</title><body>
<a href="" onclick="removeday(event)" class="deletebtn">Delete</a>
<script>
async function removeday(e) {
e.preventDefault();
document.body.innerHTML+= '<br>'+ await(await fetch('?remove=1')).text();
}
</script>
</body></html>
这是 AJAX 的替代方案,但没有 jQuery,只有常规的 JavaScript:
将此添加到您要从中调用操作的第一个/主 php 页面,但将其从潜在a
标签(超链接)更改为button
元素,因此它不会被任何机器人或恶意应用程序(或其他)点击。
<head>
<script>
// function invoking ajax with pure javascript, no jquery required.
function myFunction(value_myfunction) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("results").innerHTML += this.responseText;
// note '+=', adds result to the existing paragraph, remove the '+' to replace.
}
};
xmlhttp.open("GET", "ajax-php-page.php?sendValue=" + value_myfunction, true);
xmlhttp.send();
}
</script>
</head>
<body>
<?php $sendingValue = "thevalue"; // value to send to ajax php page. ?>
<!-- using button instead of hyperlink (a) -->
<button type="button" onclick="value_myfunction('<?php echo $sendingValue; ?>');">Click to send value</button>
<h4>Responses from ajax-php-page.php:</h4>
<p id="results"></p> <!-- the ajax javascript enters returned GET values here -->
</body>
单击时button
,onclick
使用 head 的 javascript 函数$sendingValue
通过 ajax 发送到另一个 php 页面,就像之前的许多示例一样。另一个页面ajax-php-page.php
检查 GET 值并返回print_r
:
<?php
$incoming = $_GET['sendValue'];
if( isset( $incoming ) ) {
print_r("ajax-php-page.php recieved this: " . "$incoming" . "<br>");
} else {
print_r("The request didn´t pass correctly through the GET...");
}
?>
然后返回来自的响应print_r
并显示为
document.getElementById("results").innerHTML += this.responseText;
+=
填充并添加到现有的 html 元素,删除刚刚+
更新并替换 htmlp
元素的现有内容"results"
。
尝试做这样的事情:
<!--Include jQuery-->
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function doSomething() {
$.get("somepage.php");
return false;
}
</script>
<a href="#" onclick="doSomething();">Click Me!</a>
这是最简单的方法。如果表单是通过 post 发布的,请执行 php 函数。请注意,如果您想异步执行功能(无需重新加载页面),那么您将需要 AJAX。
<form method="post">
<button name="test">test</button>
</form>
<?php
if(isset($_POST['test'])){
//do php stuff
}
?>
试试这个,它会正常工作的。
<script>
function echoHello(){
alert("<?PHP hello(); ?>");
}
</script>
<?PHP
FUNCTION hello(){
echo "Call php function on onclick event.";
}
?>
<button onclick="echoHello()">Say Hello</button>