Я ищу простое решение для вызова функции PHP только при щелчке по тегу .
PHP:
function removeday() { ... }
HTML:
<a href="" onclick="removeday()" class="deletebtn">Delete</a>
ОБНОВЛЕНИЕ: код html и PHP находятся в одном файле PHP
Я ищу простое решение для вызова функции 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>
место захвата действия и запускаете функцию removeay (), аналогичную 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 без обновления с помощью метода под названием Asynchronous JavaScript and 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>
Вот альтернатива с 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"
.
Это самый простой способ. Если форма отправлена по почте, выполните функцию 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
это означает, что он именно этого хочет. ¬_¬
Попробуйте, это будет работать нормально.
<script>
function echoHello(){
alert("<?PHP hello(); ?>");
}
</script>
<?PHP
FUNCTION hello(){
echo "Call php function on onclick event.";
}
?>
<button onclick="echoHello()">Say Hello</button>