ฉันกำลังค้นหาวิธีง่ายๆในการเรียกใช้ฟังก์ชัน PHPเฉพาะเมื่อมีการคลิกa-tag
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
อัปเดต:โค้ด html และ PHP อยู่ในไฟล์ PHP เดียวกัน
ฉันกำลังค้นหาวิธีง่ายๆในการเรียกใช้ฟังก์ชัน PHPเฉพาะเมื่อมีการคลิกa-tag
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
อัปเดต:โค้ด html และ PHP อยู่ในไฟล์ PHP เดียวกัน
<a role="button" href="?action=removeday" class="debatebtn">Delete</a>
การกระทำที่ถูกจับได้และวิ่ง removeday () if($action == 'removeday'){ removeday(); }
ฟังก์ชั่นที่คล้ายกับ ฉันรู้ว่ามันช้าไป แต่ฉันคิดว่ามันยังสามารถช่วยคนอื่นในเรื่องนี้ได้ C§
คำตอบ:
ขั้นแรกเข้าใจว่าคุณมีสามภาษาที่ทำงานร่วมกัน:
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 แม้ว่าจะอยู่ในไฟล์เดียวกันก็ตาม ซึ่งจะช่วยให้คุณมีระดับความปลอดภัย "ฉันควรเรียกใช้สคริปต์นี้สำหรับผู้ใช้รายนี้หรือไม่"
หากคุณไม่ต้องการรีเฟรชหน้านี้คุณสามารถขอ PHP ได้โดยไม่ต้องรีเฟรชด้วยวิธีการที่เรียกว่า Asynchronous JavaScript และ XML (AJAX)
นั่นคือสิ่งที่คุณสามารถค้นหาได้ใน YouTube เพียงค้นหา "jquery ajax"
ฉันแนะนำ Laravel ให้กับทุกคนที่เพิ่งเริ่มต้นได้ทันที: 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).
เขารวมonclick
ไว้ในคำถามด้วยดังนั้นจึงค่อนข้างชัดเจนว่าเป้าหมายคือการดำเนินการโดยไม่รีเฟรช ¬_¬
ในจาวาสคริปต์ให้สร้างฟังก์ชัน 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
ควรใช้ใน jQuery ก่อนหน้า 1.9.0 ในขณะที่method
เป็นนามแฝงและควรใช้กับเวอร์ชันที่ใหม่กว่า
สามารถทำได้และด้วย php ที่ค่อนข้างง่ายหากนี่คือปุ่มของคุณ
<input type="submit" name="submit>
และนี่คือรหัส php ของคุณ
if(isset($_POST["submit"])) { php code here }
รหัสถูกเรียกเมื่อโพสต์ของ submit get ซึ่งจะเกิดขึ้นเมื่อคลิกปุ่ม
คุณจะต้องทำเช่นนี้ผ่านAJAX ฉันขอแนะนำให้คุณใช้ jQuery เพื่อทำให้สิ่งนี้ง่ายขึ้นสำหรับคุณ ....
$("#idOfElement").on('click', function(){
$.ajax({
url: 'pathToPhpFile.php',
dataType: 'json',
success: function(data){
//data returned from php
}
});
)};
วิธีแก้ไขโดยไม่ต้องโหลดหน้าซ้ำ
<?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>
ลองทำสิ่งนี้:
<!--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>
นี่เป็นทางเลือกอื่นสำหรับ 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 js javascript เพื่อส่ง$sendingValue
ผ่าน ajax ไปยัง php-page อื่น ๆ ดังตัวอย่างก่อนหน้านี้ อีกหน้าหนึ่ง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;
+=
populates และเพิ่มองค์ประกอบ html ที่มีอยู่เอา+
การปรับปรุงเพียงและแทนที่เนื้อหาที่มีอยู่ของของ html องค์ประกอบp
"results"
นี่เป็นวิธีที่ง่ายที่สุดที่เป็นไปได้ หากโพสต์แบบฟอร์มผ่านโพสต์ให้ทำฟังก์ชัน 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
จะแสดงให้เห็นว่าสิ่งที่เขาต้องการ ¬_¬
ลองใช้วิธีนี้จะได้ผล
<script>
function echoHello(){
alert("<?PHP hello(); ?>");
}
</script>
<?PHP
FUNCTION hello(){
echo "Call php function on onclick event.";
}
?>
<button onclick="echoHello()">Say Hello</button>