테스트 사이트 - 개발 중인 베타 버전입니다

set_cart_id함수 커스텀 중 mysql query가 비동기처럼 처리되는 현상 채택완료

하이바네 5년 전 조회 2,011

안녕하세요 개발 진행중에 도저히 이해가 안 되서 질문 올립니다.

set_cart_id함수를 수정하고 있는데 쿼리의 값이 예상했던값과 너무 다르게 나오고 있습니다.

 

</p>

<p>// cart id 설정</p>

<p>function set_cart_id($direct)</p>

<p>{</p>

<p>    global $g5, $default, $member;</p>

<p> </p>

<p>    echo 'in set_cart_id'.'
';</p>

<p> </p>

<p>    if ($direct) {</p>

<p>        $tmp_cart_id = get_session('ss_cart_direct');</p>

<p>        if(!$tmp_cart_id) {</p>

<p>            $tmp_cart_id = get_uniqid();</p>

<p>            set_session('ss_cart_direct', $tmp_cart_id);</p>

<p>        }</p>

<p>    } else {</p>

<p>        // 비회원장바구니 cart id 쿠키설정</p>

<p>        if($default['de_guest_cart_use']) {</p>

<p>            $tmp_cart_id = preg_replace('/[^a-z0-9_\-]/i', '', get_cookie('ck_guest_cart_id'));</p>

<p>            if($tmp_cart_id) {</p>

<p>              set_session('ss_cart_id', $tmp_cart_id);</p>

<p>                //set_cookie('ck_guest_cart_id', $tmp_cart_id, ($default['de_cart_keep_term'] * 86400));</p>

<p>            } else {</p>

<p>                $tmp_cart_id = get_uniqid();</p>

<p>                set_session('ss_cart_id', $tmp_cart_id);</p>

<p>                set_cookie('ck_guest_cart_id', $tmp_cart_id, ($default['de_cart_keep_term'] * 86400));</p>

<p>            }</p>

<p>        } else {</p>

<p>            $tmp_cart_id = get_session('ss_cart_id');</p>

<p>            if(!$tmp_cart_id) {</p>

<p>                $tmp_cart_id = get_uniqid();</p>

<p>                set_session('ss_cart_id', $tmp_cart_id);</p>

<p>            }</p>

<p>        }</p>

<p> </p>

<p>        // 보관된 회원장바구니 자료 cart id 변경</p>

<p>        if($member['mb_id'] && $tmp_cart_id) {</p>

<p>            $last_od_data = NULL;</p>

<p>            //마지막 od_id찾기</p>

<p>            $last_od_sql = "select</p>

<p>                                        od_id</p>

<p>                                    from</p>

<p>                                        {$g5['g5_shop_cart_table']}</p>

<p>                                    where</p>

<p>                                        mb_id = '{$member['mb_id']}' and</p>

<p>                                        ct_direct = '0' and</p>

<p>                                        ct_status = '쇼핑'</p>

<p>                                        LIMIT 1";</p>

<p>            //echo $last_od_sql.'
';</p>

<p> </p>

<p>            $last_od_data = sql_fetch($last_od_sql);</p>

<p>            echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data['od_id'].'
';</p>

<p> </p>

<p>            //폴더 이름 변경</p>

<p>            if($last_od_data[od_id]){//데이터가 있는 경우에만 폴더 변경 및 업데이트 실시</p>

<p>                $file_before_loc = "shop/order/$last_od_data[od_id]";</p>

<p>                $file_after_loc = "shop/order/$tmp_cart_id";</p>

<p>                echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>

<p>                fullCopy($file_before_loc,$file_after_loc);</p>

<p>                if($file_before_loc != $file_after_loc && is_dir($file_before_loc)){//before / after 폴더가 다른 경우에만 삭제</p>

<p>                    rmdirAll($file_before_loc);</p>

<p>                }</p>

<p>                echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>

<p> </p>

<p>                //mb_id가 없고 od_id가 현재 $tmp_cart_id랑 같은 것은 mb_id를 추가</p>

<p> </p>

<p>                $sql = " update {$g5['g5_shop_cart_table']}</p>

<p>                                set mb_id = '{$member['mb_id']}',od_id = '$tmp_cart_id'</p>

<p>                            where</p>

<p>                                od_id = '{$last_od_data['od_id']}' and</p>

<p>                                ct_direct = '0' and</p>

<p>                                ct_status = '쇼핑' ";</p>

<p> </p>

<p>                echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>

<p>                sql_query($sql);//여기 주석하면 정상동작</p>

<p>                echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>

<p>            }</p>

<p>        }</p>

<p>    }</p>

<p> </p>

<p>

 

$last_od_sql의 쿼리의 값을 저장하고, $sql쿼리로 업데이트를 진행하게 되어져 있습니다.

그런데 $sql쿼리를 sql_query($sql)로 실행시키는 코드를 넣는 순간 $last_od_sql의 값이 $sql쿼리가 실행되고 나서의 값으로 변경 되는 현상이 있습니다.

뭔가 비동기 처리되어서 $last_od_sql이 나중에 실행되는것 같기도 한데 원인을 못찾고 있습니다.

 

긴 글 읽어주셔서 감사합니다;;

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
플래토
5년 전

set_cart_id() 를 호출하는 부분을 찾아보세요

 

어디선가 값을 다르게 전달해서 한번더 호출할수도있을겁니다.

 

저도 비슷한 경우를 겪어서 찾는대 이를 먹은적이 있었네요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

하이바네
5년 전
네 감사합니다.

저도 그거를 생각하고 set_cart_id()에 들어가면 echo 'in set_cart_id'.'<br>';를 적어놨었는데 한번만 출력되는 것을 보니 정상인거 같고..어렵네요.
하이바네
5년 전
다른 페이지에서 set_cart_id가 한번 더 호출되는거를 확인했습니다.
감사합니다~
플래토
5년 전
@하이바네 찾으셔서 해결하셨다니 다행이네요 ^^

수고하세요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인