쿼리문과 for문좀 봐주세요...ㅠㅠㅠ
본문
게시판의 카테고리 항목을 수정하여 사용하고 있습니다.
항목을 5가지로 각각 폼을 만들어서 5가지만 쓸 수 있도록 했습니다.
항목1 : AAA
항목2 : BBB
항목3 : CCC
항목4 : DDD
항목5 : EEE
이렇게요...
그리고 각각 폼을 만들었지만 원래 그누데로 입력형식은 업데이트 파일에서 AAA|BBB|CCC|DDD|EEE 이런식으로 입력하게 합니다.
그러면 항목별로 각각의 이름을 부여할 수 있어서 부여했습니다.
항목1 : AAA => name : $chk_pay0
항목2 : BBB => name : $chk_pay1
항목3 : CCC => name : $chk_pay2
항목4 : DDD => name : $chk_pay3
항목5 : EEE => name : $chk_pay4
여기서 안되는 부분은요............
위 항목 1,2,3,4,5 중에서요.. 폼의 내용을 삭제합니다.
예를 들어 항목3의 내용을 지웁니다.
그러면
항목1 : AAA
항목2 : BBB
항목3 :
항목4 : DDD
항목5 : EEE
이렇게 비게 됩니다. 그리고 저장이 되겠지요... 그럼 저장을 할때에 게시판 테이블을 찾아가서 ca_name가 CCC인 것들을 모두 지우게 되는거죠...
제가 열씨미 고안해서 생각한것은요...
//지워야 할 테이블에서 ca_name 이름이 항목 3과 같은 것을 찾아 헤아립니다.
$chk_ca2=sql_fetch("select count(*) as cnt from g4_write_pay where ca_name = '$chk_pay2' ");
//만약에 빈칸으로 지워서 보냈다면 update파일에서는 null값이되어서 카운트가 0 으로 될것입니다.
//그럼 카운트가 0 인것은 고로 글쓰기 폼에서 글을 지웠다거나 다른 걸 써넣었다는 뜻이 될것입니다.
// 그래서 카운트가 0 인것은 모두 지웁니다.
if($chk_ca2[cnt]==0){
sql_query(" delete from g4_write_pay where ca_name = '{$chk_pay2}' ");
}
이렇게해서 작동하도록 for 문으로 만들었습니다..
for ($i=0; $i<5; $i++) {
$chk_ca[$i]=sql_fetch("select count(*) as cnt from g4_write_pay where ca_name = '{$chk_pay[$i]}' ");
if($chk_ca[$i][cnt]==0){
sql_query(" delete from g4_write_pay where ca_name = '{$chk_pay[$i]}' ");
}
근데... 안지워져요..ㅠㅠㅠㅠ
비 전문가라서요..ㅠㅠ
고수님들 한번 좀 봐주세요...
답변 3
$chk_ca2=sql_fetch("select count(*) as cnt from g4_write_pay where ca_name = '$chk_pay2' ");
이걸로 카운트를 가져와서 카운트가 0인것만 지운다는거 자체가 잘못된듯 합니다.
ca_name이 $chk_pay2(즉 'CCC')인게 없을때만 지우도록 했으니 지울게 없는셈인거죠.
form의 input태그들도 볼 수 있었으면 좋았겠네요.
$chk_pay0~4 값이 폼값으로 넘어온건지 아니면 AAA~EEE 값이 고정으로 들어가있는건지 알 수가 없어서 좀 헷갈립니다.
그냥 폼값으로 넘어온걸 $chk_pay0~4에 넣었다고 생각하고 예제를 짰습니다.
원하시는게 이게 맞을지는 자신이 없네요;;
// 기존 ca_name 값들 가져와서 배열에 저장
$ca_arr = array();
$ca_res = sql_query("select ca_name from g4_write_pay group by ca_name ");
while($ca_row = sql_fetch_array($ca_res)) {
$ca_arr[] = $ca_row['ca_name']
}
// $chk_pay0~4 중 일치하는 값을 제외하기
for ($i=0; $i<5; $i++) {
if(!${'chk_pay'.$i}) continue;
$key = array_search(${'chk_pay'.$i}, $ca_arr); // 원래값 배열에서 $chk_pay{n} 값 찾기
if($key!==false) unset($ca_arr[$key]); // 배열에 있으면 지우지 않기위해 배열에서 삭제
}
// 남은 값이 폼으로 넘어오지 않은 값이므로 해당값을 삭제
$tmp = implode("', '", $ca_arr);
if($tmp) echo(" delete from g4_write_pay where ca_name in ('$tmp') ");
항목3을 지우게되면 $chk_pay2 는 공백이되고 아래의 셀렉트쿼리문은
select count(*) as cnt from g4_write_pay where ca_name = ''
이렇게 날라가게 되지 않으신가요?
저 쿼리문을 출력해보세요...
그리고 항목이 많지 않다면 이렇게 해보세요.
$sql = delete from g4_write_pay where ";
for($i = 0; $i <= "항목수"; $i++){//항목수는 카테고리 갯수 저장된거 있으시죠? 그거 쓰시면되요.
if($i == 0){
$sql .="ca_name != '".$chk_pay{$i}."' ");
}else{
$sql .="and ca_name != '".$chk_pay{$i}."' ");
}
}
echo $sql;
// delete from g4_write_pay where ca_name != 'AAA' and ca_name != 'BBB' and ca_name != '' and ca_name != 'DDD' and ca_name != 'EEE'
이러면 그냥 있는 ca_name과 공백인 ca_name이 아닌 것만 지워지니깐 BBB라는 ca_name을 가지는 게시글은 지워질꺼에요.
!-->아~~
그렇군요.. 한수 배웠습니다.. 이렇게 처리해야 하는군요...
대단히 감사드립니다....