Виконайте функцію PHP за допомогою onclick


92

Я шукаю просте рішення для виклику функції PHP лише тоді, коли натискається a-тег .

PHP:

function removeday() { ... }

HTML:

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

ОНОВЛЕННЯ: html і PHP код знаходяться в одному файлі PHP


5
HTML запускає функції Javascript, які працюють на клієнті. PHP працює на сервері. Вам потрібно дізнатися про AJAX.
Barmar

але чому саме AJAX? весь код знаходиться в одному файлі PHP.
Mike

1
Чому саме AJAX? Ну а для того, щоб це дізнатись, ви можете просто запустити будь-який php-скрипт і побачити код його виконання. Знову ж таки - Ajax - це єдиний спосіб зробити це .
Ян,

2
Перевірена відповідь буде виглядати як кнопка, якщо ви використовуєте те місце, <a role="button" href="?action=removeday" class="debatebtn">Delete</a>де зловлено дію, і запускаєте функцію removeday (), подібну до 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 без оновлення за допомогою методу, який називається Асинхронний JavaScript і XML (AJAX).

Це те, що ви можете шукати на YouTube. Просто знайдіть "jquery ajax"

Я рекомендую Laravel кожному новому, щоб почати правильно: http://laravel.com/


3
Зазначимо лише, я припускаю, що ви досить новачок у PHP, я хотів би рекомендувати laravel.com як основу. Особисто я хотів би пропустити весь "навчальний загальний php" і перейти прямо до потужного фреймворку. Це я використовую і зараз.
Michael J. Calkins

5
Чоловіче, щиро дякую, ваша відповідь не просто допомогла мені з цим сумнівом, але і змусила мене зрозуміти php набагато краще! Ще раз дякую вам!
Feel The Noise

Дякую, я шукаю це. Як я можу реалізувати це за допомогою wordpress
Firefog

1
Дякую, я почну концентруватися на laravel через вашу згадку.
Мохамед Абулнаср,

1
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

38

У 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
Те саме рішення, яке також передбачено у JavaScript Vanilla, допомагає новачкам набагато краще. Я кажу це як досвідченіший користувач JavaScript, який колись був абсолютно новачком, але добре володів PHP.
Кен Інграм

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.
AO

1
Параметр "url:" посилається на зовнішній файл php, як я можу посилатися на функцію php у тому ж файлі?
Joe Doe

2
@JoeDoe ви не можете, помістіть функцію у зовнішній файл
AO

11

Це можна зробити за допомогою досить простого php, якщо це ваша кнопка

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

і це ваш php-код

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

код get викликається, коли надіслано get get, що відбувається при натисканні кнопки.


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

Рішення без перезавантаження сторінки

<?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>

0

Це найпростіший можливий спосіб. Якщо форма розміщена через 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вказувало б, що це саме те, що він хоче. ¬_¬
Synetech

0

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


-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,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.