Как вызвать функцию php из события javascript onclick ()? - PullRequest
1 голос
/ 10 января 2010

Например, у меня есть функция 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>

Я хочу иметь возможность вызывать функцию PHP DeleteItem () из функции JavaScript DeleteItem (), чтобы я мог использовать функцию db_query () Drupal, поэтому мне не нужно пытаться установить соединение с базой данных из JavaScript.

У кого-нибудь есть предложения, как это можно сделать? Постскриптум Я понимаю, что PHP обрабатывает на стороне сервера, а javascript - на стороне клиента, поэтому, пожалуйста, никаких ответов об этом. Должен быть какой-то трюк, который можно сделать, чтобы это сработало. Или, может быть, есть лучший способ сделать то, что я пытаюсь сделать.

Ответы [ 5 ]

4 голосов
/ 10 января 2010

Поскольку вы знаете, что PHP обрабатывает на стороне сервера и javascript-процессы на стороне клиента, вы также должны понимать, что вы не можете вызывать PHP-функцию из javascript. Ваш клиентский код может перенаправить на страницу PHP или вызвать программу PHP с использованием AJAX. Эта страница или программа должна быть на сервере, и она должна выполнять намного больше, чем просто одна строка, которая есть в вашей функции. Он также должен проверять аутентификацию, авторизацию и т. Д. Вы не хотите, чтобы какой-либо сценарий на стороне клиента где-либо вызывал ваш PHP.

2 голосов
/ 11 января 2010

Вы не можете вызвать функции PHP внутри JavaScript как таковые. Как пишет @Christoph, вам нужно вызывать PHP-скрипт через обычный HTTP-запрос из JavaScript, используя магию, известную как AJAX (глупая аббревиатура, в основном означает, что JS может загружать внешние HTTP-запросы на лету).

Посмотрите на функциональность AJAX jQuery, как надежно сделать HTTP-запрос через JS, см. http://docs.jquery.com/Ajax

Применяются все обычные правила безопасности, т.е. убедитесь, что вы фильтруете входящие данные и убедитесь, что это то, что вы ожидаете ($ item_id в вашем примере). Имейте в виду, что ничто не может помешать кому-либо вручную получить доступ к URL, запрошенному вашим JS.

2 голосов
/ 10 января 2010

Вам нужно написать скрипт PHP, который будет выполнять функцию.Чтобы вызвать его, либо:

  • используйте XMLHttpRequest (он же Ajax) для отправки запроса
  • , измените location.href страницы и верните код состояния HTTP 204 No Content из PHP
2 голосов
/ 10 января 2010

Вы можете использовать для этого ajax . Кроме того, подключение к базе данных изнутри 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"]);
0 голосов
/ 11 января 2010

Сначала используйте 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...