Jump to content
Sign in to follow this  
unkind

[Решено] Проблема с записью в БД через 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);

      	
	}		

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

как-то так

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

Share this post


Link to post
Share on other sites

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

 

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.