使用onclick执行PHP函数


92

我正在寻找一种仅单击a-tag即可调用PHP函数的简单解决方案。

PHP:

function removeday() { ... }

HTML:

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

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


5
HTML运行在客户端上运行的Javascript函数。PHP在服务器上运行。您需要了解AJAX。
Barmar

但是为什么要使用AJAX?整个代码在同一个PHP文件中。
Mike

1
为什么选择AJAX?好吧,为了找出答案,您可以简单地运行任何php脚本并查看其执行代码。再次-Ajax是您可以做到这一点的唯一方法

2
如果使用<a role="button" href="?action=removeday" class="debatebtn">Delete</a>捕获动作并运行类似于的removeday()函数,则选中的答案将看起来像一个按钮if($action == 'removeday'){ removeday(); }。我知道这很晚,但是我认为它仍然可以帮助某人解决此问题。C§
CSS

Answers:


142

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

  • 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仅响应请求(通过$ _REQUEST进行的GET,POST,PUT,PATCH和DELETE),因此即使它们在同一文件中,这也是运行PHP函数的方式。这为您提供了一定程度的安全性,“是否应该为此用户运行此脚本?”。

如果您不想刷新页面,则可以通过称为异步JavaScript和XML(AJAX)的方法向PHP发出请求而无需刷新。

那是您可以在YouTube上查找的内容。只需搜索“ jquery ajax”

我向任何新手推荐Laravel,以立即开始:http://laravel.com/


3
只是说一下,我假设您是PHP的新手,我想推荐laravel.com作为框架。我个人希望跳过整个“学习通用php”并直接使用功能强大的框架。这也是我现在使用的那个。
Michael J. Calkins 2013年

5
伙计,非常感谢,您的回答不仅帮助我解决了这个疑问,而且还使我更好地了解了php!再次感谢你!
感受噪音

谢谢,我正在寻找这个。如何使用wordpress实现此功能
Firefog,2015年

1
谢谢您,由于您的提及,我将开始专注于laravel。
Mohamed Abulnasr'5

1
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了这个问题,因此很明显,目标是不刷新就执行一个动作。¬_¬
Synetech

38

在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是一个别名,应该在较新的版本上使用。
亚历杭德罗·纳瓦

1
Vanilla JavaScript中还提供了相同的解决方案,可以帮助初学者更好。我说这是作为JavaScript的经验丰富的用户,他曾经是一个完整的初学者,但精通PHP。
肯·英格拉姆

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/


1
为什么要使用AJAX?这将是相同的PHP文件(我更新了我的问题)
Mike

3
由于@Barmar的解释,它无法那样工作。您需要将php放在一个单独的文件中,然后在AJAX请求中引用该文件。
AO

1
“ URL:”参数引用外部php文件,如何在同一文件中引用php函数?
Joe Doe 2014年

2
@JoeDoe您不能将函数放置在外部文件中
AO

11

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

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

这是你的PHP代码

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

当单击按钮时发生提交获取的代码,该代码将被调用。


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>

1

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

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

0

这是最简单的方法。如果表单是通过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这表明他正是想要的。¬_¬
Synetech

0

这是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's 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元素,除去+刚刚更新和替换HTML的现有内容p元素"results"


-3

试试这个,它将正常工作。

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

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

?>

<button onclick="echoHello()">Say Hello</button>

2
不工作(即使它清理干净),但此外,它不能工作。PHP代码在加载时经过了预处理。它不在运行时运行。
Synetech

您可能没有读过问题,或者没有测试代码,因为这无法正常工作。
PizzaGuy先生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.