··조회 11,659
다중업로드에서의 수정시 파일삭제문제에 대해서
안녕 하세요
쥔장님 프로젝트 강좌를 보면서 혼자 끙끙대면서 간단한 게시판을 하나 만들고 있는데 그럭저럭 거의 다 만들어져 가고는 있는데요
문제가 있어서 이렇게 찾아 뵙어요
다름이 아니오라 다중업로드에서 한게시물에 2개이상의 압축파일+이미지 파일들이 올려졌는데 글을 다시 수정시에 업로드된 자료중 체크로 하나를 교체하면서 새로운 파일을 올리려고 하면 디비에서는 새로운파일 정보가 새로이 바뀌는데 계정에서는 이전파일은 그대로 남아있고 새로업된파일이 추가로 저장됩니다.
수정시에 이전파일 체크삭제 안될까요?
단 그 게시물을 삭제시엔 계정에서도 그 게시물에 속해있는 자료는 삭제 됩니다.
그렇다고 그자료교체때문에 매번 번거롭게 등록게시글을 삭제할수도 없고요
수정페이지에서 이전파일(이미 xxx파일이 존재합니다!)에 체크후 새로운 업자료를 찾아 수정하면 계정에서도 그 체크한파일을 삭제 하려 합니다.
@unlink 를 사용하여 수정페이지에 넣으면 수정페이지를 부름과 동시에 계정에서 체크도 안했는데 삭제가 되고,,, ㅜ,ㅠ
업로드 디렉토리 : ./up 0777
쥔장님 프로젝트 강좌를 보면서 혼자 끙끙대면서 간단한 게시판을 하나 만들고 있는데 그럭저럭 거의 다 만들어져 가고는 있는데요
문제가 있어서 이렇게 찾아 뵙어요
다름이 아니오라 다중업로드에서 한게시물에 2개이상의 압축파일+이미지 파일들이 올려졌는데 글을 다시 수정시에 업로드된 자료중 체크로 하나를 교체하면서 새로운 파일을 올리려고 하면 디비에서는 새로운파일 정보가 새로이 바뀌는데 계정에서는 이전파일은 그대로 남아있고 새로업된파일이 추가로 저장됩니다.
수정시에 이전파일 체크삭제 안될까요?
단 그 게시물을 삭제시엔 계정에서도 그 게시물에 속해있는 자료는 삭제 됩니다.
그렇다고 그자료교체때문에 매번 번거롭게 등록게시글을 삭제할수도 없고요
수정페이지에서 이전파일(이미 xxx파일이 존재합니다!)에 체크후 새로운 업자료를 찾아 수정하면 계정에서도 그 체크한파일을 삭제 하려 합니다.
@unlink 를 사용하여 수정페이지에 넣으면 수정페이지를 부름과 동시에 계정에서 체크도 안했는데 삭제가 되고,,, ㅜ,ㅠ
업로드 디렉토리 : ./up 0777
댓글 6
질문이 올라온지 근 일주일이 다 되어 답변을 드립니다. 죄송합니다.
질문 내용으로 봐서는, 지금쯤이면 거의 다 해결하셨을 것 같은데요^^
수정 페이지에 @unlink를 넣으면 수정페이지를 부름과 동시에 삭제가 된다고 하셨죠? 그럼 @unlink는 정상적으로 삭제되는 거네요. 맞죠?
그렇다면 @unlink를 적절한 곳에서 사용하면 될 듯한데요.
수정 폼 화면에서 삭제하려는 첨부파일을 체크표시하고 수정버튼을 누르면, 수정 실행 파일을 호출하겠지요.
그 수정 실행 파일(예를 들어, modify_ok.php)에서는 수정 폼에서 체크 표시된 첨부 파일만 삭제하도록 코딩하면 됩니다. 물론 알고 계시지만 뜻대로 잘 안되니까 질문하셨겠지요.
그러나 위 질문 내용으로 봐서는 시스템의 문제가 아니라 프로그램 소스의 문제가 확실합니다.
수정 폼 파일과 수정 실행 파일 사이의 연관 관계를 정확하게 보셔야 할 것입니다.
혹시 잘 안 되시면 소스 파일을 올려주세요. 이번에는 제 때 답변드리겠습니다.^^
그래도 바쁘신데 답변 주셔서 감사 합니다 ^^
음,, 해결은 했어요 얼렁뚱땅 말이죠 이그;;; 몬살어
어째거나 삭제페이지에 들어있는 루틴을 이용하여
체크값이 참이면 실행하고 삭제했다는 메세지 출력후 뷰페이지로 이동
[수정페이지]
<input type=checkbox name='fchk$num' value='$file_yn'><b>{$file_yn}</b> 파일이 등록되어 있습니다.
[수정확인페이지]
// up폴더에 업로드된 파일들 삭제처리
$dir ="up";
$file1="$_list[s_file_name1]";
$file1="$dir/$_list[s_file_name1]";
if($fchk1 != '') {
if(file_exists($file1)){
unlink("$file1");
echo "$file1 파일이 존재하여 지움";
} else {
echo "$file1 파일이 없음";
}
}
이랬죠,,,
삽질에 무식이 탈로나도 선택삭제 됐다는데에 기뻐서 ^^;;
위에대로 했더니 체크시엔 선택삭제되고 안할땐 일반수정 업데이트만하고 그리고 계정 기존파일삭제되고요...
이젠 디비에 아직 남아있는 정보만 삭제하면 되는데 지금 하고있거든요
이것도 곧 해결되겠죠
아윰,,, 갈수록 첨첨산중이라더니 갈수록 골머리 아파지네요
누가 그러는데 기능이 보강되면 될수록 보안은 하락세라고요
난중에 또 이런문제점 해결 할라믄 기냥 컴 뽀샤블꺼야~ 힝;;;;
[수정확인페이지]
// up폴더에 업로드된 파일들 삭제처리
$dir ="up";
$file1="$_list[s_file_name1]";
$file1="$dir/$_list[s_file_name1]";
if($fchk1 != '') {
if(file_exists($file1)){
unlink("$file1");
if($upfile1 != '') { // 해당 기존 첨부파일에 체크값이 있고, 새로운 업로드파일이 없을 경우에만 첨부파일 이름 필드 수정
mysql_query("update $board set file_name1='',s_file_name1='',upfile1_size='',upfile1_type='' where no='$no'");
echo "$file1 파일이 존재하여 지움";
} else {
echo "$file1 파일이 없음";
}
}
}
이렇게 해야 하나요?
그럼 delete 써서 아래와 같이 해야 하나요?
비디정보를 콘트롤 하는거라 섯불리 어케 못하겠네요 날라갈까봐서
if($upfile1 != '') { // 해당 기존 첨부파일에 체크값이 있고, 새로운 업로드파일이 없을 경우에만 첨부파일 이름 필드 수정
mysql_query("delete $board set file_name1='$target1',s_file_name1='$upfile1_name',upfile1_size='$upfile1_size',upfile1_type='$upfile1_type' where no='$no'");
제가 원하는거 모두 해결했어요
디비정보제거도 해결 했고요
기존 수전확인 업데이트문에 또하나의 체크 업데이트넣었더니 되드라고요 ^^
if($upfile1 != '') { // 첨부한 파일이 있을 경우에만 첨부파일 이름 필드 수정
mysql_query("update $board set file_name1='$target1',s_file_name1='$upfile1_name',upfile1_size='$upfile1_size',upfile1_type='$upfile1_type' where no='$no'");
}
if($fchk1 != '') { //기존데이터에 새로운업이 있다면 위의거로, 업로드없고 기존데이터만 삭제체크시엔 이걸로 이행.
mysql_query("update $board set file_name1='$target1',s_file_name1='$upfile1_name',upfile1_size='$upfile1_size',upfile1_type='$upfile1_type',down='$down' where no='$no'");
}
어차피 프로그래밍이라는 것이 혼자서 로직을 생각하고 실패하고 해결해가는 과정인데, 스스로 해결하셨다니 축하드립니다. 위와 같은 식으로 조금씩 조금씩 변경해나가면 웬만한 경우에는 혼자서 거의 다 해결하실 거라고 믿습니다.
축하합니다!!!