글 삭제를 할 때 

registerGET으로 화면을 보여줍니다.

실제 글을 삭제할 때는 

<form method="post">
	<button type="submit" class="btn btn-danger">삭제</button>
    	<button class="btn btn-info" onclick="location.href='/board/listPage'">취소</button>
</form>

로 삭제를 하는데 

위의 코드처럼 진행하면 버튼의 타입이 submit이 아니더라도

form 태그의 메서드가 post로 설정되어 있기 때문에 버튼을 클릭하게 되면 

취소버튼을 눌러도 삭제가 됩니다.

 

그렇기에 다음과 같은 방법을 사용했습니다.

<form method="post">
	<button type="submit" class="btn btn-danger">삭제</button>
   	<button type="button" class="btn btn-info" onclick="history.back()">취소</button>
</form>

 

버튼의 타입을 "button"으로 주고 onclick 함수를 이용하여 전 페이지로 이동하도록 하면 

form의 post가 실행되지 않고 전페이지로 이동하게 됩니다.

안녕하세요

저번장에서는 회원탈퇴 후에 게시판 목록에 사용자의 아이디가 그대로 남아있는 애로사항이 있었는데요

이번장에서도 비슷한 문제를 해결해도록 하겠습니다.

 

b라는 사용자가 a가 작성한 게시물에 댓글을 남겼습니다.

게시물의 댓글을 남기고 한참 뒤에 회원탈퇴를 하였는데요

탈퇴한 회원의 정보가 남아있으면 안되기 때문에 

회원탈퇴를 진행하면 게시글이든 다른 게시글에 남긴 댓글이든 모두 삭제가 되야합니다.

 

저번장에서 사용한 fk와 비슷합니다

 

alter table reply add constraint fk_reply foreign key (replyer) references user(identification) on delete cascade;

 

다음과 같

reply테이블에 있는 replyer와 user에 있는 identification을 이어주는 것인데요?

뒤에 있는 on delete cascade는 identification과 관련되어 있는 모든 행을 삭제한다 라는 의미를 가지고 있기에

b가 회원탈퇴를 하면 identification과 관련된 replyer가 삭제되어

기록이 남지 않게 됩니다.

 

제목 그대로 회원탈퇴를 했는데 게시판 목록에 회원탈퇴한 사용자의 기록이 남는 애로사항이 있습니다.

 

먼저 어떤 오류인지 확인해볼까요?

 

 

먼저 gggg라는 사용자가 글을 작성했습니다.

하지만 사용자가 저희의 사이트가 마음에 들지 않아 회원탈퇴를 하였는데요

 

 

 

 

이제 게시판으로 가보겠습니다.

 

 

 

분명히 gggg라는 사용자가 회원탈퇴를 했지만 기록이 그대로 남아 있습니다.

 

저희는 사용자가 회원탈퇴를 하면 게시판에 있는 기록들도 모두 폐기하고 싶습니다.

바로 foreign key를 이용하는 것인데요.

 

user 테이블에는 identification 컬럼이 있습니다.

foreign key를 사용하려면 board 테이블에도 identification 컬럼이 있어야 합니다.(굳이 같을 필요는 없습니다. 편의를 위해!)

우선 board 테이블에 identification 컬럼을 추가하겠습니다.

 

alter table board add identification varchar(50) not null;

 

 

identification 컬럼이 추가되었습니다.

 

이제 foreign key를 추가 해보겠습니다.

 

alter table board add CONSTRAINT fk_user FOREIGN KEY (identification) REFERENCES user(identification) ON DELETE CASCADE;

 

ON DELETE CASCADE


- 외래 키에서 참조하는 키가 포함된 행을 삭제하려고 하면 해당 외래 키가 포함되어 있는 모든 행도 삭제


ON UPDATE CASCADE


- 외래 키에서 참조하는 키 값이 포함된 행에서 키 값을 업데이트 하면 해당 외래 키를 구성하는 모든 값도 키에 지정된 새 값으로 업데이트되도록 지정


해당 쿼리를 실행하고 워크벤치에 디렉터리 구조를 보면

 

 

정상적으로 foreign key가 생겼습니다.

 

아 그리고 좀전에

alter table board add identification varchar(50) not null; 

해당 컬럼을 추가했는데 조건을 not null로 했기 때문에

 

/board/register.sjp의 해당 코드를 추가하겠습니다.

 

<div>
	<label for="identification">아이디</label>
	<input type="text" name="identification" id="identification" value="${user.identification}" readonly="readonly" required/>		
</div>
			
<div>
	<label for="name">작성자</label>
	<input type="text" name="name" id="name" value="${user.name}" readonly="readonly" required/>		
</div>

 

identification 컬럼을 추가했는데 글작성 기능에서 identification 데이터를 넣어주지 않으면 에러가 발생합니다!

 

boardMapper.xml도 수정하겠습니다.

 

<insert id="create">
	insert into board (title, contents, identification, name)
	values( #{title}, #{contents}, #{identification}, #{name})
</insert>

 

identification을 추가했습니다.

 

 

해당 코드는 테이블의 정보를 보여주는 쿼리 인데요

show full columns from board;

 

아까 alter로 넣어준 컬럼들이 제대로 실행됐는지 확인 해보겠습니다.

 

 

정상적으로 들어갔네요!

 

이제 글과 댓글을 작성하고 회원을 삭제해보겠습니다.

 

 

 

데이터가 정상적으로 삭제되었습니다.

+ Recent posts