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
javascript
php
ajax
onclick
Mikrofon
źródło
źródło
<a role="button" href="?action=removeday" class="debatebtn">Delete</a>
miejsca, w którym akcja jest przechwycona, i uruchomisz funkcję removeay () podobną doif($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/
źródło
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óż,onclick
zawarł 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 }
źródło
type
powinien być używany w jQuery wcześniej niż 1.9.0, amethod
jest aliasem i powinien być używany w nowszych wersjach.Można to zrobić i za pomocą raczej prostego php, jeśli to jest twój przycisk
<input type="submit" name="submit>
a to jest twój kod php
if(isset($_POST["submit"])) { php code here }
kod get jest wywoływany, gdy wysyłany jest komunikat get, co dzieje się po kliknięciu przycisku.
źródło
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 } }); )};
http://api.jquery.com/jQuery.ajax/
źródło
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>
źródło
Spróbuj zrobić coś takiego:
<!--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>
źródło
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
a
tagu (hiperłącza) nabutton
element, 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
button
zostanie kliknięty,onclick
używa funkcji javascript głowy do wysłania$sendingValue
przez AJAX do innej strony php, jak wiele przykładów wcześniejszych. Druga stronaajax-php-page.php
sprawdza wartość GET i wraca zprint_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_r
jest 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ść htmlp
elementu"results"
.źródło
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 } ?>
źródło
Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.
Cóż,onclick
oznaczał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>
źródło