Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

запись из поля input в БД с помощью ajax


Recommended Posts

Здравствуйте. Подскажите, пожалуйста, как составить AJAX запрос для записи значения из поля input в БД при нажатии кнопки. В файле admin/view/template/sale/order_info.tpl есть таблица и поле input с кнопкой

<table class="table">
	<?php foreach ($products as $product) { ?>
	<tr>
		<td>
		...
		<td>
			<input type="text" name="order_note" id="order_note" value="<?php echo $product['order_product_note']; ?>" class="form-control" />
			<button type="button" id="button-refresh" class="btn btn-primary"></button>
		</td>
		...

Значение  должно вносится в созданную колонку в БД oc_order_product в строку с соответствующим $product['order_product_id']. Перечитал уже кучу всего, но не могу понять как в моем случае правильно составить ajax запрос. Как указать, чтоб ajax запрос передал значение $product['order_product_note'] из поля input и значение $product['order_product_id'], которое используется при создании ячейки таблицы, в котором это поле находится, для того чтоб потом вписать значение в БД в модели. Запись в БД планирую сделать так

public function updateNote($order_product_id, $order_product_note) {
	$this->db->query("UPDATE " . DB_PREFIX . "order_product SET order_product_note = '" . (int)$order_product_note . "' WHERE order_product_id = '" . (int)$order_product_id . "'");
	}

cам запрос (понятное дело неверный) но примерно будет такой

$(document).ready(function() {
  $('#button-refresh').on('click', function() { //активация функции при нажатии на кнопку с id='button-refresh'
    $.ajax({
      url: 'index.php?route=sale/order/updateNote&token=<?php echo $token; ?>// адрес функции updateNote в файле order.php в папке sale (нужен ли токен ?)
      type: 'post',
      dataType: 'json', // нужно ли указывать именно json?
      data: 'order_product_note':$('#order-note').val(), // по идее должно записать значение из интпут, но как оно поймет из какого именно поля брать
      success: function(data){ // тут не знаю что указывать в скобках
        if (data){
          alert('Заметка добавлена');
        } else {  
          alert('Ошибка записи'); 
        }
      }
    });
  });
});

и как обработать такой запрос в контроллере тоже не знаю(

Надіслати
Поділитися на інших сайтах


35 минут назад, stasonsky сказал:

data: 'order_product_note':$('#order-note').val(),

data: {'order_product_note':$('#order-note').val()},

 

37 минут назад, stasonsky сказал:

но как оно поймет из какого именно поля брать

вы же обращаетесь по идентификатору

37 минут назад, stasonsky сказал:

$('#order-note')

 

38 минут назад, stasonsky сказал:

// нужно ли указывать именно json?

нет

все зависит в каком формате вы получаете ответ с сервера

39 минут назад, stasonsky сказал:

и как обработать такой запрос в контроллере тоже не знаю(

в контроллере, получить отправленное значение

$order_product_note = $this->request->post['order_product_note'];

 

  • +1 1
Надіслати
Поділитися на інших сайтах

Вообщем-то вы на верном пути. Контроллер нужно немного доработать

public function updateNote() {

	$json = array();

	$order_product_id = $this->request->post['order_product_id']; // получаем обе эти переменные из посланных в аяксе через POST данных
	$order_product_note = $this->request->post['order_product_note']; // что тут будет? Число или текст? Если число, тогда в SQL запросе  верно. Если текст - то нет.

	try {
		$this->db->query("UPDATE " . DB_PREFIX . "order_product SET order_product_note = '" . (int)$order_product_note . "' WHERE order_product_id = '" . (int)$order_product_id . "'");
		$json['success'] = 1; // все успешно
	} catch (\Exception $e) {
		$json['success'] = 0; // не получилось
	}
	$this->response->addHeader('Content-Type: application/json'); // формируем и отправляем данные в формате json (как и было указано в аяксе )
	$this->response->setOutput(json_encode($json));
}
$(document).ready(function() {
  $('#button-refresh').on('click', function() { //активация функции при нажатии на кнопку с id='button-refresh'
    $.ajax({
      url: 'index.php?route=sale/order/updateNote&token=<?php echo $token; ?>', // токен нужен
      type: 'post',
      dataType: 'json', // нужно ли указывать именно json?
      data: {'order_product_note': $('#order-note').val(), 'order_product_id': $('#order-product-id').val()}, // еще надо засунуть туда id продукта из нужного инпута, ID инпута найдите сами, я указал наобум
      success: function(data){
        if (data.success){
          alert('Заметка добавлена');
        } else {  
          alert('Ошибка записи'); 
        }
      }
    });
  });
});

ну как-то так

Змінено користувачем Prooksius
  • +1 1
Надіслати
Поділитися на інших сайтах

@fanatic , спасибо за ответ

 

  

1 час назад, fanatic сказал:

вы же обращаетесь по идентификатору

просто получается, что в моем примере циклом foreach создается несколько таких полей с одинаковым идентификатором id="order_note"

 

1 час назад, fanatic сказал:

все зависит в каком формате вы получаете ответ с сервера

В текстовом формате или html. В бд я указал формат varchar

Надіслати
Поділитися на інших сайтах


1 час назад, Prooksius сказал:

Если число, тогда в SQL запросе верно. Если текст - то нет.

Будет текст. Тогда формат (string)$order_product_note ? В БД я указал формат varchar

 

  

1 час назад, Prooksius сказал:

ну как-то так

Спасибо! Буду сейчас пробовать

 

 

  

 

Змінено користувачем stasonsky
Надіслати
Поділитися на інших сайтах


6 минут назад, stasonsky сказал:

просто получается, что в моем примере циклом foreach создается несколько таких полей с одинаковым идентификатором id="order_note"

вот это неправильно. ID на то и ID чтобы быть уникальным

 

6 минут назад, stasonsky сказал:

В бд я указал формат varchar

тода SQL запрос нужно поменять:

$this->db->query("UPDATE " . DB_PREFIX . "order_product SET order_product_note = '" . $this->db->escape($order_product_note) . "' WHERE order_product_id = '" . (int)$order_product_id . "'");

 

Змінено користувачем Prooksius
  • +1 1
Надіслати
Поділитися на інших сайтах

34 минуты назад, Prooksius сказал:

вот это неправильно. ID на то и ID чтобы быть уникальным

переписал ID input 

<input type="text" name="order_note" id="<?php echo $product['order_product_id']; ?>" value="" class="form-control" />

Теперь ID совпадает с ID продукта. Но как теперь это правильно указать в ajax запросе в строке

data: {'order_product_note': $('#order-note').val(), 'order_product_id': $('#order-product-id').val()},

 

Надіслати
Поділитися на інших сайтах


@Prooksius , я переписал id для кнопок и для input, чтоб они были уникальными.

<input type="text" name="order_note" id="note-<?php echo $product['order_product_id']; ?>" value="" class="form-control" />

Подскажите, как в запросе в "data" указать использовать нужный $product['order_product_id'] (из цикла " foreach ($products as $product)", который формирует поля input)

data: {'order_product_note': $('#note-<?php echo $product['order_product_id']; ?>').val(), 'order_product_id' : ???},

Значение 'order_product_note' берет из input правильно, а как присвоить нужный 'order_product_id' не пойму

Надіслати
Поділитися на інших сайтах


думайте, когда вы нажимаете на кнопку, как можно определить кнопку в блоке какого товара вы нажали?
Может быть в этом блоке есть какой-то скрытый инпут, в котором находится этот order_product_id.
Возможно каждой кнопке нужно при их выводе дать data-orderproductid="<?php echo $product['order_product_id']; ?>"

а в событии нажатия - проверять этот тэг: $(this).data('orderproductid')

За вас весь код никто писать не будет. Мы вам даем подсказки.

  • +1 1
Надіслати
Поділитися на інших сайтах

9 часов назад, Prooksius сказал:

Возможно каждой кнопке нужно при их выводе дать data-orderproductid="<?php echo $product['order_product_id']; ?>"

а в событии нажатия - проверять этот тэг: $(this).data('orderproductid')

В голове сразу возникло "А чё, так можно было, что ли?" :o  

Спасибо! Без вас бы не справился, вы очень помогли!

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.