KCP 창업 지원, 수수료 국내최저 2.9% 제공 이벤트!

if 조건문 중 변수 중복 만족?

그누보드5
영카트5
스터디
Q & A
제작의뢰
컨텐츠몰
부가서비스
소모임
커뮤니티
부가서비스
KCP 이벤트!
if 조건문 중 변수 중복 만족?

QA

if 조건문 중 변수 중복 만족?

본문


//장바구니 품절 및 예약 상품
            $sql = " select b.it_2, b.it_soldout, a.it_name
                                  from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
                                  where a.od_id = '$tmp_cart_id'
                                  and a.it_id = '$it_id' ";
            $result = sql_query($sql);
            while ($row=sql_fetch_array($result)){
                if ($row['it_2'] == '1') 
                {
                    alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
                }
            }

 

위쪽에 체크 동작 부분이 있고 체크는 정상적으로 작동합니다. ('1'인 상품 체크 시 알러트, ''인 상품만 있을 시 정상 주문)

 

근데 원래 작성하려는 조건이 '1'일때가 아니라 '1'과 ''가 동시에 있을 때 입니다.

 

echo $row['it_2']; 해보면 선택된게 2개여도 01이 아니라 1만 나오네요

 

it_2가 1일때, 혹은 비어 있을 때는 상관이 없는데 1과 비어 있는게 동시에 체크되면 알러트가 뜨게 하려면 어떻게 해야 하나요?

이 글을 내 페이스북 계정으로 보내기 이 글을 내 트위터 계정으로 보내기

이 질문에 댓글 쓰기 :

답변 3

채택됨

마르스컴퍼니님의 답변


$sql = " 
select b.it_2, b.it_soldout, a.it_name
  from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
 where a.od_id = '$tmp_cart_id'
   and a.it_id = '$it_id' 
";
$result = sql_query($sql);
 
$cnt = $cnt2 = 0;
while ($row = sql_fetch_array($result)) {
    if ($row['it_2'] == '1')
      $cnt = $cnt + 1;
    else if ($row['it_2'] == '')
      $cnt2 = $cnt2 + 1;        
}
 
if ($cnt > 0 && $cnt2 > 0) {
    alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}
주소복사
채택됨
답변의 댓글
블랑숑님의 댓글
답변 너무 감사합니다 ㅠㅠ

그런데 이렇게 수정을 하고 나니 아무 알러트가 뜨지 않습니다. 1과 0 동시에 주문했는데도요.

사용 소스는

//장바구니 품절 및 예약 상품
$sql = " select b.it_2, b.it_soldout, a.it_name
  from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
  where a.od_id = '$tmp_cart_id'
  and a.it_id = '$it_id' ";
$result = sql_query($sql);

$cnt = $cnt2 = 0;
while ($row=sql_fetch_array($result)){

                if ($row['it_soldout'])
                {
                    alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
                }

                if ($row['it_2'] == '1')
  $cnt = $cnt + 1;
 
if ($row['it_2'] == '')
$cnt2 = $cnt2 + 1;
            }

if ($cnt > 0 && $cnt2 > 0) {
alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}
/*

이렇게 입니다.
마르스컴퍼니님의 댓글
예약상품인 경우 : it_2 값이 '1'
예약상품이 아닌 경우 : it_2 값이 ''
이 확실하게 맞는지를 먼저 체크해야 될 것 같습니다. (또는 DB g5_shop_cart 테이블 직접 확인)

확인하는 방법으로는..
echo $row['it_2'] . 'ccc';
또는
if ($row['it_2'] == '')
  echo 'ddd';
와 같이 it_2 칼럼의 빈 값을 명확하게 확인할 수 있는 체크용 코드를 사용해 볼 수 있습니다.
블랑숑님의 댓글
그건 맞아요 확실합니다.

DB서도 확인했고

if ($row['it_2'])
                {
                    alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
                }

라고 하면 1인 상품은 주문 안되고 비어 있는 상품은 주문 됩니다 ㅠㅠ
마르스컴퍼니님의 댓글
if ($row['it_2'] == '1')
  $cnt = $cnt + 1; // it_2 가 '1' 인 상품이 2개면 2, 3개면 3
 
if ($row['it_2'] == '')
  $cnt2 = $cnt2 + 1; // it_2 가 '' 인 상품이 3개면 3, 4개면 4


 if ($row['it_soldout'])
  alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
// => 첫번째 상품이 soldout 이면, 두번째 상품이 soldout 이 아니어도.. 여기에 체크가 되겠죠.

마르스컴퍼니님의 답변


$cnt = $cnt2 = $cnt3 = 0;
while ($row=sql_fetch_array($result)){
    if ($row['it_soldout'])
      $cnt3 = $cnt3 + 1;
 
    if ($row['it_2'] == '1')
        $cnt = $cnt + 1;      
    else 
        $cnt2 = $cnt2 + 1; 
}
if ($cnt > 0 && $cnt2 > 0) {
  alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}
if ($cnt3 > 0) {
  alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
}
주소복사
답변의 댓글
마르스컴퍼니님의 댓글
if ($row['it_2'])
  alert('예약상품');

뿐 아니라..

if ($row['it_2'] == '')
  alert('일반상품');

으로도 확인을 해보아야 됩니다.

it_2 가 ''가 아닌 NULL 값이라면.. 전자에서는.. 참이 아닌 것으로 체크되지만, 후자에서도 참으로 체크되지 않기 때문입니다.
블랑숑님의 댓글
if ($row['it_soldout'] == '1' && $row['it_2'] == '1') {
alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}

각각 하나의 조건만으로 하면 먹는데 && 하면 안 먹네요

장바구니 순서는

상품 2개

1. it_soldout=1
2. it_2=1

인 상품입니다.

두개 다 체크하고 각각 if 조건으로 하면 알러트가 잘 뜹니다

마르스컴퍼니님의 답변

echo $cnt;

는 반복문(while이나 for) 밖에서 확인해야 됩니다.

 

상품 it_2

---------

A    1

B     

C    1

 

이고 while ($row = mysql_fetch_array()) 식으로 반복문을 돌리면..

해당 쿼리 결과값을 1줄씩 가져온다고 생각하면 됩니다.

 

while ($row = mysql_fetch_array($result)) {

  if ($row['it_2'] == '1')

    $cnt = $cnt + 1;

}

 

echo $cnt; // 2가 나옵니다.

 

제가 생각한 코드는 아래가 최선인데.. 혹 제가 잘못생각했거나 실수한 부분이 있을 수 있으니.. 아래의 코드로 안된다면.. 글을 다시 올려 다른분의 의견을 받는게 좋을 듯 싶습니다.

 


$cnt = $cnt2 = $cnt3 = 0;
while ($row=sql_fetch_array($result)){
    if ($row['it_soldout'])
      $cnt3 = $cnt3 + 1;
 
    if ($row['it_2'] == '1')
        $cnt = $cnt + 1;      
    else 
        $cnt2 = $cnt2 + 1; 
}
if ($cnt > 0 && $cnt2 > 0) {
  alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}
if ($cnt3 > 0) {
  alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
}
 
주소복사
답변의 댓글
마르스컴퍼니님의 댓글
DB 에 3줄, 4줄, .. 건을 반복문 안에서.. echo 로 체크하면..

1번째 줄에 의해 echo 로 체크된 건지, 2번째 줄에 의해 echo 로 체크된 건지.. 알기 어렵습니다. (제가 $cnt = $cnt + 1; 식으로 한 건 이 이유 때문입니다.)

그리고 참고로 그누보드의 alert문은, alert 문에서 해당 페이지의 실행을 중지시킵니다.
DB 에 3줄, 4줄, .. 건을 반복문 안에.. 그누보드의 alert() 문이 있는 경우..
2번째 줄을 해석하고 있는 중에 alert() 를 수행하게 되면.. 3번째 줄, 4번째 줄은.. 해석되지 않고.. 중지됩니다.
블랑숑님의 댓글
//장바구니 품절 및 예약 상품
$sql = " select b.it_2, b.it_soldout, a.it_name
  from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
  where a.od_id = '$tmp_cart_id'
  and a.it_id = '$it_id' ";
$result = sql_query($sql);

$cnt = $cnt2 = 0;
while ($row=sql_fetch_array($result)){

                if ($row['it_soldout'])
                {
                    alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
                }

                if ($row['it_2'] == '1')
$cnt = $cnt + 1;
 
if ($row['it_2'] == '')
$cnt2 = $cnt2 + 1;
            }
if ($cnt > 0 && $cnt2 > 0) {
alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}

이 소스일 때 $cnt = 01, $cnt2=10 나오네요
마르스컴퍼니님의 댓글

$cnt = $cnt2 = $cnt3 = 0;
while ($row=sql_fetch_array($result)){
    if ($row['it_soldout'])
      $cnt3 = $cnt3 + 1;
 
    if ($row['it_2'] == '1')
        $cnt = $cnt + 1;      
    else 
        $cnt2 = $cnt2 + 1; 
}
if ($cnt > 0 && $cnt2 > 0) {
  alert("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}
if ($cnt3 > 0) {
  alert("주문하시려는 상품 중 품절인 상품이 있습니다.");
}


제가 생각한 코드는 위가 최선인데.. 혹 제가 잘못생각했거나 실수한 부분이 있을 수 있으니.. 위 코드로 안된다면.. 글을 다시 올려 다른분의 의견을 받는게 좋을 듯 싶습니다.
답변을 작성하시기 전에 로그인 해주세요.
전체 12,742
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

(주)에스아이알소프트 (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT