Szukam prostego rozwiązania, aby wywołać funkcję PHP tylko po kliknięciu tagu .
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
UPDATE: kod html i PHP znajdują się w tym samym pliku PHP
Szukam prostego rozwiązania, aby wywołać funkcję PHP tylko po kliknięciu tagu .
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
UPDATE: kod html i PHP znajdują się w tym samym pliku PHP
<a role="button" href="?action=removeday" class="debatebtn">Delete</a>miejsca, w którym akcja jest przechwycona, i uruchomisz funkcję removeay () podobną do if($action == 'removeday'){ removeday(); }. Wiem, że to późno, ale myślę, że nadal może pomóc komuś z tym problemem. C§
Odpowiedzi:
Po pierwsze, zrozum, że masz trzy języki współpracujące:
PHP: Działa tylko przez serwer i odpowiada na żądania, takie jak kliknięcie linku (GET) lub przesłanie formularza (POST).
HTML i JavaScript: działa tylko w czyjejś przeglądarce (z wyłączeniem NodeJS).
Zakładam, że twój plik wygląda mniej więcej tak:
<!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>
Ponieważ PHP odpowiada tylko na żądania (GET, POST, PUT, PATCH i DELETE za pośrednictwem $ _REQUEST), w ten sposób musisz uruchomić funkcję PHP, nawet jeśli znajdują się one w tym samym pliku. Zapewnia to poziom bezpieczeństwa: „Czy powinienem uruchomić ten skrypt dla tego użytkownika, czy nie?”.
Jeśli nie chcesz odświeżać strony, możesz wysłać żądanie do PHP bez odświeżania za pomocą metody o nazwie Asynchronous JavaScript and XML (AJAX).
To jest coś, co możesz sprawdzić na YouTube. Po prostu wyszukaj „jquery ajax”
Polecam Laravel każdemu nowemu, aby zacząć dobrze: 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).Cóż, onclickzawarł w pytaniu, więc jest całkiem jasne, że celem jest wykonanie akcji bez odświeżania. ¬_¬
W javascript stwórz funkcję Ajax,
function myAjax() {
$.ajax({
type: "POST",
url: 'your_url/ajax.php',
data:{action:'call_this'},
success:function(html) {
alert(html);
}
});
}
Następnie zadzwoń z html,
<a href="" onclick="myAjax()" class="deletebtn">Delete</a>
A w twoim ajax.php,
if($_POST['action'] == 'call_this') {
// call removeday() here
}
typepowinien być używany w jQuery wcześniej niż 1.9.0, a methodjest aliasem i powinien być używany w nowszych wersjach.
Będziesz musiał to zrobić przez AJAX . BARDZO polecam użycie jQuery, aby ci to ułatwić ....
$("#idOfElement").on('click', function(){
$.ajax({
url: 'pathToPhpFile.php',
dataType: 'json',
success: function(data){
//data returned from php
}
});
)};
Rozwiązanie bez ponownego ładowania strony
<?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>
Oto alternatywa dla AJAX, ale bez jQuery, tylko zwykły JavaScript:
Dodaj to do pierwszej / głównej strony php, z której chcesz wywołać akcję, ale zmień ją z potencjalnego atagu (hiperłącza) na buttonelement, aby nie klikały go żadne boty ani złośliwe aplikacje (lub cokolwiek).
<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>
Kiedy buttonzostanie kliknięty, onclickużywa funkcji javascript głowy do wysłania $sendingValueprzez AJAX do innej strony php, jak wiele przykładów wcześniejszych. Druga strona ajax-php-page.phpsprawdza wartość GET i wraca z 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...");
}
?>
Odpowiedź od print_rjest następnie zwracana i wyświetlana za pomocą
document.getElementById("results").innerHTML += this.responseText;
W +=zapełnia i dodaje do istniejących elementów HTML, usuwając +tylko aktualizacje i zastępuje istniejące zawartość html pelementu "results".
To najłatwiejszy możliwy sposób. Jeśli formularz jest wysyłany pocztą, wykonaj funkcję php. Pamiętaj, że jeśli chcesz wykonywać funkcję asynchronicznie (bez konieczności ponownego ładowania strony), będziesz potrzebować 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.Cóż, onclickoznaczałoby to, że właśnie tego chce. ¬_¬
Spróbuj tego, to zadziała dobrze.
<script>
function echoHello(){
alert("<?PHP hello(); ?>");
}
</script>
<?PHP
FUNCTION hello(){
echo "Call php function on onclick event.";
}
?>
<button onclick="echoHello()">Say Hello</button>