1번파일을 삭제 할 수 없게해주는 방법이 있을까요? > 그누4 질문답변

그누4 질문답변

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

1번파일을 삭제 할 수 없게해주는 방법이 있을까요? 정보

1번파일을 삭제 할 수 없게해주는 방법이 있을까요?

본문

write.skin.php 입니다.

글 최초작성시 1번파일 반드시 첨부하도록 했으나,

글 수정에서 1번파일의 삭제를 막지 못하고 있습니다.

즉, 업로드된 1번파일을 교체는 가능하되 삭제 할 수 없게해주는 방법이 있을까요?

반드시 구현해야할 중요한 부분인데 하수의 머리로는 감이 잡히지 않습니다.
한줄의 힌트라도 고맙겠습니다.


function fwrite_check(f)
{

중략~~*

//이미지 파일만 업로드되도록 체크

//http://www.sir.co.kr/bbs/tb.php/g4_qa/19571 사랑@마눌님 팁
//알려진 문제, 글 수정시 1번파일의 삭제를 막지못함
<?php $file_ext = "jpg|jpeg|gif|png";  ?>
var file_ext = "\\.(<?=$file_ext?>)$";
var tmp_file = document.getElementsByName("bf_file[]");

<?php if ($w != "u") { ?>
    if (tmp_file[0].value == '') {
        alert("첫번째 파일이 없습니다.\n확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
        tmp_file[0].focus();
        return;
    }
<?php } ?>

for (i = 0; i < tmp_file.length; i++) {
        if (tmp_file[i].value != '') {
            if (!((new RegExp(file_ext, "i")).test(tmp_file[i].value))) {
                alert("확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
                tmp_file[i].focus();
                return;
            }
        }
    }

//######## test line start ########
<?
/* 참고사항 http://www.sir.co.kr/bbs/tb.php/g4_qa/1379 김석수님
if ($file_length<5)
      for ($i=$file_length+1; $i<5; $i++)
        $file_script .= "add_file('');\n";
*/
?>

<?php
//수정에서
if ($w == "u") {
/*
    for ($i=0; $i<$file[count]; $i++) {
*/
//$file[count]를 이용해서 삭제를 막을 수 있나? ,,, 없나??
$file_check = $file[count] ;

        if (($file_check) >= 1) { ?>
        //alert("check1");
        //return;

 <? } if (($file_check) <= 0) {/*요렇게 할경우 수정에서 1번파일 체크가능하나, 재수정에서 삭제시 대책없음*/ ?>
        //alert("check2");
    if (tmp_file[0].value == '') {
        alert("첫번째 파일이 없습니다. check2\n확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
        tmp_file[0].focus();
        return;
    }
 <? }

//   }//for
    //alert("check3");
}//if
?>
//######## test line end ########

//이미지 파일만 업로드되도록 체크 끝

댓글 전체

코멘트 고맙습니다.

제가 잘못 적용했는지 잘 안되는군요!!^^

글 수정시 이미 업로드된 1번파일이 있다는 전제하에,,
내용만 수정하는 경우에 tmp_file[0] 체크 루틴을 막아주면 됩니다.

그런데,
이때 이미 업로드된 1번파일의 삭제를 체크하고 등록할 경우 삭제가 이루어 지는 문제를 해결하고자 하는것입니다.
+++++++++++++++++++++++++++++++++++++++++++++++
-, 수정시 > 1번파일 검사 > 있다면 통과
      "                "          > 없다면 리턴
      "                "          > 1번파일 삭제에 체크할 경우 무조건 리턴
+++++++++++++++++++++++++++++++++++++++++++++++
단순하것 같은데,,

돌아가실 지경입니다.ㅎㅎ
새글이 아닌, 수정 글이고
수정 글이 1번에 업로드가 되어있다는 전재하에

write.php 의 하단에
add_file('<input type=\'checkbox\' name=\'bf_file_del[$i]\'
부분을
add_file('<input type=\'checkbox\' ".($i==0?'disabled':'')." name=\'bf_file_del[$i]\'

하시면 삭제는 되지않고 파일 수정만 되겠군요.
고맙습니다.
편히 쉬시는 휴일에 번거롭게 해드려 죄송 합니다.
일단, 해당 그룹만 적용하는 것으로 구현해보았습니다.

            //1번파일 삭제방지를 위한 추가 - zzzz님 http://www.sir.co.kr/bbs/tb.php/g4_qa/20118
            if ($gr_id == "gallery"){//그룹명시, gallery
                $file_script .= "add_file(\"<input type='checkbox' ".($i==0?'disabled':'')." name='bf_file_del[$i]' value='1'><a href='{$file[$i][href]}'>{$file[$i][source]}({$file[$i][size]})</a> 파일 삭제";
            }
            else{
                $file_script .= "add_file(\"<input type='checkbox' name='bf_file_del[$i]' value='1'><a href='{$file[$i][href]}'>{$file[$i][source]}({$file[$i][size]})</a> 파일 삭제";
            }
            //1번파일 삭제방지를 위한 추가 끝

거듭 감사의 말씀 올립니다.
감사합니다.
갤러리에서 썸네일 생성대상 파일이며, 각종 인덱스에 리스팅되는 기본이미지에 대한 고민때문에 질문드렸던 것입니다.
글 최초 작성 및 수정시 '확장자를 지정한 이미지파일'로 제한했지만,
1픽셀짜리 이미지를 등록한다면 염려하시는 문제가 발생 할 수 있겠습니다.
최소 이미지 크기를 제한하는 방법도 생각해볼 수 있을듯 합니다.
조언 감사드립니다.
사용자의 악용을 막으려는 것인지
실수를 보완하시려는 것인지 잘 모르겠지만
실수를 보완하는 쪽이라면

올릴 때 이미지를 미리 보기해 주면 어떨까 합니다.

악용을 막는 쪽이라면 자바스크립트만으로는 부족하고
upload하기 전에 getimagesize( http://kr.php.net/manual/kr/function.getimagesize.php )로
이미지 타입하고 크기를 제한 하시면 되겠습니다.

이런 이유로 전 wrte.php 코드 수행보다 write.skin.php가 먼저 수행되어야 한다고 생각합니다.
두번재 캐이스가 맞습니다.
알려주신 방법을 연구해 보겠습니다.
초보가 하는일이라서 두서가 없습니다.
부딪치면 돌파하는,,,^^
조언 감사합니다.
rolo님께서 지적해 주신 부분은 숙제로 남겨두고,,
write.php수정 부분을 제외한 wirte.skin.php에서 처리하는 부분을 정리해보았습니다.
도움주신 고수님들께 감사의 말씀 드립니다.

//################## 이미지 파일만 업로드되도록 체크 ##################
//http://www.sir.co.kr/bbs/tb.php/g4_qa/19571 사랑@마눌님 팁
//알려진 문제, 글 수정시 1번파일의 삭제를 막지못함
<? $file_ext = "jpg|jpeg|gif|png";  ?>
var file_ext = "\\.(<?=$file_ext?>)$";
var tmp_file = document.getElementsByName("bf_file[]");
//글 수정이 아니라면
<? if ($w != "u") { ?>
if (tmp_file[0].value == '') {
    alert("첫번째 파일이 없습니다.\n확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
    tmp_file[0].focus();
    return;
    }

for (i = 0; i < tmp_file.length; i++) {
    if (tmp_file[i].value != '') {
        if (!((new RegExp(file_ext, "i")).test(tmp_file[i].value))) {
            alert("확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
            tmp_file[i].focus();
            return;
            }
        }
    }
<?
}
?>

//글 수정이라면, write.php에서 1번파일에 대한 삭제방지를 위해 체크박스 딤드 - zzzz님
//### 원본수정 ### http://www.sir.co.kr/bbs/tb.php/g4_qa/20118 write.php에서 처리 ".($i==0?'disabled':'')."
//대체파일 업로드할때 지정된 이미지 파일만 업로드되도록 체크
<? if ($w = "u") { ?>
for (i = 0; i < tmp_file.length; i++) {
        if (tmp_file[i].value != '') {
            if (!((new RegExp(file_ext, "i")).test(tmp_file[i].value))) {
                alert("확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
                tmp_file[i].focus();
                return;
            }
        }
    }
<?
}
?>

//step2
//운영중에 스킨을 변경하는 등, 만일의 경우를 대비해 1번파일이 없는 경우라면 지정파일인지 체크
<?
if ($w == "u") {
    $file_check = $file[count] ;

    if (($file_check) <= 0) { ?>

        if (tmp_file[0].value == '') {
        alert("첫번째 파일이 없습니다.\n확장자 (<?=$file_ext?>)인 파일만 업로드 가능합니다.");
        tmp_file[0].focus();
        return;
        }
<?
  }

}//if

?>

//################## 이미지 파일만 업로드되도록 체크 끝 ##################
>> write.php수정 부분을 제외한 wirte.skin.php에서 처리하는 부분을 정리해보았습니다.

이 경우

write.php에서 이미 글쓰기 처리( 이미지 업로드)까지 끝난 상황이므로
write.skin.php에서 이를 delete하는 것으로 해야 하지 않나요?
아~!
어렵습니다.
현재상태는 zzzz님께서 알려주신 방법으로 write.php에서 이미 업로드된 1번파일을 삭제하지 못하게 강제하는 부분과, 위 write.skin.php에서 추가로 처리할 부분을 적용해둔 상태입니다.

>>delete 라면 1번파일 교체시 '기존파일에 대한 삭제처리를 write.skin.php에서 해주어야 한다' 는 말씀인지요?

위 코멘트에서 알려주신 링크를 참조해서 추가 작업을 해야할것 같습니다.
근본적이고 합리적인 대책을 찾는데는 매우 많은 시간이 걸리듯 합니다.
여러모로 도와주셔서 고맙습니다.
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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