영카드 - 비로그인으로 장바구니 1개담고, 로그인하여 1개 담아 묶음주문건 문제

영카드 - 비로그인으로 장바구니 1개담고, 로그인하여 1개 담아 묶음주문건 문제

QA

영카드 - 비로그인으로 장바구니 1개담고, 로그인하여 1개 담아 묶음주문건 문제

답변 2

본문

비로그인상태로 1개 장바구니 담고

로그인 후 1개 장바구니를 담았습니다.

 

장바구니 테이블엔 2개 상품이 들어가 있는데

비로그인일때 담았던 데이터에는 mb_id 값이 없습니다.

 

 

이 주문을 나중에 완료처리 하겠죠.

그 후에 주문자가 상품문의를 남기려고 하면 " 완료된 주문건만 작성 가능" 하다는 문구가 떠서

관련 함수를 봤더니..

 

shop.lib.php

check_itemuse_write 함수 참고

 

$sql = " select count(*) as cnt
                    from {$g5['g5_shop_cart_table']}
                    where it_id = '$it_id'
                      and mb_id = '$mb_id'
                      and ct_status = '완료' ";
        $row = sql_fetch($sql);

        if($row['cnt'] == 0)
        {
            if($close)
                alert_close('사용후기는 주문이 완료된 경우에만 작성하실 수 있습니다.');
            else
                alert('사용후기는 주문하신 상품의 상태가 완료인 경우에만 작성하실 수 있습니다.');
        }

 

 

 

위 내용이라면,  2건의 묶음주문을 완료시켜도

비회원으로 장바구니를 담아 진행했던 상품은  mb_id 값이 안들어가 있는 상태라

사용후기를 남길수 없더군요.

 

--------------------------------------------------------------------------------------------

제가 임의로 장바구니 담을때  mb_id 정보가 없는 데이터가 있을시

회원아이디를 강제적으로 업데이트 하는  코드를 넣어서 대처했는데

혹시 관련 이슈 아시는분 있는지요?

 

아래 임의로 추가한 코드입니다.

 

// 비회원으로 담아놨던 상품있고, 로그인했을경우 회원아이디 삽입
      if( $member['mb_id'] ){
        $sql4 = " select ct_id
         from {$g5['g5_shop_cart_table']}
         where od_id = '$tmp_cart_id'
         and mb_id  = ''
        ";
        $row4 = sql_fetch($sql4);
     
        if( $row4['ct_id'] ){
          $sql5 = " update {$g5['g5_shop_cart_table']}
           set mb_id =  '{$member['mb_id']}'
             where od_id = '$tmp_cart_id'
             and mb_id = ''
             ";   
        sql_query($sql5);
        }
      }

 

 

이 질문에 댓글 쓰기 :

답변 2

말씀하신것 처럼 회원 아이디를 update해준다면 큰문제가 없겠지만

애초에 비회원과 회원을 하나로 묶는다는 자체가 제 생각에는 아니라고 생각됩니다.

본인이 사용하는 개인 pc의 경우는 그렇게 하면 큰문제가 없겠지만

큰 대형 몰의 경우 pc방에서 예를들어 누군가가 비회원으로 장바구니에 담에서 쇼핑중

다른 사람이 해당 pc에서 로그인해서 같은 쇼핑몰에서 또 장바구니에 담는다면

그게 한명이 이용하는것이라는 인식이 안되기 때문이죠.

답변 감사합니다.

세션베이스의 장바구니 구현한 많은 쇼핑몰들이
로그인 전에 담았던 상품을 로그인 후에 유지되는데요.
같은 이치 아닐까요?

pc방이나 대형몰에서  홈페이지를 띄어놓은상태에서 다른사람이 로그인 했다면
말씀하셨던 상황이 생겨도 괜찮다고 생각합니다.
이어서 주문했다고 보는거죠.  혼선은 있을수 있겠지만 맞는 프로세스 아닌가
생각해봅니다.

어차피 홈페이지를 새로 열면  장바구니 세션은 초기화 되기 때문입니다.


다른방안으로..
차라리 로그인했을때  장바구니 세션을 날려버리는 쪽도 생각해 봤습니다.


이걸 버그로 봐야하는건지..
의도적으로 이런결과를 유도한건지..
사실 궁금합니다.

다시한번 답변 감사드립니다.

더이상 답변이 달릴꺼같지 않아. 답변채택하고 마무리하겠습니다..

속시원한 답변을 못들어 조금 아쉽습니다.

 

 

한가지 편법으로..

관리자가 주문건 완료처리할때  장바구니 정보를 업데이트 해도 좋을거같습니다.

admin/shop_admin/orderformcartupdate.php  파일에서

 

 // 완료시 회원주문했지만 비회원상태 장바구니 담은 상태가 있을경우 mb_id 값 갱신
 if ($ct_status == '완료'){
  $sql = " select mb_id  from {$g5['g5_shop_order_table']} where od_id = '$od_id' ";
  $row = sql_fetch($sql);

   $sql2 = " select ct_id  from {$g5['g5_shop_cart_table']} where od_id = '$od_id' and mb_id  = '' ";
   $row2 = sql_fetch($sql2);
    if( $row2['ct_id'] ){
    $sql3 = " update {$g5['g5_shop_cart_table']}
     set mb_id =  '{$row[mb_id]}'
       where od_id = '$od_id'
       and mb_id = ''
       ";   
  sql_query($sql3);
  }
 }

 

그렇게 하지마시고 해당 회원이 주문서를 결제하고 완료되는 shop/orderformupdate.php 파일에서
해당 주문번호로 연결된 모든 cart 테이블의 행을 조회해서
해당 mb_id로 업데이트 하시면 간단합니다.
관리자가 update를 해주는것보다 더 정확하지 싶습니다.

추가적으로는 관리자쪽은 충돌할수 있어 삭제를 하시고
test.php 파일을 하나 만드셔서
order테이블을 순차적으로 읽어들이면서
for문안에서 해당 주문번호로된 cart 테이블을 조회하여
mb_id를 일괄로 업데이트를 한번 하신후에 관리자쪽 코드는 삭제를 하시는게 좋습니다.
같은 동작을 하는 코드가 여러군데 있으면 좋지않습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 126,513
© SIRSOFT
현재 페이지 제일 처음으로