sql을 불러서 검사를 하려고 합니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

sql을 불러서 검사를 하려고 합니다. 정보

sql을 불러서 검사를 하려고 합니다.

본문

스크랩 게시물에 전체선택/개별선택 체크박스를 만들고
체크한 사항에 대해 업데이트하기 위해 다음과 같이 업데이트소스를 만들었습니다.

★ 색깔 부분이 저의 질문 사항입니다.
scrap.skin.php의 체크박스에 체크한 항목을 아래 소스로 넘겨서,
스크랩테이블에 추가한 필드(chk_alb)에 '1'이 인서트되어 있는가 없는가를 검사하고 싶습니다.


<?
include_once("./_common.php");

if (!$member[mb_id])
    alert("회원만 이용하실 수 있습니다.");

$sql = " select count(*) as cnt from $g4[scrap_table]
          where ms_id = '{$_POST['chk_scrap']}'
              and mb_id = '$member[mb_id]'
              and chk_alb = '$chk_alb' ";
$row = sql_fetch($sql);

if ($row[chk_alb]='1')
 alert("하나 이상의 게시물이 이미 앨범스크랩에 포함되어 있습니다.", "./scrap.php?page=$page");
// 이미 앨범스크랩에 포함되어 있다면, 일반스크랩으로 이동

for($i=0; $i<count($_POST['chk_scrap']); $i++){
sql_query(" update $g4[scrap_table] set chk_alb = '1' where ms_id ='{$_POST['chk_scrap'][$i]}' and mb_id = '$member[mb_id]' ");
}
goto_url("./scrap_album.php?page=$page"); //업데이트된 후, 앨범스크랩으로 이동
?>


※ scrap.skin.php의 체크박스에 체크한 것을 위 소스를 통해 업데이트하려고 합니다.
※ 체크박스에서 체크한 사항은 {$_POST['chk_scrap']}으로 표시

※ chk_alb 는 스크랩 테이블에 별도로 삽입한 필드입니다.
chk_alb]='1'은 앨범스크랩에 포함된 것, ' '이면 포함되지 않은 것


위와 같이 만들었는데,
★ "이미 앨범스크랩에 포함되어 있습니다." 검사를 제대로 하지 못합니다.

앨범스크랩에 포함되어 있건, 포함되지 않았건 간에
모두 "이미 앨범스크랩에 포함되어 있습니다." 메시지가 나옵니다.

어떻게 수정해 주어야 할까요?
고수님들의 조언을 부탁드립니다. (_ _)

  • 복사

댓글 전체

별도로 만든 '앨범스크랩'이라고 했는데 위 내용을 보면
별도스크랩 테이블을 불러오는게 아니네요.
별도 스크랩이라면 쿼리가 업데이트가 아니고 인서트여야  맞다고 봅니다.
제가 질문요지를 잘못이해한것인가요?
으음.. 불러오는 쿼리문이 현재 스크랩 테이블을 불러오는거 같은데
거기에 데이터가 있다면  업데이트가 맞습니다.
또는 데이터가 없다면 인서트로 넣어야 합니다.
두 분 모두 답변 감사합니다.

그런데... 특수한 상황에 대한 저의 설명이 부족했나 봅니다.
별도로 만든 '앨범스크랩' 테이블이나 php는 위 소스로 불러오는 게 아닙니다.
업데이트된 이후에 별도로 만든 '앨범스크랩'으로 넘어가는 것입니다.
(위 소스를 통해 업데이트되는 내용이 반영된 '앨범스크랩'은 따로 만들어 두었습니다.)

위 소스에서의 질문은 별도로 만든 '앨범스크랩' 쿼리를 부르거나, '앨범스크랩'으로의 업데이트 내용에 대한 것이 아닙니다.
★색깔 부분이 저의 질문입니다.

위 질문을 다시 정리할게요.

1) 일반적인(원본) 스크랩 테이블에 앨범스크랩에 포함되는 여부를 보여주는 필드를 추가했습니다.
  --> 필드명 : chk_alb
2) 스크랩 popin 과정에서 앨범스크랩에도 포함하겠는가 여부를 묻습니다.
3) 앨범스크랩에 포함함...에 체크하면 스크랩 테이블의 추가된 필드에 '1' 내용이 인서트됩니다.

4) popin 업데이트 과정이 끝난 후, 사용자가 스크랩을 엽니다.
5) 스크랩 목록에는 앨범스크랩에 포함되는 게시물과 앨범스크랩에 포함되지 않는 게시물이 구분되어 있습니다.
6) 만약, 사용자가 앨범스크랩에 포함되지 않은 게시물을 앨범스크랩에 포함시키고 싶다면, 체크박스에 체크를 하여 위 소스로 업데이트시키는 것입니다.

★ 저의 궁극적인 질문 내용은, 위의 색깔 표시 부분입니다.
체크박스에 체크한 항목들 중에서
추가된 필드 chk_alb에 '1'이 인서트되어 있는가 아닌가 여부를 판가름해서
인서트되어 있다면, "이미 앨범스크랩에 포함되어 있습니다." 경고창이 나오게 하는 것입니다.

사용자가 체크한 항목 중에서 이미 앨범스크랩에 포함된 항목이 있다면,
위 색깔 표시 부분을 통해서 검사를 하고자 하는 것입니다.
균이님, 답변 감사합니다.
제가 테스트할 때 위 식으로도 해 보았습니다만, 역시 안됩니다.

if문도 문제겠지만, sql문에서 설정이 잘못된 것 같습니다.
그걸 잡지 못하고 있습니다.
$sql = " select count(*) as cnt from $g4[scrap_table]
          where ms_id = '{$_POST['chk_scrap']}'
              and mb_id = '$member[mb_id]'
              and chk_alb = '$chk_alb' ";
$row = sql_fetch($sql);

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

==>

$sql = " select count(*) as cnt from $g4[scrap_table]
          where ms_id = '{$_POST['chk_scrap']}'
              and mb_id = '$member[mb_id]'
              and chk_alb = '$chk_alb' ";
$row = sql_fetch($sql);

if ($row['cnt'] > 0 )


==

그런데 왜 검사하나요?
엑스엠엘님 답변 감사합니다.
앨범스크랩을 별도로 만드려고 합니다.
일반스크랩에 앨범스크랩이 포함되는 개념으로 만들고 있습니다.

아... 그런데 요전에 엑스엠엘님께서 알려주신 echo $sql; exit;를 넣어서 문제를 파악해 보는 중인데,
chk_alb 필드값을 읽어내지 못합니다.
(chk_alb 필드는 1 또는 '' 값이 들어갑니다. 1--> 앨범스크랩에 포함, ''-->값이 없으면 포함하지 않음)

ms_id = '{$_POST['chk_scrap']}'도 for문 안으로 들어가서 [$i]를 붙여줘야 값을 읽어내네요.
© SIRSOFT
현재 페이지 제일 처음으로