Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2015, 12:05
Интересующийся
Отправить личное сообщение для artem543 Посмотреть профиль Найти все сообщения от artem543
 
Регистрация: 09.04.2015
Сообщений: 13

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>';}
?>

И Все это не хочет работать, где ошибка не понятно

Последний раз редактировалось artem543, 20.04.2015 в 12:09.
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2015, 12:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Не желательно фигурировать у клиента истинными именами полей sql-таблиц.
Вставлять в базу данные пришедшие извне предварительно необработанными mysql_real_escape_string() для строковых значений, или приведенных к integer для числовых, это значит 100% инъекция.

Сперва исправьте это.
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2015, 14:06
Интересующийся
Отправить личное сообщение для artem543 Посмотреть профиль Найти все сообщения от artem543
 
Регистрация: 09.04.2015
Сообщений: 13

нашел ошибку, квадратных скобок не хватало
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2015, 14:07
Интересующийся
Отправить личное сообщение для artem543 Посмотреть профиль Найти все сообщения от artem543
 
Регистрация: 09.04.2015
Сообщений: 13

Сообщение от laimas Посмотреть сообщение
Не желательно фигурировать у клиента истинными именами полей sql-таблиц.
Вставлять в базу данные пришедшие извне предварительно необработанными mysql_real_escape_string() для строковых значений, или приведенных к integer для числовых, это значит 100% инъекция.

Сперва исправьте это.
Мне локальной работы, поэтому не критично
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2015, 14:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Для локального исполнения не нужен тогда локальный сервер с РНР и прочими примочками.
Ответить с цитированием
  #6 (permalink)  
Старый 20.04.2015, 14:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А если все-таки "не ради забавы" и использовать поля таблиц в формах, то нужно тогда определять префикс для них - при обращении к таблицам используется префикс, а в полях формы без него.

Тогда запрос к базе, это:
$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 в верхнем регистре, а именование полей и переменных в нижнем. В таком запросе легко понять что есть что.
То же самое и на клиенте придется учитывать регистр.

Последний раз редактировалось laimas, 20.04.2015 в 15:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Живой поиск JQUERY + AJAX + PHP + MYSQL dimi007 AJAX и COMET 2 22.07.2014 13:50
AJAX. редактирование данных в таблице MySQL B1ackgh0st AJAX и COMET 1 09.01.2014 04:03
Ajax + PHP + MySQL MadChild AJAX и COMET 2 03.07.2013 17:14
Не выводится результат MySQL (при использовании AJAX) iBars AJAX и COMET 1 17.12.2012 09:13
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04