YJ의 새벽
JDBC 활용 연습용10. ( 비밀번호 변경 ) 본문
-- 폼형식의 changePwValidate() 함수를 써먹자.
-- myPage.js 파일 ( 유효성 검사 )
/////////////////////////////////////////////////// 비밀번호 수정
function printAlert(el, message){ // 매개변수 el은 요소
alert(message);
el.focus();
return false;
}
// 비밀번호 변경 제출 시 유효성 검사
function changePwValidate(){
// 비밀번호 변경 관련 input 요소 얻어오기
const currentPw = document.getElementsByName("currentPw")[0];
const newPw = document.getElementsByName("newPw")[0];
const newPwConfirm = document.getElementsByName("newPwConfirm")[0];
// 비밀번호 정규표현식
const regEx = /^[\w!@#_-]{6,30}$/;
// 현재 비밀번호 미작성
if(currentPw.value.trim().length == 0){
/*alert("현재 비밀번호를 입력해주세요.");
currentPw.focus();
return false;*/
return printAlert(currentPw, "현재 비밀번호를 입력해주세요.");
}
// 새 비밀번호
// 미작성
if(newPw.value.trim().length == 0){
alert("새 비밀번호를 입력해주세요.");
newPw.focus();
return false;
}
// 유효하지 않은 경우
if(!regEx.test(newPw.value)){
alert("영어, 숫자, 특수문자(!,@,#,-,_) 6~30 글자 사이로 작성해주세요.");
newPw.focus();
return false;
}
// 새 비밀번호 확인
// 미작성
if(newPwConfirm.value.trim().length == 0){
return printAlert(newPwConfirm, "새 비밀번호 확인을 입력해주세요.");
}
// 새 비밀번호 != 새 비밀번호 확인
if(newPw.value != newPwConfirm.value){
return printAlert(newPwConfirm, "새 비밀번호가 일치하지 않습니다.");
}
return true; // 위 조건을 모두 수행하지 않은 경우 true 반환
}
-- MyPageChangePwServlet.class . 서블릿클래스 .
@WebServlet("/member/myPage/changePw")
public class MyPageChangePwServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = "/WEB-INF/views/member/myPage-changePw.jsp";
req.getRequestDispatcher(path).forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String currentPw = req.getParameter("currentPw"); // 입력할 현재비밀번호
String newPw = req.getParameter("newPw"); // 새로운 비밀번호
HttpSession session = req.getSession();
Member loginMember = (Member) session.getAttribute("loginMember");
int loginNo = loginMember.getMemberNo(); // 로그인된 회원번호
MemberService service = new MemberService();
try {
int result = service.changePw(loginNo, currentPw, newPw);
if (result > 0) {
session.setAttribute("message", "비밀번호가 변경되었습니다");
} else {
session.setAttribute("message", "비밀번호를 다시 확인해주세요");
}
} catch (Exception e) {
e.printStackTrace();
}
resp.sendRedirect("changePw");
}
}
-- MemberService.class
/**
* 비밀번호 바꾸기 서비스
*
* @param loginNo
* @param currentPw
* @param newPw
* @return
*/
public int changePw(int loginNo, String currentPw, String newPw) throws Exception {
Connection conn = getConnection();
int result = dao.checkPw(conn, loginNo, currentPw); // 현재비밀번호 맞는지 체크 후
if (result == 1) {
result = dao.changePw(conn, currentPw, newPw); // 맞다면 비밀번호를 바꾸자.
}
if (result > 0) commit(conn);
else rollback(conn);
close(conn);
return result;
}
-- MemberDAO.class ( 입력한 비밀번호가 현재비밀번호인지 체크한후, 맞다면 update 문 실행.
/** 현재비밀번호 / 로그인비밀번호 같은지 체크 DAO
* @param conn
* @param loginNo
* @param currentPw
* @return
*/
public int checkPw(Connection conn, int loginNo, String currentPw) throws Exception{
int result=0;
try {
String sql = prop.getProperty("checkPw");
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, loginNo);
pstmt.setString(2, currentPw);
rs= pstmt.executeQuery();
if ( rs.next() ) {
result = 1 ;
}else {
result = 0 ;
}
}finally {
close(rs);
close(pstmt);
}
return result;
}
/** 비밀번호 바꾸기 .
* @param conn
* @param currentPw
* @param newPw
* @return
*/
public int changePw(Connection conn, String currentPw, String newPw) throws Exception{
int result = 0;
try {
String sql = prop.getProperty("changePw");
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, newPw);
pstmt.setString(2, currentPw);
result = pstmt.executeUpdate();
}finally {
close(pstmt);
}
return result;
}
-- member-sql.xml ( pw 확인 , pw 업데이트 쿼리문 )
<entry key="checkPw">
SELECT * FROM MEMBER
WHERE MEMBER_NO=?
AND MEMBER_PW= ?
</entry>
<entry key="changePw">
UPDATE MEMBER SET
MEMBER_PW = ?
WHERE MEMBER_PW = ?
</entry>
--------- 페이지 마다 존재하는 footer.jsp , header.jsp 부분에 sessionScope.message 를 넣어주자
<c:if test="${!empty sessionScope.message}">
<script>
alert("${message}");
</script>
<c:remove var = "message" scope="session"/>
</c:if>
------- result ( update문 실행결과 ) 를 가지고 , alert 창을 띄어준다 .
'SelfStudy > JDBC' 카테고리의 다른 글
JDBC 활용 연습용11. ( 회원탈퇴 ) (0) | 2023.04.04 |
---|---|
JDBC 활용 연습용9. ( 회원정보수정 ) (0) | 2023.03.31 |
JDBC 활용 연습용8. ( 로그인후 마이페이지 창 (사진업로드) ) (0) | 2023.03.30 |
JDBC 활용 연습용7. ( 회원가입 + DB저장 ) (0) | 2023.03.30 |
JDBC 활용 연습용6. ( 닉네임 중복확인 + 전화번호유효성검사 ) (0) | 2023.03.29 |
Comments