110

我正在寻找一个简单的解决方案,仅在单击a-tag时调用PHP 函数

PHP:

function removeday() { ... }

HTML:

<a href="" onclick="removeday()" class="deletebtn">Delete</a>

更新: html 和 PHP 代码在同一个 PHP 文件中

4

9 回答 9

160

首先,了解您有三种语言协同工作:

  • 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/

于 2013-10-11T16:53:02.423 回答
43

在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
}
于 2013-10-11T16:38:13.857 回答
11

您必须通过AJAX来执行此操作。我强烈建议你使用 jQuery 来让这对你更容易......

$("#idOfElement").on('click', function(){

    $.ajax({
       url: 'pathToPhpFile.php',
       dataType: 'json',
       success: function(data){
            //data returned from php
       }
    });
)};

http://api.jquery.com/jQuery.ajax/

于 2013-10-11T16:35:03.537 回答
11

如果这是您的按钮,则可以使用相当简单的 php 来完成

<input type="submit" name="submit>

这是你的 php 代码

if(isset($_POST["submit"])) { php code here }

当单击按钮时发生提交获取发布时调用代码获取。

于 2014-02-10T18:29:44.787 回答
4

无需重新加载页面的解决方案

<?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>
于 2019-04-12T11:05:31.640 回答
2

这是 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>

单击时buttononclick使用 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"

于 2020-04-15T22:51:46.373 回答
1

尝试做这样的事情:

<!--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>
于 2015-08-01T08:44:02.407 回答
1

这是最简单的方法。如果表单是通过 post 发布的,请执行 php 函数。请注意,如果您想异步执行功能(无需重新加载页面),那么您将需要 AJAX。

<form method="post">
    <button name="test">test</button>
</form>

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>
于 2018-06-04T06:38:01.703 回答
-3

试试这个,它会正常工作的。

<script>
function echoHello(){
 alert("<?PHP hello(); ?>");
 }
</script>

<?PHP
FUNCTION hello(){
 echo "Call php function on onclick event.";
 }

?>

<button onclick="echoHello()">Say Hello</button>
于 2018-06-05T05:23:41.873 回答