Перейти к содержанию
unkind

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

Рекомендуемые сообщения

Сделал статусы для каждого товара в заказе. Делал по аналогии со статусами заказов. Текущий статус товара хранится в таблице 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);

      	
	}		

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и верстку надо править, и js потом под неё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и верстку надо править, и js потом под неё.

А могли бы Вы подсказать подробнее. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как-то так

...
                <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>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Вроде работает.

 

 

// wtf это вообще?

Весь кусок изначально из родного кода статуса заказа и истории статусов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

суть то уловили? поняли, что сделали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.