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

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("예약상품과 일반상품은 같이 주문하실 수 없습니다.");
}

하면 안먹는 이유는 뭘까요? 분명히 각각 1씩 있는 상품인데

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("주문하시려는 상품 중 품절인 상품이 있습니다.");
}


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

답변을 작성하시기 전에 로그인 해주세요.
전체 48
QA 내용 검색

회원로그인

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