엑스엠엘님과 고수님들께 재차 질문드립니다. 정보
엑스엠엘님과 고수님들께 재차 질문드립니다.
첨부파일
본문
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
으로 접속하셔서 스크랩을 클릭하시면 제가 구현하려는 개념을 파악하실 수 있을 듯합니다.
※ 앨범스크랩 페이지는 현재 계속적으로 만들고 있습니다.
시간이 허락하신다면, 잠시 살펴봐 주시면 감사하겠습니다.
현재 작업중인 스킨은 공개를 목표로 약 한달 전부터 삽질하고 있습니다. ㅠㅠ
where ms_id = '{$_POST['chk_scrap']}'
and mb_id = '$member[mb_id]'
and chk_alb = '$chk_alb' ";
이 구문은 엘범스트랩에 엘범이 있는지를 확인하는게 아닌가요?
그렇다면 chk_alb = '1' 으로 해야 하지 않을까요?
결과가 0 이면 엘범스크랩이 비워있는 것이고 >0 이면 채워져 있는 것이고요.
일주일동안 실험하면서, 말씀하신 방법으로도 이미 실행해 보았습니다만,
원하는 결과를 얻지 못했습니다.
이 커리문보시면
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; 을 실행한 결과입니다.
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();
}
현재 실행을 위해 질문한 소스 중, $sql 과 검사 부분은 제외시켜 놓았습니다.
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는 질문한 내용을 삭제한 상태라는 것입니다.
이미 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문을 사용하는 것이 더 나을 것 같습니다.
다시 한번 깊이 감사드립니다. ^^