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
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
<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§
Jawaban:
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/
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 onclick
dalam pertanyaan, jadi cukup jelas tujuannya adalah untuk melakukan tindakan tanpa penyegaran. ¬_¬
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
}
type
harus digunakan di jQuery sebelum 1.9.0, sedangkan method
merupakan alias dan harus digunakan pada versi yang lebih baru.
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
}
});
)};
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>
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 a
tag potensial (hyperlink) ke button
elemen, 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 button
diklik, onclick
gunakan fungsi javascript head untuk mengirim $sendingValue
melalui ajax ke halaman-php lain, seperti banyak contoh sebelumnya. Halaman ajax-php-page.php
lain`` 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_r
kemudian 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 p
elemen "results"
.
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
}
?>
Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.
Nah itu onclick
akan menunjukkan bahwa itulah yang dia inginkan. ¬_¬
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>