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

[Решено] Проблема с записью в БД через POST.


Recommended Posts

Сделал статусы для каждого товара в заказе. Делал по аналогии со статусами заказов. Текущий статус товара хранится в таблице order_product.

Когда в заказе один товар, то все работает нормально:

-новый статус в базе пишется и перезаписывается.

-история статусов пишутся (новая таблица order_history_prod).

 

НО когда в заказе несколько товаров, то при смене статуса новый статус не записывается в, а в историю order_history_prod создается новая запись, но id товара не того, которому пытался поменять, а id последнего товара (нижнего) из списка товаров в текущем заказе и статус сохраняется старый. Посмотрел по консоли браузера и там в методе POST статус OK

 

Кто может подсказать, где смотреть.

 

order_info.tpl

 <?php foreach ($products as $product) { ?>
...
<select name="order_status_prod_id">
                <?php foreach ($order_statuses_prod as $order_statuse_prod) { ?>
                <option value="<?php echo $order_statuse_prod['order_status_prod_id']; ?>" selected="selected"><?php echo $order_statuse_prod['name']; ?></option>
               <?php } ?>
              </select><a style="height: 6px; line-height: 5px;" id="button-history_prod" class="button"><?php echo $button_add_history_prod; ?></a>
...
<?php } ?>
<script type="text/javascript"><!--
$('#button-history_prod').live('click', function() {
	$.ajax({
		url: 'index.php?route=sale/order/history_prod&token=<?php echo $token; ?>&order_product_id=<?php echo $product['order_product_id']; ?>',
		type: 'post',
		dataType: 'html',
		data: 'order_status_prod_id=' + encodeURIComponent($('select[name=\'order_status_prod_id\']').val()),
		beforeSend: function() {
			$('.success, .warning').remove();
			$('#button-history_prod').attr('disabled', true);
			$('#history_prod').prepend('<div class="attention"><img src="view/image/loading.gif" alt="" /> <?php echo $text_wait; ?></div>');
		},
		complete: function() {
			$('#button-history_prod').attr('disabled', false);
			$('.attention').remove();
		},
		success: function(html) {
			$('#history_prod').html(html);
			
			$('#order-status-prod').html($('select[name=\'order_status_prod_id\'] option:selected').text());
		}
	});
});
//--></script> 

Модель order.php

public function addOrderHistoryProd($order_product_id, $data) {
		$this->db->query("UPDATE `" . DB_PREFIX . "order_product` SET order_status_prod_id = '" . (int)$data['order_status_prod_id'] . "' WHERE order_product_id = '" . (int)$order_product_id . "'");

		$this->db->query("INSERT INTO " . DB_PREFIX . "order_history_prod SET order_product_id = '" . (int)$order_product_id . "', order_status_prod_id = '" . (int)$data['order_status_prod_id'] . "', date_added = NOW()"); 

		$order_info = $this->getOrder($order_product_id);

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


как-то так

...
                <select name="order_status_prod_id_<?php echo $product['order_product_id']; ?>">
                <?php foreach ($order_statuses_prod as $order_status_prod) { ?>
                <option value="<?php echo $order_status_prod['order_status_prod_id']; ?>"><?php echo $order_status_prod['name']; ?></option>
               <?php } ?>
              </select><a style="height: 6px; line-height: 5px;" id="button-history-prod_<?php echo $product['order_product_id']; ?>" class="button"><?php echo $button_add_history_prod; ?></a>
...
<script type="text/javascript"><!--
$('a[id^="button-history-prod_"]').live('click', function() {
	var prod_id_parts = $(this).attr('id').split('_');
	var prod_id = prod_id_parts[1];
	$.ajax({
		url: 'index.php?route=sale/order/history_prod&token=<?php echo $token; ?>&order_product_id='+prod_id+'',
		type: 'post',
		dataType: 'html',
		data: 'order_status_prod_id=' + encodeURIComponent($('select[name="order_status_prod_id_'+prod_id+'"] option:selected').val()),
		beforeSend: function() {
			$('.success, .warning').remove();
			$('#button-history-prod_'+prod_id+'').attr('disabled', true);
			$('#history_prod').prepend('<div class="attention"><img src="view/image/loading.gif" alt="" /> <?php echo $text_wait; ?></div>');
		},
		complete: function() {
			$('#button-history-prod_'+prod_id+'').attr('disabled', false);
			$('.attention').remove();
		},
		success: function(html) {
			$('#history_prod').html(html);
			
			// wtf это вообще?
			$('#order-status-prod').html($('select[name="order_status_prod_id_'+prod_id+'"] option:selected').text());
		}
	});
});
//--></script>
Надіслати
Поділитися на інших сайтах

Если я правильно понял, то затуп был в том, что я не сделал привязку к id продукта, к которому относится статус и select соответственно.

Так? Или еще что-то упустил?

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


дело не в "привязке к id продукта", а в "разграничении одинаковых элементов (кнопок,списков) впринципе" и неправильной передачи данных в js + воткнули неизменяемые данные (order_product_id последнего товара - там же цикл выше был).

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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