ajax + mysql
День добрый!
Есть таблица с кнопкой сохранить <td class="add1"><button >сохранить</button> и код который отправляет через php в базу $('.add1').click( function () { // получаем данные для отправки в БД из полей var ADDRESS_ID = $('input[name=ADDRESS_ID').val(); var CLIENT_ID = $('input[name=CLIENT_ID]').val(); var DELIVERY_DATE = $('input[name=DELIVERY_DATE]').val(); var DELIVERY_TAME = $('input[name=DELIVERY_TAME]').val(); var DRIVER_ID = $('input[name=DRIVER_ID]').val(); var COMMENTS = $('input[name=COMMENTS]').val(); $.ajax({ type: "POST", url: "/insert_data.php", dataType: "text", data: "&ADDRESS_ID=" + ADDRESS_ID + "&CLIENT_ID=" + CLIENT_ID + "&DELIVERY_DATE=" + DELIVERY_DATE + "&DELIVERY_TAME=" + DELIVERY_TAME + "&DRIVER_ID=" + DRIVER_ID + "&COMMENTS=" + COMMENTS, }); }); на всякий случай код php <?php include ('connect.php'); $ADDRESS_ID = $_POST['ADDRESS_ID]; $CLIENT_ID = $_POST['CLIENT_ID']; $DELIVERY_DATE= $_POST['DELIVERY_DATE']; $DELIVERY_TAME = $_POST['DELIVERY_TAME']; $DRIVER_ID = $_POST['DRIVER_ID']; $COMMENTS= $_POST['COMMENTS']; $sql = 'INSERT INTO shipments(ADDRESS_ID, CLIENT_ID, DELIVERY_DATE, DELIVERY_TAME, DRIVER_ID, COMMENTS) VALUES("'.$ADDRESS_ID.'", "'.$CLIENT_ID.'", "'.$DELIVERY_DATE.'", "'.$DELIVERY_TAME.'", "'.$DRIVER_ID.'", "'.$COMMENTS.'")'; if(!mysql_query($sql)) {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} else {echo '<center><p><b>Данные добавлены!</b></p></center>';} ?> И Все это не хочет работать, где ошибка не понятно |
Не желательно фигурировать у клиента истинными именами полей sql-таблиц.
Вставлять в базу данные пришедшие извне предварительно необработанными mysql_real_escape_string() для строковых значений, или приведенных к integer для числовых, это значит 100% инъекция. Сперва исправьте это. |
нашел ошибку, квадратных скобок не хватало
|
Цитата:
|
Для локального исполнения не нужен тогда локальный сервер с РНР и прочими примочками.
|
А если все-таки "не ради забавы" и использовать поля таблиц в формах, то нужно тогда определять префикс для них - при обращении к таблицам используется префикс, а в полях формы без него.
Тогда запрос к базе, это: $prefix = 'a1b_'; //префикс полей $sql = 'INSERT INTO shipments (' . $prefix . implode(','.$prefix, array_keys($_POST)) . ') VALUES ("' . implode('","', array_map('mysql_real_escape_string', $_POST)) . '")'; //это без учета того, что данные еще проверять нужно на корректность Но и по структуре самой - зачем же поля Дата и Время (надо полагать именно эти данные и хранят поля delivery_date и delivery_tame) хранить в разных полях, если есть тип DATETIME, из которого всегда можно получить любую составляющую даты и времени? data: "&ADDRESS_ID=" + ADDRESS_ID - это не верно, ибо данные запроса начинаются с ?, а вот между собой ключи разделяются &. Но проще поступать так: а) таблица, содержащая поля, вложена в форму; б) отправка формы не по щелчку ячейки <td class="add1">, а по кнопке <button >сохранить</button> в) обрабатывать событие отправки формы $('селектор_формы').submit( function () { $.ajax({ type: "POST", url: "/insert_data.php", dataType: "text", //вообще то сервер возвращает html data: $(this).serialize(), // получаем данные для отправки в БД из полей success: function(data){ //data - содержание ответа сервера } }); return false }); убрав из кода var ADDRESS_ID = $('input[name=ADDRESS_ID').val(); и т.д. PS. Де-факто в верхнем регистре пишут константы. Писать в верхнем регистре имена полей нет надобности, да и ошибиться проще, и запрос плохо читаем будет. Уж лучше операторы языка SQL в верхнем регистре, а именование полей и переменных в нижнем. В таком запросе легко понять что есть что. То же самое и на клиенте придется учитывать регистр. |
Часовой пояс GMT +3, время: 17:06. |