Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript onclick()事件调用php函数?_Php_Javascript_Drupal 6 - Fatal编程技术网

如何从javascript onclick()事件调用php函数?

如何从javascript onclick()事件调用php函数?,php,javascript,drupal-6,Php,Javascript,Drupal 6,例如,我有一个php函数: function DeleteItem($item_id) { db_query("DELETE FROM {items} WHERE id=$item_id"); } 然后,我有如下内容: <html> <head> <script type="text/javascript"> function DeleteItem($item_id) { alert("You have deleted item #"+$

例如,我有一个php函数:

function DeleteItem($item_id)
{
     db_query("DELETE FROM {items} WHERE id=$item_id");
}
然后,我有如下内容:

<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>
我希望能够从javascript函数DeleteItem调用PHP函数DeleteItem,这样我就可以使用Drupal的db_查询函数,这样我就不必尝试从javascript建立到数据库的连接

有人对如何做到这一点有什么建议吗?另外,我知道PHP进程在服务器端,javascript进程在客户端,所以请不要回答这个问题。为了解决这个问题,必须要有某种技巧。或者也许有更好的方法来完成我想要完成的任务。

你会想用它来完成的。 而且,从JavaScript内部的数据库连接是不应该被认为是一个非常不安全的选项。

一个非常简单的例子:

//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"]);
你会想用它。 而且,从JavaScript内部的数据库连接是不应该被认为是一个非常不安全的选项。

一个非常简单的例子:

//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"]);

您需要编写一个PHP脚本来执行该函数。要称之为:

使用XMLHttpRequest或Ajax发送请求 更改页面的location.href并从PHP返回HTTP状态代码204 No Content
您需要编写一个PHP脚本来执行该函数。要称之为:

使用XMLHttpRequest或Ajax发送请求 更改页面的location.href并从PHP返回HTTP状态代码204 No Content
因为您知道服务器端的PHP进程和客户端的javascript进程,所以还必须意识到不能从javascript调用PHP函数。客户端代码可以重定向到PHP页面,或者使用AJAX调用PHP程序。该页面或程序必须在服务器上,并且它应该不仅仅是您的函数中的一行。它还应该检查身份验证、授权等。您不希望在任何地方只需要任何客户端脚本来调用您的PHP。

因为您知道服务器端的PHP进程和客户端的javascript进程,您还必须意识到不能从javascript调用PHP函数。客户端代码可以重定向到PHP页面,或者使用AJAX调用PHP程序。该页面或程序必须在服务器上,并且它应该不仅仅是您的函数中的一行。它还应该检查身份验证、授权等。您不希望在任何地方只使用任何客户端脚本来调用PHP。

首先,使用jQuery

然后,您的代码必须类似于:

<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>
首先,使用jQuery

然后,您的代码必须类似于:

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

实际上,您不能在JavaScript本身中调用PHP函数。在@Christoph编写时,您需要通过JavaScript中的普通HTTP请求调用PHP脚本,使用称为AJAX愚蠢首字母缩写的魔法,基本上意味着JS可以动态加载外部HTTP请求

查看jQuery的AJAX功能,了解如何通过JS可靠地发出HTTP请求,请参阅


所有正常的安全规则都适用,即确保过滤传入的数据,并确保它是示例中所期望的$item_id。请记住,没有什么可以阻止某人手动访问JS请求的URL。

实际上,JavaScript本身不能调用PHP函数。在@Christoph编写时,您需要通过JavaScript中的普通HTTP请求调用PHP脚本,使用称为AJAX愚蠢首字母缩写的魔法,基本上意味着JS可以动态加载外部HTTP请求

查看jQuery的AJAX功能,了解如何通过JS可靠地发出HTTP请求,请参阅


所有正常的安全规则都适用,即确保过滤传入的数据,并确保它是示例中所期望的$item_id。请记住,没有什么可以阻止某人手动访问JS请求的URL。

我熟悉ajax的功能,但不熟悉实现细节。有什么见解吗?我会在jquery ajax教程中搜索一些入门资料。您可以用JavaScript创建一个XMLHTTPRequest对象,设置一些参数,然后发出请求。谷歌有一些很好的教程,试试看:。我熟悉ajax的功能,但不熟悉实现细节。有什么见解吗?我会在jquery ajax教程中搜索一些入门资料。您可以用JavaScript创建一个XMLHTTPRequest对象,设置一些参数,然后发出请求。谷歌有一些很棒的教程,试试看:。我可以告诉你这个问题吗:你确定要这样做吗?您允许任何客户机在任何地方从数据库中删除任何项目。这不是个好主意。事实上,我真的不想这么做,但我在做我想做的事情时遇到了问题。Drupal有“面板”和“选项卡”模块。你可以把标签放进去
您的面板中的所有或部分内容。但是,无法通过链接或调用将用户定向到特定选项卡。因此,如果我想从第三个选项卡的列表中删除或特别编辑项目,我可以这样做,但当我调用页面并在URL中提供参数时,当我用参数而不是我想要的选项卡重新加载页面时,它会显示第一个选项卡。这使得用户不得不再次单击第三个选项卡,这对他们来说很烦人。也许更好的问题是,如何在不在浏览器中重新加载页面的情况下从网页访问服务器端功能?AJAX非常适合这个问题。我可以告诉你这个问题吗:你确定要这样做吗?您允许任何客户机在任何地方从数据库中删除任何项目。这不是个好主意。事实上,我真的不想这么做,但我在做我想做的事情时遇到了问题。Drupal有“面板”和“选项卡”模块。您可以在面板中为面板中的全部或部分内容设置选项卡。但是,无法通过链接或调用将用户定向到特定选项卡。因此,如果我想从第三个选项卡的列表中删除或特别编辑项目,我可以这样做,但当我调用页面并在URL中提供参数时,当我用参数而不是我想要的选项卡重新加载页面时,它会显示第一个选项卡。这使得用户不得不再次单击第三个选项卡,这对他们来说很烦人。也许更好的问题是,如何在不在浏览器中重新加载页面的情况下从网页访问服务器端功能?AJAX非常适合这个。嘿,第二个很聪明。从没听说过。你这么做后,原来的页面还能用吗?@Pekka:是的,应该可以;关于广泛支持的状态码204和不支持的状态码205的讨论,请参见,第二个状态码很聪明。从没听说过。你这么做后,原来的页面还能用吗?@Pekka:是的,应该可以;有关广泛支持的状态代码204和不支持的状态代码205的讨论,请参阅