PHP işlevini onclick ile çalıştırın


92

Bir PHP işlevini yalnızca bir etiketi tıklandığında çağırmak için basit bir çözüm arıyorum .

PHP:

function removeday() { ... }

HTML:

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

GÜNCELLEME: html ve PHP kodu aynı PHP dosyasındadır


5
HTML, istemcide çalışan Javascript işlevlerini çalıştırır. PHP, sunucuda çalışır. AJAX hakkında bilgi edinmeniz gerekiyor.
Barmar

ama neden AJAX? kodun tamamı aynı PHP dosyasındadır.
Mike

1
Neden AJAX? Bunu öğrenmek için herhangi bir php betiğini çalıştırabilir ve yürütme kodunu görebilirsiniz. Yine - Ajax bunu yapmanın tek yoludur .
Yang

2
<a role="button" href="?action=removeday" class="debatebtn">Delete</a>İşlemin yakalandığı yeri kullanırsanız ve removeay () işlevini şuna benzer şekilde çalıştırırsanız, kontrol edilen yanıt bir düğme gibi görünecektir if($action == 'removeday'){ removeday(); }. Geç olduğunu biliyorum, ancak yine de bu sorunla ilgili birine yardımcı olabileceğini düşündüm. C§
CSS

Yanıtlar:


142

Öncelikle, birlikte çalışan üç dilinizin olduğunu anlayın:

  • PHP: Yalnızca sunucu tarafından çalışır ve bir bağlantıya tıklama (GET) veya bir form gönderme (POST) gibi isteklere yanıt verir.

  • HTML ve JavaScript: Yalnızca birinin tarayıcısında çalışır (NodeJS hariç).

Dosyanızın şuna benzediğini varsayıyorum:

<!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 yalnızca isteklere (GET, POST, PUT, PATCH ve $ _REQUEST aracılığıyla SİL) yanıt verdiğinden, aynı dosyada olsalar bile bir PHP işlevini bu şekilde çalıştırmanız gerekir. Bu size bir güvenlik seviyesi verir, "Bu komut dosyasını bu kullanıcı için çalıştırmalı mıyım, çalıştırmamalı mıyım?".

Sayfayı yenilemek istemiyorsanız, Eşzamansız JavaScript ve XML (AJAX) adı verilen bir yöntemle yenilemeden PHP'ye istekte bulunabilirsiniz.

Yine de bu, YouTube'da bakabileceğiniz bir şey. "Jquery ajax" ı arayın

Laravel'i yeni başlayan herkese tavsiye ederim: http://laravel.com/


3
Sadece bahsetmek gerekirse, PHP'de oldukça yeni olduğunuzu varsayıyorum, laravel.com'u bir çerçeve olarak tavsiye etmek istiyorum . Kişisel olarak, tüm 'jenerik php'yi öğrenmeyi' atlamayı ve doğrudan güçlü bir çerçeveye gitmeyi çok isterdim. Şu anda kullandığım da bu.
Michael J. Calkins

5
Dostum, çok teşekkür ederim, cevabın sadece bu şüpheye yardımcı olmadı, aynı zamanda php'yi çok daha iyi anlamamı sağladı! Tekrar teşekkürler!
Gürültüyü Hisset

Teşekkürler bunu arıyorum. Bunu wordpress ile nasıl uygulayabilirim
Firefog

1
Teşekkürler, bahsettiğiniz için Laravel'e odaklanmaya başlayacağım.
Mohamed Abulnasr

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).onclickSoruya da dahil etti, bu yüzden amacın bir eylemi canlandırmadan gerçekleştirmek olduğu oldukça açık. ¬_¬
Synetech

39

JavaScript'te bir ajax işlevi yapın,

function myAjax() {
      $.ajax({
           type: "POST",
           url: 'your_url/ajax.php',
           data:{action:'call_this'},
           success:function(html) {
             alert(html);
           }

      });
 }

Sonra html'den arayın,

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

Ve ajax.php dosyanızda,

if($_POST['action'] == 'call_this') {
  // call removeday() here
}

Sadece açıklığa kavuşturmak için: type1.9.0'dan önceki jQuery'de kullanılmalıdır, ancak methodbir takma addır ve yeni sürümlerde kullanılmalıdır.
Alejandro Nava

1
Vanilla JavaScript'te sağlanan aynı çözüm, yeni başlayanlara çok daha iyi yardımcı olur. Bunu bir zamanlar tamamen yeni başlayan ancak PHP konusunda uzman olan daha deneyimli bir JavaScript kullanıcısı olarak söylüyorum.
Ken Ingram

12

Bu sizin düğmeniz ise, yapılabilir ve oldukça basit bir php ile

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

ve bu senin php kodun

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

kod, düğme tıklandığında gerçekleşen gönder gönderildiğinde çağrılır.


11

Bunu AJAX ile yapmanız gerekecek . Bunu sizin için kolaylaştırmak için jQuery kullanmanızı tavsiye ederim ....

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

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

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


1
neden AJAX? aynı PHP dosyası olurdu (sorumu güncelledim)
Mike

3
@ Barmar'ın açıkladığı şey yüzünden, böyle yürümüyor. Php'yi ayrı bir dosyaya yerleştirmek, ardından AJAX isteğinizde bu dosyaya referans vermek isteyeceksiniz.
AO

1
"Url:" parametresi harici php dosyasına başvuruyor, aynı dosyada php işlevine nasıl başvurabilirim?
Joe Doe

2
@JoeDoe yapamazsınız, işlevi harici bir dosyaya yerleştiremezsiniz
AO

2

Sayfayı yeniden yüklemeden çözüm

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

Bunun gibi bir şey yapmayı dene:

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

İşte AJAX ile bir alternatif ancak jQuery yok, sadece normal JavaScript:

Bunu, eylemi çağırmak istediğiniz ilk / ana php sayfasına ekleyin, ancak onu potansiyel bir aetiketten (köprü) bir buttonöğeye değiştirin, böylece herhangi bir bot veya kötü amaçlı uygulama (veya her neyse) tarafından tıklanmaz.

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

Ne zaman buttontıklandığında, onclickgöndermek head's javascript fonksiyonunu kullanan $sendingValuebu daha önce birçok örneklerde olduğu gibi, başka bir php-sayfaya ajax. Diğer sayfa, ajax-php-page.phpGET değerini kontrol eder ve şununla döner 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...");
  }

?>

Gelen yanıt print_rdaha sonra döndürülür ve görüntülenir

document.getElementById("results").innerHTML += this.responseText;

+=Olarak doldurulur ve kaldırma mevcut html elemanları ekler +sadece güncellemeleri ve html mevcut içeriğini değiştirir pelemanı "results".


0

Bu mümkün olan en kolay yoldur. Form posta yoluyla gönderilmişse, php işlevi yapın. Eşzamansız olarak işlevi gerçekleştirmek istiyorsanız (sayfayı yeniden yüklemenize gerek kalmadan), AJAX'a ihtiyacınız olacağını unutmayın.

<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.Bu, onclicktam olarak istediği şeyin bu olduğunu gösterir. ¬_¬
Synetech

-3

Bunu deneyin, iyi çalışacak.

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

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

?>

<button onclick="echoHello()">Say Hello</button>

2
Yani işi (Temizlemene bile) değil, ama dahası, o olamaz çalışır. PHP kodu yüklendiğinde önceden işlenir; çalışma zamanında çalıştırılmaz.
Synetech

Ya soruyu okumadınız ya da işe yaramayacağı için kodunuzu test etmediniz.
Bay PizzaGuy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.