[英]Call PHP on button click
我有以下按鈕:
<input type="submit" name="kudos_button" value="★ Give kudos"/>'
出於測試目的,我在</html>
之后制作了一個 PHP 腳本,如下所示:
<?php
if(isset($_POST['kudos_button'])){
$message = "Pressed";
echo "<script type='text/javascript'>alert('$message');</script>";
//and then execute a sql query here
}
?>
一切正常,按下kudos_button
時會顯示消息。 但問題是當用戶刷新頁面時,消息又出現了。 我收到以下消息:
您正在查找的頁面使用了您輸入的信息。 返回該頁面可能會導致您重復執行的任何操作。 你想繼續嗎?
有什么提示可以避免這種情況,因此刷新時按鈕不會再次按下?
這是我的解決方案:
<form name="form1" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<input type="submit" name="kudos_button" value="★ Give kudos"/>
</form>
<?php
if(isset($_POST['kudos_button'])){
$message = "Pressed";
echo "<script type='text/javascript'>alert('$message');</script>";
//and then execute a sql query here
}
?>
應該可以正常工作。
但是您應該知道 PHP 無論警報如何都能正常工作。 無論哪種方式,您的 SQL 語句將在按下按鈕后執行。
JavaScript 是基於客戶端的腳本,PHP 是基於服務器的腳本是兩個不同的東西。
- - 編輯 - -
我構建了一個基於 Function 的 PHP 腳本,它正在調用警報並感覺 5 秒鍾以休眠,以便可以顯示警報。
這是我完成的解決方案:
<form name="form1" method="POST" action="./" >
<input type="submit" name="kudos_button" value="★ Give kudos"/>
</form>
<?php
if(isset($_POST['kudos_button'])){
session_start();
$_SESSION["Button_onClick"] = 1;
$message = "Pressed";
if ($_SESSION["Button_onClick"] == 1) {
Button_onClick();
$_SESSION["Button_onClick"] = 0;
if ($_SESSION["Button_onClick"] == 0) {
BackLoop();
}
}
}
Function Button_onClick(){
$message = "Pressed";
echo ("
<script type='text/javascript'>
alert('$message');
</script>
");
SQL_Statement();
}
Function SQL_Statement() {
//and then execute a sql query here
}
Function BackLoop() {
session_destroy();
echo("
<script>
setTimeout(function () {
//Redirect with JavaScript
window.location.href= './';
}, 5000);
</script>
");
}
?>
以防萬一有人有問題。 我添加了 setTimeout function 以便我可以在網站上看到更改。 如果您在警報(用戶案例)之后不想要任何信息,您可以刪除 function。 你只需要window.location.href= './';
.
如果您不想導航到新頁面,則不能使用常規表單提交。
用 JavaScript 代替 HTTP 請求。
例如
const form = document.querySelector("form");
const responseHandler = response => response.json();
const dataHandler = data => {
alert(data.message);
};
const submitHandler = event => {
event.preventDefault()
const data = new FormData(form);
const url = "/path/to/dedicated/webservice/that/returns/json";
fetch(url, { method: "POST", body: data }).then(responseHandler).then(dataHandler);
};
form.addEventListener("submit", submitHandler);
MDN 有使用 fetch 的指南。
然后您的服務器端代碼將如下所示:
<?php
// Execute a sql query here
header("Content-Type: application/json");
$message = "Pressed";
echo json_encode( [ message => $message ] );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.