Как отправить переменные не просто в файл php, а в его php-функцию
Доброго времени суток.
Подскажите: можно ли и как передать переменные с помощью AJAX в функцию php. Сейчас делаю так: $.ajax({ type: "POST", url: "edit_catalogpost.php", data: ("table="+cat_table+"&field="+cat_field+"&value="+hidden+"&id="+cat_id), dataType: "html", cashe: false, success: (function() { }), error: (function() { alert("Ошибка выполнения"); }), }); то есть передаю переменные в файл edit_catalogpost.php, в котором просто принимаю и делаю sql запрос к бд. if ($_POST){ $table = $_POST['table']; //таблица (получаем из #table) $field = $_POST['field']; //имя поля (получаем при разборе класса td) $value = $_POST['value']; //новое значение (получаем при разборе класса td) $id = $_POST['id']; //id ячейки которую будем обновлять (получаем при разборе класса td) ......SQL=""... } Возникла необходимость делать несколько разных sql запросов. Чтобы не делать много таких php-файлов-обработчиков.: Можно ли как-то в одном php-файле создать несколько php-функций-обработчиков? Чтобы с помощью ajax отправлять данные не просто в файл, а В НУЖНУЮ ФУНКЦИЮ этого файла? Может есть какое-то другое решение. Просто делать один php файл для одного sql запроса не очень нравится мне. |
Можно, но только не непосредственно в функцию, а в вызов функции как ее аргументы. Для этого и существуют параметры запроса, но:
1) оперировать непосредственно именами таблиц и ее полей не стоит, это небезопасно, пусть параметры, это имена, а в базе эти имена имеют префикс, который сервер подставит; 2) обязательно проверять действительность имен; 3) ну конечно обязательно экранировать значения параметров. Чтобы таким образом выполнить кардинально разные задачи требующие отдельных функций, можно использовать тот же switch, а можно и массив функций, в последнем случае примерно так: а) запрос клиента содержит два первичных ключа - первый требуемая функция, второй, это массив параметров передаваемых в нее: //скобки совсем не нужны data: "job=fun_1&arg[table]="+cat_table+"&arg[field]="+cat_field+"&arg[value]="+hidden+"&arg[id]="+cat_id, на сервере: $job = [ 'fun_1' => function(array $arg) { //проверяем действительность передаваемых имен и добавляем им префиксы //запрос и возврат }, 'fun_2' => function(array $arg) { //.... } ]; if(isset($_POST['job']) && array_key_exists($_POST['job'], $job)) $result = $job[$_POST['job']]($_POST['arg']); б) у сервера нет никаких td и подобного, это ваша задача отождествлять поля sql-таблицы с колонками html-таблицы, и если разные таблицы и запросы, но схожие при этом задачи (пусть отображения), то может и не потребуется на сервере для каждой своя функция, все можно решать и в одной, что и откуда как раз и будут задавать параметры запроса клиента. |
Часовой пояс GMT +3, время: 05:45. |