Jalankan fungsi PHP dengan onclick

92

Saya mencari solusi sederhana untuk memanggil fungsi PHP hanya ketika tag- diklik.

PHP:

function removeday() { ... }

HTML:

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

UPDATE: kode html dan PHP ada di file PHP yang sama

Mike
sumber
5
HTML menjalankan fungsi Javascript, yang dijalankan di klien. PHP berjalan di server. Anda perlu belajar tentang AJAX.
Barmar
tapi kenapa AJAX? seluruh kode ada di file PHP yang sama.
Mike
1
Mengapa AJAX? Nah, untuk mengetahuinya, Anda cukup menjalankan skrip php dan melihat kode eksekusinya. Sekali lagi - Ajax adalah satu-satunya cara untuk melakukannya .
Yang
2
Jawaban yang dicentang akan berfungsi seperti tombol jika Anda menggunakan <a role="button" href="?action=removeday" class="debatebtn">Delete</a>tempat tindakan ditangkap dan menjalankan fungsi removeay () yang mirip dengan if($action == 'removeday'){ removeday(); }. Saya tahu ini terlambat, tetapi saya pikir ini masih dapat membantu seseorang dengan masalah ini. C§
CSS

Jawaban:

142

Pertama, pahami bahwa Anda memiliki tiga bahasa yang bekerja bersama:

  • PHP: Ini hanya berjalan oleh server dan menanggapi permintaan seperti mengklik tautan (GET) atau mengirimkan formulir (POST).

  • HTML & JavaScript: Ini hanya berjalan di browser seseorang (tidak termasuk NodeJS).

Saya berasumsi file Anda terlihat seperti ini:

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

Karena PHP hanya merespon permintaan (GET, POST, PUT, PATCH, dan DELETE melalui $ _REQUEST), ini adalah bagaimana Anda harus menjalankan fungsi PHP meskipun mereka berada dalam file yang sama. Ini memberi Anda tingkat keamanan, "Haruskah saya menjalankan skrip ini untuk pengguna ini atau tidak?".

Jika tidak ingin memuat ulang halaman, Anda dapat membuat permintaan ke PHP tanpa menyegarkan melalui metode yang disebut Asynchronous JavaScript and XML (AJAX).

Itu adalah sesuatu yang bisa Anda cari di YouTube. Cari saja "jquery ajax"

Saya merekomendasikan Laravel kepada siapa pun yang baru untuk memulai dengan benar: http://laravel.com/

Michael J. Calkins
sumber
3
Hanya untuk menyebutkan, saya berasumsi Anda cukup baru mengenal PHP, saya ingin merekomendasikan laravel.com sebagai kerangka kerja. Secara pribadi saya ingin sekali melewatkan seluruh 'belajar php generik' dan langsung menuju kerangka kerja yang kuat. Ini yang saya gunakan sekarang juga.
Michael J. Calkins
5
Sobat, terima kasih banyak, jawaban Anda tidak hanya membantu saya dengan keraguan ini, tetapi juga membuat saya memahami php jauh lebih baik! Terima kasih lagi!
Rasakan Kebisingan
Terima kasih saya mencari ini. Bagaimana saya bisa menerapkan ini dengan wordpress
Firefog
1
Terima kasih, saya akan mulai berkonsentrasi pada laravel karena Anda disebutkan.
Mohamed Abulnasr
2
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).Yah dia memang termasuk onclickdalam pertanyaan, jadi cukup jelas tujuannya adalah untuk melakukan tindakan tanpa penyegaran. ¬_¬
Synetech
39

Di javascript, buat fungsi ajax,

function myAjax() {
      $.ajax({
           type: "POST",
           url: 'your_url/ajax.php',
           data:{action:'call_this'},
           success:function(html) {
             alert(html);
           }

      });
 }

Kemudian panggil dari html,

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

Dan di ajax.php Anda,

if($_POST['action'] == 'call_this') {
  // call removeday() here
}
devo
sumber
Hanya untuk memperjelas: typeharus digunakan di jQuery sebelum 1.9.0, sedangkan methodmerupakan alias dan harus digunakan pada versi yang lebih baru.
Alejandro Nava
1
Solusi yang sama juga disediakan di Vanilla JavaScript membantu pemula menjadi lebih baik. Saya mengatakan ini sebagai pengguna JavaScript yang lebih berpengalaman yang dulunya adalah pemula lengkap tetapi mahir dengan PHP.
Ken Ingram
12

Ini dapat dilakukan dan dengan php yang agak sederhana jika ini adalah tombol Anda

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

dan ini adalah kode php Anda

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

kode dipanggil saat submit get diposting yang terjadi saat tombol diklik.

Vamps
sumber
11

Anda harus melakukan ini melalui AJAX . SAYA SANGAT merekomendasikan Anda menggunakan jQuery untuk membuat ini lebih mudah bagi Anda ....

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

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

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

AO
sumber
1
mengapa AJAX? itu akan menjadi file PHP yang sama (saya memperbarui pertanyaan saya)
Mike
3
Karena yang dijelaskan @Barmar, tidak berfungsi seperti itu. Anda akan ingin menempatkan php dalam file terpisah, kemudian mereferensikan file itu dalam permintaan AJAX Anda.
AO
1
Parameter "url:" mereferensikan file php eksternal, bagaimana saya bisa mereferensikan fungsi php dalam file yang sama?
Joe Doe
2
@JoeDoe Anda tidak bisa, tempatkan fungsi dalam file eksternal
AO
2

Solusi tanpa memuat ulang halaman

<?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>
Kamil Kiełczewski
sumber
1

Coba lakukan sesuatu seperti ini:

<!--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>
Simpel
sumber
1

Berikut ini alternatif dengan AJAX tetapi tanpa jQuery, hanya JavaScript biasa:

Tambahkan ini ke halaman php pertama / utama, tempat Anda ingin memanggil tindakan, tetapi ubah dari atag potensial (hyperlink) ke buttonelemen, sehingga tidak diklik oleh bot atau aplikasi berbahaya (atau apa pun).

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

Ketika buttondiklik, onclickgunakan fungsi javascript head untuk mengirim $sendingValuemelalui ajax ke halaman-php lain, seperti banyak contoh sebelumnya. Halaman ajax-php-page.phplain`` memeriksa nilai GET dan kembali dengan 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...");
  }

?>

Tanggapan dari print_rkemudian dikembalikan dan ditampilkan dengan

document.getElementById("results").innerHTML += this.responseText;

The +=populates dan menambah elemen html yang ada, menghapus +hanya update dan mengganti isi yang ada dari html pelemen "results".

andiOak
sumber
0

Ini adalah cara yang paling mudah. Jika formulir dikirim melalui pos, lakukan fungsi php. Perhatikan bahwa jika Anda ingin menjalankan fungsi secara asinkron (tanpa perlu memuat ulang halaman), Anda memerlukan AJAX.

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

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>
csandreas1
sumber
Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.Nah itu onclickakan menunjukkan bahwa itulah yang dia inginkan. ¬_¬
Synetech
-3

Coba ini akan bekerja dengan baik.

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

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

?>

<button onclick="echoHello()">Say Hello</button>
Vidya
sumber
2
Itu tidak berhasil (bahkan jika Anda membersihkannya), tetapi lebih dari itu, tidak dapat bekerja. Kode PHP diproses sebelumnya saat dimuat; itu tidak dijalankan saat runtime.
Synetech
Entah Anda tidak membaca pertanyaan atau tidak menguji kode Anda karena ini tidak akan berhasil.
Mr PizzaGuy