Я шукаю просте рішення для виклику функції PHP лише тоді, коли натискається a-тег .
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
ОНОВЛЕННЯ: html і PHP код знаходяться в одному файлі PHP
Я шукаю просте рішення для виклику функції PHP лише тоді, коли натискається a-тег .
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 без оновлення за допомогою методу, який називається Асинхронний 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у питання, тому цілком зрозуміло, що мета - виконати дію без оновлення. ¬_¬
У 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повинен використовуватися в jQuery раніше 1.9.0, тоді як 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>
Це найпростіший можливий спосіб. Якщо форма розміщена через post, виконайте функцію 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на клавішу використовує функцію голови javascript для надсилання $sendingValueчерез ajax на іншу php-сторінку, як багато прикладів до цієї. Інша сторінка, 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>