Можно ли вызвать функцию из 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(); } }
Это функция, которую я хочу вызвать. Его система заказа, вы печатаете, сколько из каждого элемента вы хотите, нажмите submit, и он должен добавить заказ в таблицу.
Javascript – это клиентский язык (он выполняется в веб-браузере после получения веб-страницы), в то время как 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 }
Похоже, вы хотите AJAX .
Это слишком большая тема для одного ответа, но это должно заставить вас идти.
В принципе, Javascript отправит HTTP-запрос на PHP-скрипт на вашем сервере, а затем сделает что-то с ответом. JSON – это то, о чем вы тоже захотите узнать.
Косвенно можно вызвать функцию PHP с помощью JavaScript. Как уже говорили другие люди, вы захотите сделать какой-то запрос – это необязательно должно быть Ajax. Это может быть синхронно. Не зная точно, что вы пытаетесь выполнить, вот что я хотел бы предложить:
Опять же, это немного общее, но так же и ваш вопрос. Надеюсь, это дает какое-то направление.
Ближе всего вы получите xajax, который позволит вам обернуть функцию PHP в вызов AJAX. Я использовал его совсем немного, прежде чем начал работать с Zend Framework и усложнил его реализацию в OO-способе.
С помощью xajax вы пишете функцию PHP, которая выполняет всю вашу обычную логику, а затем возвращает объект ObjectResponse, который манипулирует браузером через AJAX (предупреждения, изменение HTML, CSS и т. Д.). Вы регистрируете свою функцию с помощью xajax, а затем xajax выплевывает некоторый javascript в раздел вашего HTML.
В вашем HTML вы просто называете эту функцию javascript, которую генерирует xajax, и она заботится об остальном через AJAX.
Вы захотите сделать что-то вроде:
<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.
Я не тестировал выше, но он должен работать. Удачи.
Извините, ваш вопрос слишком прост. В зависимости от того, какую функцию PHP вы хотите вызывать на formubmit, Ajax вам не поможет. Знаете ли вы о фундаментальных (клиентских / серверных) различиях между PHP и JavaScript?
Да, еще один отличный и простой учебник по изучению ajax:
http://24ways.org/2005/easy-ajax-with-prototype/
Prototype – это еще одна вещь, которую я рекомендую, если вы не ушли далеко от своего проекта и должны вернуть много функциональности.
Удачи!