Javascript и PHP функции - PullRequest
       38

Javascript и PHP функции

5 голосов
/ 21 октября 2008

Можно ли вызвать функцию из PHP, используя onsubmit из JavaScript? Если так, то может ли кто-нибудь дать мне пример того, как это будет сделано?

function addOrder(){
    $con = mysql_connect("localhost", "146687", "password");
    if(!$con){
        die('Could not connect: ' . mysql_error())
    }

    $sql = "INSERT INTO orders ((user, 1st row, 2nd row, 3rd row, 4th row)
    VALUES ($session->username,1st variable, 2nd variable, 3rd variable, 4th variable))";

    mysql_query($sql,$con)
    if(mysql_query($sql,$con)){
        echo "Your order has been added";
    }else{
        echo "There was an error adding your order to the databse: " . mysql_error();
    }
}

Это функция, которую я хочу вызвать. Это система заказа, вы вводите, сколько из каждого элемента вы хотите, нажмите отправить, и он должен добавить заказ в таблицу.

Ответы [ 7 ]

20 голосов
/ 21 октября 2008

Вы не можете вызвать функцию PHP из Javascript ...

Javascript - это клиентский язык (он выполняется в веб-браузере после получения веб-страницы), в то время как PHP находится на стороне сервера (он выполняется до отображения веб-страницы). У вас нет возможности сделать один звонок другому.

... но вы можете получить результат внешнего PHP-скрипта

Существует функция Javascript под названием xhttprequest, которая позволяет вам вызывать любой скрипт на веб-сервере и получать его ответ. Таким образом, чтобы решить вашу проблему, вы можете создать скрипт PHP, который выводит некоторый текст (или XML, или JSON), затем вызывать его и анализировать ответ с помощью Javascript.

Этот процесс называется тем, что мы называем AJAX , и гораздо проще сделать это с помощью хорошего инструмента, чем вы сами. Обратите внимание на JQuery , это мощная, но простая в использовании библиотека Javascript со встроенными помощниками AJAX.

Пример с JQuery (на стороне клиента):

$.ajax({
   type: "POST", // the request type. You most likely going to use POST
   url: "your_php_script.php", // the script path on the server side
   data: "name=John&location=Boston", // here you put you http param you want to be able to retrieve in $_POST 
   success: function(msg) {
     alert( "Data Saved: " + msg ); // what you do once the request is completed
   }
4 голосов
/ 21 октября 2008

косвенно возможно вызвать функцию PHP с использованием JavaScript. Как уже упоминали другие люди, вы захотите сделать какой-то тип запроса - это не обязательно должен быть Ajax. Это может быть синхронно. Не зная точно, что вы пытаетесь достичь, вот что я бы предложил:

  • Присоедините обработчик событий к опции отправки формы (или используйте стандартную отправку, если вы не собираетесь использовать Ajax)
  • Объедините все параметры, которые необходимо будет передать в функцию PHP, либо в POST, либо в строке запроса адреса страницы.
  • Запустить запрос (асинхронно или с помощью отправки)
  • В сценарии PHP, который является целью запроса, извлеките параметры из $ _ POST или $ _ GET.
  • Вызовите нужную функцию PHP с параметрами.
  • Отзовите ответ и проанализируйте его при необходимости, как только запрос завершится.

Опять же, это немного общее, но и ваш вопрос. Надеюсь, это дает какое-то направление.

4 голосов
/ 21 октября 2008

Звучит так, как вы хотите AJAX .

Это слишком большая тема для одного ответа, но это должно помочь вам.

По сути, Javascript отправляет HTTP-запрос к PHP-скрипту на вашем сервере, а затем что-то делает с ответом. JSON , вероятно, вы тоже захотите узнать.

2 голосов
/ 21 октября 2008

Вы захотите сделать что-то вроде:

<form action="add_order.php" method="POST" id="add_order_form">
<!-- all of your form fields -->
<input type='submit' value='Add Order'>
</form>

<script type="text/javascript">
$("#add_order_form").submit(function() {
    var action = $("#add_order_form").attr("action");
    var data = $("#add_order_form").serialize();
    $.post(action, data, function(json, status) {
        if(status == 'success') {
            alert(json.message);
        } else {
            alert('Something went wrong.');
        }
    }, "json"); 
    return false;
});
</script>

И затем есть PHP-файл с именем add_order.php с чем-то вроде:

$success = 0;
$con = mysql_connect("localhost", "146687", "password");
if(!$con) {
    $message = 'Could not connect to the database.';
} else {
    // SANITIZE DATA BEFORE INSERTING INTO DATABASE
    // LOOK INTO MYSQL_REAL_ESCAPE_STRING AT LEAST,
    // PREFERABLY INTO PREPARED STATEMENTS
    $query_ok = mysql_query("INSERT INTO `orders` ....");
    if($query_ok) {
        $success = 1;
        $message = "Order added.";
    } else {
        $message = "Unable to save information";
    }
}

print json_encode(array('success' => $success, 'message' => $message));

Чтобы эта красота работала, вам нужно зайти на сайт jQuery , скачать ее и включить файл jquery.js.

Я не проверял выше, но это должно работать. Удачи.

2 голосов
/ 21 октября 2008

Ближайшее, что вы получите, будет xajax , который позволит вам включить функцию PHP в вызов AJAX. Я использовал его немного раньше, чем начал работать с Zend Framework, и нашел его слишком сложным для реализации в ОО.

С помощью xajax вы пишете функцию PHP, которая выполняет всю вашу обычную логику, а затем возвращает объект ObjectResponse, который управляет браузером через AJAX (окна предупреждений, изменения HTML, CSS и т. Д.). Вы регистрируете свою функцию с помощью xajax, а затем xajax выложит некоторый javascript в раздел HTML.

В вашем HTML вы просто вызываете функцию javascript, сгенерированную xajax, и она позаботится об остальном через AJAX.

0 голосов
/ 21 октября 2008

Извините, ваш вопрос слишком простой. В зависимости от того, какая функция PHP, которую вы хотите вызвать на Amsax FormSubmit, не поможет Знаете ли вы о фундаментальных (клиентских / серверных) различиях между PHP и JavaScript?

0 голосов
/ 21 октября 2008

Да, еще один замечательный и простой учебник для изучения ajax:

http://24ways.org/2005/easy-ajax-with-prototype/

Прототип - это еще одна вещь, которую я рекомендую, если вы не зашли слишком далеко со своим проектом и вам нужно вернуть много функций.

http://www.prototypejs.org/

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...