엑스엠엘님과 고수님들께 재차 질문드립니다. > 그누4 질문답변

그누4 질문답변

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

엑스엠엘님과 고수님들께 재차 질문드립니다. 정보

엑스엠엘님과 고수님들께 재차 질문드립니다.

첨부파일

물한모금스크랩작업.zip (11.5K) 1회 다운로드 2010-02-19 10:43:41

본문

http://sir.co.kr/bbs/tb.php/g4_qa/152420

위에서 쿼리를 설정해서 필드값을 검사하는 질문을 드렸습니다.


아... 그런데, 스크랩테이블에 제가 뭔가 이상하게 필드를 추가한 것이 아닌가 싶습니다.
엑스엠엘님께서 일전에 알려주신 팁으로 쿼리가 어떻게 불어와지는지 검사해 보았습니다.
(http://sir.co.kr/bbs/tb.php/g4_qa/152086)
==> echo $sql; exit; 를 실행해 보았습니다.


<$sql을 부르고 echo $sql; exit;를 실행한 결과>

http://sir.co.kr/bbs/tb.php/g4_qa/152420 에서 엑스엠엘님께서 알려주신 소스를 넣고
echo $sql; exit; 실행했습니다.
$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' ";
echo $sql; exit;
↓↓↓↓↓↓
select count(*) as cnt from g4_scrap where ms_id = 'Array' and mb_id = 'admin' and chk_alb = ''


② 이번에는 $sql의 ms_id = '{$_POST['chk_scrap']}에 [$i]를 붙여넣고, echo $sql; exit; 실행했습니다.
↓↓↓↓↓↓
select count(*) as cnt from g4_scrap where ms_id = '' and mb_id = 'admin' and chk_alb = ''


③ 마지막으로 $sql을 for문 안으로 넣고 echo $sql; exit; 실행했습니다.
(이곳에는 당연히 ms_id = '{$_POST['chk_scrap'][$i]}로 설정)
↓↓↓↓↓↓
select count(*) as cnt from g4_scrap where ms_id = '72' and mb_id = 'admin' and chk_alb = ''


★ 테스트한 게시물들은 이미 스크랩 popin 과정에서 chk_alb 필드에 '1' 값을 넣어 업데이트했습니다.
★ phpmyadmin에서도 확인했습니다.


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


echo $sql; exit;를 실행해서 $sql 을 얻어낸 결과,
제가 스크랩테이블에 새로 추가한 필드 'chk_alb'의 결과물이 나타나지 않습니다.
아마도, chk_alb 필드에 들어가는 값이 '1' 또는 ' '(값 없음)이기 때문인 것 같은데요?


chk_alb 필드값이 '1' 이면 앨범스크랩에서 출력하라!
chk_alb 필드값이 ' '(값 없음)이면 앨범스크랩에서 출력하지 않는다!


위의 개념으로 추가한 필드거든요.
이런 경우는, 쿼리에서 값을 읽어오지 못하는 건가요?

어떻게 처리해야 할까요?
설 전 금요일부터 이번주 현재까지 계속 끙끙하고 있습니다.

http://blgom.com/?mw_main=G02
테스트ID popopo PW 1234
으로 접속하셔서 스크랩을 클릭하시면 제가 구현하려는 개념을 파악하실 수 있을 듯합니다.
※ 앨범스크랩 페이지는 현재 계속적으로 만들고 있습니다.


시간이 허락하신다면, 잠시 살펴봐 주시면 감사하겠습니다.
현재 작업중인 스킨은 공개를 목표로 약 한달 전부터 삽질하고 있습니다. ㅠㅠ

댓글 전체

★★★ 헉!! 글이 왜 짤리는지 모르겠네요??????

위의 개념으로 추가한 필드거든요.
이런 경우는, 쿼리에서 값을 읽어오지 못하는 건가요?

어떻게 처리해야 할까요?
설 전 금요일부터 이번주 현재까지 계속 끙끙하고 있습니다.

http://blgom.com/?mw_main=G02
테스트ID popopo PW 1234
으로 접속하셔서 스크랩을 클릭하시면 제가 구현하려는 개념을 파악하실 수 있을 듯합니다.
※ 앨범스크랩 페이지는 현재 계속적으로 만들고 있습니다.


시간이 허락하신다면, 잠시 살펴봐 주시면 감사하겠습니다.
현재 작업중인 스킨은 공개를 목표로 약 한달 전부터 삽질하고 있습니다. ㅠㅠ
$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' ";

이 구문은 엘범스트랩에 엘범이 있는지를 확인하는게 아닌가요?
그렇다면 chk_alb = '1' 으로 해야 하지 않을까요?
결과가 0 이면 엘범스크랩이 비워있는 것이고 >0 이면 채워져 있는 것이고요.
텍와이드님 관심 가져주셔서 감사합니다.
일주일동안 실험하면서, 말씀하신 방법으로도 이미 실행해 보았습니다만,
원하는 결과를 얻지 못했습니다.
select count(*) as cnt from g4_scrap where ms_id = '72' and mb_id = 'admin' and chk_alb = ''
이 커리문보시면
and chk_alb = '' 는 그리고 chk_alb 에 값이 없는걸 출력해라인대
chk_alb 값이 1이 들어있으면 당연히 안나오지않을까요
살펴주셔서 감사합니다.

select count(*) as cnt from g4_scrap where ms_id = '72' and mb_id = 'admin' and chk_alb = ''


$sql을 부른 상황을 살펴보기 위해 임시로 echo $sql; exit; 을 실행한 결과입니다.
php 스크립트란 무엇을 말씀하시는지 제가 잘 몰라서...

1) 일단, 현재 질문에 관련된 스크랩소스를 첨부파일로 올렸습니다.

2) 아래는 http://sir.co.kr/bbs/tb.php/g4_qa/152420 (최근 제가 질문한 내용의 php)로 넘어가기 전
scrap.skin.php에서 앨범으로의 업데이트 관련 스크립트입니다.

// 게시물 선택
function all_checked(sw) {
    var f = document.fboardlist;
    for (var i=0; i<f.length; i++) {
        if (f.elements[i].name == "chk_scrap[]")
            f.elements[i].checked = sw;
    }
}
function check_confirm(str) {
    var f = document.fboardlist;
    var chk_count = 0;
    for (var i=0; i<f.length; i++) {
        if (f.elements[i].name == "chk_scrap[]" && f.elements[i].checked)
            chk_count++;
    }
    if (!chk_count) {
        alert(str + "할 게시물을 하나 이상 선택하세요.");
        return false;
    }
    return true;
}

// 선택한 게시물 삭제
function select_delete() {
    var f = document.fboardlist;
    str = "삭제";
    if (!check_confirm(str))
        return;
    if (!confirm("선택한 게시물을 정말 "+str+" 하시겠습니까?\n\n한번 "+str+"한 자료는 복구할 수 없습니다"))
        return;
    f.action = "./scrap_delete.php"; //앨범삭제로 이동
    f.submit();
}

// 선택한 게시물 앨범스크랩 업데이트
function select_album_update() {
    var f = document.fboardlist;
    str = "앨범스크랩에 포함";
    if (!check_confirm(str))
        return;
    if (!confirm("선택한 게시물을 "+str+" 하시겠습니까?"))
        return;
    f.action = "./scrap_album_update.php"; //앨범업데이트로 이동
    /***scrap_album_update.php <== 제가 최근 질문한 php의 이름입니다.***/
    f.submit();
}
아, 아래 http://sir.co.kr/bbs/tb.php/g4_qa/152420 주소에서 제가 질문했던 내용이
scrap_album_update.php입니다. 전체소스입니다.
별다른 스크립트는 사용하지 않았습니다.

제가 최근 질문드린 최초의 소스 그대로 다시 올리겠습니다.
↓↓↓↓↓↓
<?
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"); //업데이트된 후, 앨범스크랩으로 이동
?>

* 첨부파일에 올려놓은 것은, "$sql을 불러 검사하는 부분"($sql = ~ alert("하나 이상의 게시물이 이미 앨범스크랩에 포함되어 있습니다.", "./scrap.php?page=$page"); )을 제거한 상태입니다.
첨부파일에
upgrade_scrap,
bbs/scrap, scrap_popin_update, scrap_album_update,
skin/member/basic/scrap.skin, scrap_popin.skin
파일을 넣었습니다.

* 위 댓글에서 제가 드린 말씀은,
첨부파일의 scrap_album_update.php는 질문한 내용을 삭제한 상태라는 것입니다.
현재 스크랩에 a, b, c가 있다고 하고
이미 c는 앨범 스크랩이라고 했을 때,

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]' ");
}

이거 하나로 충분합니다.

1인 것은 그대로 1로 update하면 되니까요.(실제로 이런 경우 mysql은 처리하지 않습니다)


a,b,c 중에서 c는 이미 했기에 a, b만 처리해 주면 되는데,
c가 이미 되어 있다고 a, b까지 안 해 버리는 것보다는 위의 방식이 낫지 않을까요?

mysql_affected_row()를 써서 검사하면 a, b, c 중에서 a, b만 처리된 것을 알아 낼 수 있습니다.

그래서 나중에 a, b, c 중에서 a, b만 처리되었다고 alert 창 하나 띄워 주는 것이 좋지 않을까 합니다.
참 깜박하고 답을 안 적었네요.
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]' ");
}
==>
//if( is_array( $_POST['chk_scrap']))
$ms_ids= implode(',', $_POST['chk_scrap']);

sql_query(" update $g4[scrap_table] set chk_alb = '1' where ms_id in ( $ms_ids) and mb_id = '$member[mb_id]' ");
}
엑스엠엘님 너무나 감사드립니다.
끝까지 신경 써 주시고 살펴 주신 점, 어떻게 감사의 말씀을 드려야 할지 모르겠네요. (__)

경고창 부분은 일단 제 실력이 한참 모자라기 때문에 차차 연구해 나가겠습니다.
사실 짜집기로 개념을 모르고 for문을 사용했는데,
말씀하신 대로 if문을 사용하는 것이 더 나을 것 같습니다.

다시 한번 깊이 감사드립니다. ^^
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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