자율 학습/학습
개수, name, id가 유동적인 태그의 값을 수정하는 페이지
60cod
2022. 9. 27. 17:56
수정 페이지에 기존의 값들을 불러왔을 때,
그 자리에 그대로 새로 집어넣을 수도 있고(->update)
다른 칸을 만들어 새로 집어넣을 수도 있고(->insert)
기존의 자리는 지우기만 할 수도 있고(->delete 처리)
여러가지로 복잡한데 그 자리를 찾아서 맞는 쿼리를 쓰기가 난감하기 때문에
모 테이블에 있는 데이터만 update로 하고
나머지 테이블에 있는 데이터는 전체 delete 처리하고
싹 새로 insert 하는 게 간단하다.
재료는 그런식으로 할 수 있는데 문제는 사진 첨부..
프리뷰를 만들어놨기 때문에 내가 아닌 가상의 사용자는 이게 파일이 있다고 생각하겠지만 실제로는 그렇지 않은 거다.
그래서 기존 이미지 파일을 수정하지 않고 그대로 등록(수정) 한다면, 기존의 데이터는 이미지가 전부 삭제된 채로 올라가게 된다.
그리고 나는 등록 페이지에서 첨부된 이미지의 개수를 세는 변수를 파일 업로더 컨트롤러로 만들어진 변수 fileName의 개수를 세서 그 값을 넣어 만들어줬었다. 근데 어떤 이미지는 기존 값 그대로 가져가야 하고 어떤 이미지는 새로 첨부되었으니 동일하게 할 수가 없다.
쓰다 말았음..
+ 컨트롤러에서 수정에 대해
case "update" :
//현재 글 번호
rno = params.get("no");
//insert, update 때는 rNo를 씀
params.put("rNo", rno);
//update 글번호, 작성자, 제목, 내용
dao.update("recipe.updateR", params);
//새로 하는 insert 사진
//등록한 사진 개수
pc = Integer.parseInt(params.get("picCnt"));
//등록한 사진 각각 insert 해주기
for(var i = 0; i<pc; i++) {
String one = params.get("pic" + i);
if(i == 0) {
params.put("img", one);
dao.insert("recipe.insertMI", params);
} else {
params.put("img", one);
dao.insert("recipe.insertDI", params);
}
}
//새로 하는 insert 재료
//입력한 재료의 개수
mc = Integer.parseInt(params.get("matCnt"));
//재료 각각 insert
for(var i = 0; i<mc; i++) {
//name 하나씩 담기
String n = params.get("matNm" + i);
System.out.println(n);
String q = params.get("matQt" + i);
System.out.println(q);
//새로운 키로 넣어주기
params.put("rMatNm", n);
params.put("rMatQt", q);
//insert
dao.insert("recipe.insertM", params);
}
//일단 기존 데이터 중 재료, 이미지는 삭제
cnt = dao.update("recipe.deleteM", params);
dao.update("recipe.deleteI", params);
break;
등록에 성공하면 이전 데이터를 삭제시키고 싶어서 삭제 코드를 하단에 뒀더니
기껏 등록한 데이터까지 삭제시켜버렸다 ㅋㅋㅋㅋ 이런 바보같은 실수를..