【问题标题】:Execute PHP function with onclick使用 onclick 执行 PHP 函数
【发布时间】:2013-10-19 19:42:39
【问题描述】:

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

PHP:

function removeday() { ... }

HTML:

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

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

【问题讨论】:

  • HTML 运行 Javascript 函数,这些函数在客户端上运行。 PHP 在服务器上运行。您需要了解 AJAX。
  • 但为什么是 AJAX?整个代码都在同一个 PHP 文件中。
  • 为什么选择 AJAX?好吧,为了找出答案,您可以简单地运行任何 php 脚本并查看其执行代码。再说一遍 - Ajax 是您可以做到这一点的唯一方法
  • 如果您使用&lt;a role="button" href="?action=removeday" class="debatebtn"&gt;Delete&lt;/a&gt; 捕获操作并运行类似于if($action == 'removeday'){ removeday(); } 的removeday() 函数,则检查的答案将看起来像一个按钮。我知道这已经晚了,但我认为它仍然可以帮助解决这个问题的人。 C§

标签: javascript php ajax onclick


【解决方案1】:

首先,了解您有三种语言一起使用:

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

【讨论】:

  • 顺便提一下,我假设您对 PHP 还很陌生,我想推荐 laravel.com 作为框架。就我个人而言,我很想跳过整个“学习通用 php”并直接进入一个强大的框架。这也是我现在使用的。
  • 伙计,非常感谢您,您的回答不仅帮助我解决了这个疑问,而且还让我对 php 的理解更加深入!再次感谢您!
  • 谢谢,我正在找这个。如何使用 wordpress 实现这一点
  • 感谢您的提及,我将开始专注于 laravel。
  • If you don't want to refresh the page, you can make a request to PHP without refreshing via a method called Asynchronous JavaScript and XML (AJAX). 好吧,他确实在问题中包含了onclick,所以很明显目标是在不刷新的情况下执行操作。 ¬_¬
【解决方案2】:

在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
}

【讨论】:

  • 澄清一下:type 应该在早于 1.9.0 的 jQuery 中使用,而 method 是别名,应该在较新的版本中使用。
  • Vanilla JavaScript 中也提供了相同的解决方案,可以更好地帮助初学者。我这样说是作为一个更有经验的 JavaScript 用户,他曾经是一个完全的初学者,但精通 PHP。
【解决方案3】:

您必须通过 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/

【讨论】:

  • 为什么是 AJAX?这将是同一个 PHP 文件(我更新了我的问题)
  • 由于@Barmar 的解释,它不能那样工作。您需要将 php 放在一个单独的文件中,然后在您的 AJAX 请求中引用该文件。
  • “url:”参数引用了外部php文件,如何在同一个文件中引用php函数?
  • @JoeDoe 你不能,把函数放在一个外部文件中
【解决方案4】:

它可以用相当简单的 php 来完成 如果这是你的按钮

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

这是你的 php 代码

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

当点击按钮时,提交 get 发布时调用代码 get。

【讨论】:

    【解决方案5】:

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

    <?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>
    

    【讨论】:

      【解决方案6】:

      这是 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 函数通过 ajax 将$sendingValue 发送到另一个 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 元素,删除 + 只是更新和替换 html p 元素 "results" 的现有内容。

      【讨论】:

        【解决方案7】:

        尝试做这样的事情:

        <!--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>
        

        【讨论】:

          【解决方案8】:

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

          <form method="post">
              <button name="test">test</button>
          </form>
          
              <?php
              if(isset($_POST['test'])){
                //do php stuff  
              }
              ?>
          

          【讨论】:

          • Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX. onclick 表明这正是他想要的。 ¬_¬
          【解决方案9】:

          试试这个,它会很好用。

          <script>
          function echoHello(){
           alert("<?PHP hello(); ?>");
           }
          </script>
          
          <?PHP
          FUNCTION hello(){
           echo "Call php function on onclick event.";
           }
          
          ?>
          
          <button onclick="echoHello()">Say Hello</button>
          

          【讨论】:

          • 这不起作用(即使你清理它),而且它不能起作用。 PHP代码在加载时进行预处理;它不在运行时运行。
          • 要么你没有阅读这个问题,要么你没有测试你的代码,因为这不起作用。
          猜你喜欢
          • 2020-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-17
          相关资源
          最近更新 更多