onclickでPHP関数を実行する


92

a- タグがクリックされたときにのみPHP関数を呼び出す簡単なソリューションを探しています。

PHP:

function removeday() { ... }

HTML:

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

更新: HTMLとPHPコードは同じPHPファイルにあります


5
HTMLは、クライアント上で実行されるJavaScript関数を実行します。PHPはサーバー上で実行されます。AJAXについて学ぶ必要があります。
Barmar 2013年

しかし、なぜAJAXなのか?コード全体は同じPHPファイルにあります。
Mike

1
なぜAJAXなのか?それを見つけるために、単純に任意のphpスクリプトを実行し、その実行のコードを確認できます。繰り返しますが、Ajaxはそれを行うことができる唯一の方法です
ヤン

2
チェックされた回答は<a role="button" href="?action=removeday" class="debatebtn">Delete</a>、アクションがキャッチされた場所を使用し、と同様のRemoveday()関数を実行すると、ボタンのように見えますif($action == 'removeday'){ removeday(); }。私はこれが遅いことを知っていますが、それでもこの問題で誰かを助けることができると思います。ć§
CSS

回答:


142

まず、3つの言語が連携していることを理解してください。

  • 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をとてもよく理解させてくれました!ありがとうございました!
ノイズを感じる

おかげで私はこれを探しています。これをワードプレスで実装するにはどうすればよいですか
Firefog '26

1
ありがとうございます私はあなたの言及のためにララヴェルに集中し始めます。
Mohamed Abulnasr

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
}

明確にするために:type1.9.0より前のjQueryで使用する必要がありますmethodが、エイリアスであり、新しいバージョンで使用する必要があります。
Alejandro Nava 2017年

1
バニラJavaScriptでも提供される同じソリューションは、初心者をはるかによく助けます。これは、かつて完全な初心者でありながらPHPに精通したJavaScriptのより経験豊富なユーザーとしてこれを言います。
Ken Ingram

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 }

ボタンがクリックされたときに発生するsubmit getが投稿されると、コードが呼び出されます。


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

これが最も簡単な方法です。フォームが投稿を介して投稿されている場合は、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。この1の前に多くの例のように、別のphp-ページにAJAXを経由して。もう1つのページは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 2018

これは機能しないため、質問を読んでいないか、コードをテストしていません。
Mr. PizzaGuy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.