Nasıl) olay (onclick javascript bir php fonksiyonu diyorsunuz?

5 Cevap php

Örneğin, ben bir php fonksiyonu var:

function DeleteItem($item_id)
{
     db_query("DELETE FROM {items} WHERE id=$item_id");
}

Sonra, ben aşağıdaki gibi bir şey var:

<html>
<head>
<script type="text/javascript">
function DeleteItem($item_id)
{
     alert("You have deleted item #"+$item_id);
}
</script>
</head>

<body>
<form>
Item 1
<input type="button" value="Delete" onclick="DeleteItem(1)" />
</form>
</body>
</html>

Ben Drupal db_query () işlevini kullanın böylece javascript fonksiyonu DeleteItem gelen PHP işlevi DeleteItem () () çağırmak için mümkün olmak istiyorum, bu yüzden javascript veritabanına bağlantı kurmak için denemek gerekmez.

Herkes bu nasıl yapılabilir olabilir herhangi bir öneriniz var mı? P.S. Ben bu yüzden hiç bir yanıt olduğunu söyleyerek, lütfen PHP istemci tarafında sunucu tarafında ve javascript süreçleri işler anlıyorum. Biri bu işi olması için yapabileceğiniz çeşit hile olmak için orada var. Veya belki de başarmak için çalışıyorum ne yapmanın daha iyi bir yolu yoktur.

5 Cevap

PHP sunucu tarafında ve istemci tarafında javascript süreçleri işler farkında olduğundan, ayrıca javascript bir PHP "fonksiyonu" diyemem gerçekleştirmek gerekir. Istemci tarafında kod PHP sayfasına yönlendirmek, ya da AJAX kullanarak bir PHP programı çağırabilirsiniz. Bu sayfa veya program sunucu üzerinde olmalı ve bu sizin işlevi var sadece bir satır çok daha fazlasını yapmalıdır. Ayrıca kimlik doğrulama, yetkilendirme, vb sadece herhangi bir istemci tarafı komut dosyası her yerde PHP aramak istemiyorum için kontrol etmelisiniz.

Sen işlevini yürütecek bir PHP komut dosyası yazmak gerekiyor. Bunu aramak, birine:

  • isteği göndermek için XMLHttpRequest (aka Ajax) kullanın
  • sayfanın location.href değiştirmek ve HTTP durum kodu 204 No Content PHP dönmek

You will want to use ajax for that. Also, database connection from within javascript is something you should not even consider as an option - terribly insecure.

Çok basit bir örnek:

//in javascript
function DeleteItem($item_id) {
    $.post("delete.php", { id: $item_id}, function(data) {
        alert("You have deleted item #"+$item_id);
    });
}

//in php file
db_query("DELETE FROM {items} WHERE id=" . $_REQUEST["id"]);

aslında JavaScript başına içinde PHP fonksiyonları arayamazsın. @ Christoph yazıyor gibi (temelde JS anında dış HTTP isteklerini yükleyebilirsiniz demektir, aptal kısaltması) AJAX olarak bilinen büyü kullanarak JavaScript içinde normal bir HTTP isteği ile bir PHP komut dosyası aramak gerekir.

Bkz http://docs.jquery.com/Ajax, güvenilir JS üzerinden HTTP isteği yapmak için nasıl jQuery AJAX işlevselliği bir göz atın

Bütün normal güvenlik kuralları, yani gelen verileri filtrelemek ve bu (sizin örnekte $ item_id) bekliyorsanız ne sağlamak emin olun geçerlidir. El JS tarafından istenen URL'yi erişen birisi durdurmak için hiçbir şey unutmayın.

İlk olarak, jQuery kullanın.

Ardından, kod gibi bir şey olmak zorunda olacak:

<input ... id="item_id_1" />

<script>
$(document).ready(function() {
   $('input').click(function(){
      var item_id = $(this).attr('id');
      item_id = item_id.split('_id_');
      item_id = item_id[1];
      $.get('/your_delete_url/' + item_id);
   });
});
</script>