Выполнить функцию PHP с помощью onclick

92

Я ищу простое решение для вызова функции PHP только при щелчке по тегу .

PHP:

function removeday() { ... }

HTML:

<a href="" onclick="removeday()" class="deletebtn">Delete</a>

ОБНОВЛЕНИЕ: код html и PHP находятся в одном файле PHP

Майк
источник
5
HTML запускает функции Javascript, которые выполняются на клиенте. PHP работает на сервере. Вам нужно узнать об AJAX.
Barmar
но почему AJAX? весь код находится в одном файле PHP.
Майк
1
Почему именно AJAX? Что ж, чтобы это узнать, вы можете просто запустить любой скрипт php и посмотреть код его выполнения. Опять же - Ajax - единственный способ сделать это .
Ян
2
Отмеченный ответ будет выглядеть как кнопка, если вы используете <a role="button" href="?action=removeday" class="debatebtn">Delete</a>место захвата действия и запускаете функцию removeay (), аналогичную if($action == 'removeday'){ removeday(); }. Я знаю, что это поздно, но я полагаю, что это все еще может помочь кому-то с этой проблемой. C§
CSS

Ответы:

142

Во-первых, поймите, что у вас есть три языка, работающих вместе:

  • 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/

Майкл Дж. Калкинс
источник
3
Кстати , я предполагаю, что вы новичок в PHP. Я бы порекомендовал laravel.com в качестве фреймворка. Лично мне хотелось бы полностью пропустить «изучение универсального PHP» и сразу перейти к мощному фреймворку. Этим я и сейчас пользуюсь.
Майкл Дж. Калкинс,
5
Чувак, спасибо тебе огромное, твой ответ не только помог мне с этим сомнением, но также помог мне понять PHP намного лучше! Еще раз спасибо!
Feel The Noise
Спасибо, я ищу это. Как я могу реализовать это с помощью wordpress
Firefog
1
Спасибо, я начну концентрироваться на laravel из-за вашего упоминания.
Мохамед Абулнаср
2
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в вопрос, так что довольно ясно, что цель - выполнить действие без обновления. ¬_¬
Synetech
39

В 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это псевдоним, и его следует использовать в более новых версиях.
Alejandro Nava
1
То же решение, представленное в Vanilla JavaScript, намного лучше помогает новичкам. Я говорю это как более опытный пользователь JavaScript, который когда-то был полным новичком, но хорошо разбирался в PHP.
Кен Ингрэм
12

Это можно сделать и с помощью довольно простого php, если это ваша кнопка

<input type="submit" name="submit>

и это ваш PHP-код

if(isset($_POST["submit"])) { php code here }

код get вызывается при публикации submit get, что происходит при нажатии кнопки.

Вампиры
источник
11

Вам нужно будет сделать это через AJAX . Я НАСТОЯТЕЛЬНО рекомендую вам использовать jQuery, чтобы вам было проще ...

$("#idOfElement").on('click', function(){

    $.ajax({
       url: 'pathToPhpFile.php',
       dataType: 'json',
       success: function(data){
            //data returned from php
       }
    });
)};

http://api.jquery.com/jQuery.ajax/

АО
источник
1
почему AJAX? это будет тот же файл PHP (я обновил свой вопрос)
Майк,
3
Из-за того, что объяснил @Barmar, это не работает. Вы захотите поместить php в отдельный файл, а затем указать этот файл в своем запросе AJAX.
АО
1
Параметр "url:" ссылается на внешний файл php, как я могу ссылаться на функцию php в том же файле?
Joe Doe
2
@JoeDoe, вы не можете, поместите функцию во внешний файл
АО
2

Решение без перезагрузки страницы

<?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>
Камил Келчевски
источник
1

Попробуйте сделать что-то вроде этого:

<!--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>
Симпел
источник
1

Вот альтернатива с 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".

AndiOak
источник
0

Это самый простой способ. Если форма отправлена ​​по почте, выполните функцию php. Обратите внимание: если вы хотите выполнять функцию асинхронно (без необходимости перезагружать страницу), вам понадобится AJAX.

<form method="post">
    <button name="test">test</button>
</form>

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>
csandreas1
источник
Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.Что ж, onclickэто означает, что он именно этого хочет. ¬_¬
Synetech
-3

Попробуйте, это будет работать нормально.

<script>
function echoHello(){
 alert("<?PHP hello(); ?>");
 }
</script>

<?PHP
FUNCTION hello(){
 echo "Call php function on onclick event.";
 }

?>

<button onclick="echoHello()">Say Hello</button>
Видья
источник
2
Это не работает (даже если вы очистите его), но, более того, не может работать. При загрузке код PHP предварительно обрабатывается; он не запускается во время выполнения.
Synetech
Либо вы не читали вопрос, либо не тестировали свой код, так как это не сработает.
Mr PizzaGuy,