a- タグがクリックされたときにのみPHP関数を呼び出す簡単なソリューションを探しています。
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
更新: HTMLとPHPコードは同じPHPファイルにあります
a- タグがクリックされたときにのみPHP関数を呼び出す簡単なソリューションを探しています。
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(); }
。私はこれが遅いことを知っていますが、それでもこの問題で誰かを助けることができると思います。ć§
回答:
まず、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/
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
質問に含めたので、更新せずにアクションを実行することが目標であることはかなり明らかです。¬_¬
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
}
type
1.9.0より前のjQueryで使用する必要がありますmethod
が、エイリアスであり、新しいバージョンで使用する必要があります。
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>
これが最も簡単な方法です。フォームが投稿を介して投稿されている場合は、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
は彼がまさに望んでいることを示しているでしょう。¬_¬
以下は、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"
。
これを試してみてください。
<script>
function echoHello(){
alert("<?PHP hello(); ?>");
}
</script>
<?PHP
FUNCTION hello(){
echo "Call php function on onclick event.";
}
?>
<button onclick="echoHello()">Say Hello</button>