반응형
1) pw찾기에 유효성검사를 추가
2)updateForm.jsp의 비밀번호수정 폼 생성
1) pw찾기에 유효성검사를 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- /webapp/member/pwForm.jsp--%>
<!DOCTYPE html>
<html>
<!-- 비밀번호찾기버튼 클릭시 유효성검사 실시 추가 -->
<head>
<meta charset="UTF-8">
<title>비밀번호찾기</title>
<link rel="stylesheet" href="../css/main.css">
</head><body><h3>비밀번호찾기</h3>
<form action="pw.jsp" method="post" onsubmit="return input_check(this)">
<table>
<tr><th>아이디</th><td><input type="text" name="id"></td></tr>
<tr><th>이메일</th><td><input type="text" name="email"></td></tr>
<tr><th>전화번호</th><td><input type="text" name="tel"></td></tr>
<tr><td colspan="2"><input type="submit" value="비밀번호찾기"></td></tr>
<!-- submit을 누르면 pw.jsp로 넘어간다 -->
</table>
</form></body>
<script>
function input_check(f){
if(f.id.value.trim() == ""){
alert("ID입력바람")
return false;
}
else if(f.email.value.trim() == ""){
alert("Email입력바람")
return false;
}
else if(f.tel.value.trim() == ""){
alert("전화번호입력바람")
return false;
}
else if(!isValidEmail(f.email.value.trim())){
alert("올바르지않은 이메일형식")
f.email.focus()
return false;
}
else if(!isValidTel(f.tel.value.trim())){
alert("올바르지않은 전화번호형식")
f.tel.focus()
return false;
}
else{
return true;
}
function isValidEmail(email){
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._]+\.[a-zA-Z]{2,}$/;
return regex.test(email);
/*
/^ .... $/ => 정규표현식 시작과 끝
[a-zA-Z0-9._%+-]+ : 대소문자 숫자 . - % + - 중 1개이상
@[a-zA-Z0-9._]+ : @ 문자뒤에 대소문자 숫자. _ 중 한개이상
\. : .문자
[a-zA-Z]{2,} : 대소문자 2개이상
*/
}
function isValidTel(tel){
const regex = /^(02|01[0126789])-?\d{3,4}-?\d{4}$/;
return regex.test(tel);
/*
(02|01[0126789]) : 02 or 010 011 ...019
-? : - 가 0 또는 1개
\d{3,4} : 숫자 3개or4개
\d{4} : 숫자4개
*/
}
}
</script>
</html>
f.id : form하위의 name='id'인 태그
f.id.value.trim() : id태그의 값을 가져와 공백을 없앤다.
2) updateForm.jsp의 비밀번호수정 폼 생성
passwordForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>비번수정폼</title>
<%
String login = (String)session.getAttribute("login");
String id = request.getParameter("id");
String msg = "";
String url = "";
if(login==null){
msg = "로그인하세요";
url = "loginForm.jsp";
%>
<script type="text/javascript">
alert("<%=msg%>");
opener.location.href = "<%=url%>";
self.close();
</script>
<% }else{%>
<link rel="stylesheet" href="../css/main.css">
</head>
<body>
<form action="password.jsp" method="post" name="f" onsubmit="return input_check(this)">
<table><caption>비밀번호변경</caption>
<tr><th>현재 비밀번호</th>
<td><input type="password" name="pass"></td></tr>
<tr><th>변경 비밀번호</th>
<td><input type="password" name="chgpass"></td></tr>
<tr><th>재입력</th>
<td><input type="password" name="chgpass2"></td></tr>
<tr><td colspan="2">
<input type="submit" value="비밀번호변경">
<input type= "reset" value="초기화"></td></tr>
</table>
</form>
<script type="text/javascript">
function input_check(f){
if(f.chgpass.value != f.chgpass2.value){
alert("변경할비밀번호 제대로 재입력하세요");
f.chgpass2.value="";
f.chgpass2.focus();
return false;
}
return true;
}
</script>
<%} %>
</body>
</html>
MemberDto클래스의 updatePass()메서드 (DB에 반영하는 메서드)
public boolean updatePass(String id , String pass) {
Connection conn = DBConnection.getConnection();
PreparedStatement psmt = null;
//입력된아이디의 레코드의비밀번호를
//입력된 pass로 변경하는 쿼리문
String sql = "update member set pass=? where id=?";
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, pass);
psmt.setString(2, id);
if(psmt.executeUpdate()>0) {
conn.commit();
return true;
}
return false;
}
catch(Exception e) {
e.printStackTrace();
}
finally {
DBConnection.close(conn, psmt, null);
}
return false;
}
password.jsp (비밀번호변경을 처리하는곳)
<%@page import="model.member.Member"%>
<%@page import="model.member.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<!--
1.파라미터저장
2.로그인한 사용자의 비밀번호변경만 가능
로그아웃상태 : 로그인하세요 출력 후 opener창을 loginForm.jsp로 이동후 현재페이지닫기
3.비밀번호 검증 : 현재비밀번호로비교
비밀번호 오류 : 비밀번호 오류 메시지 출력 후 현재페이지를 passwordForm.jsp로이동
4.db에 비밀번호수정
boolean MemberDto.updatePass(id,비번)
수정성공 : 성공메시지 출력 후
(로그아웃되었습니다. 변경된 비밀번호로 다시로그인하세요_
opener페이지 loginForm.jsp로 이동,현재페이지닫기
수정실패 : 수정실패 메시지 출력후 현재페이지 닫기
-->
<html>
<head>
<%
String login = (String)session.getAttribute("login");
String pass = request.getParameter("pass");
String chgpass = request.getParameter("chgpass");
Member mem = new MemberDto().selectOne(login);
String myPass = mem.getPass();
if(login==null || login==""){
%>
<script type="text/javascript">
alert("로그인하세요");
opener.location.href = "loginForm.jsp"
self.close();
</script>
<!-- 입력한비번과 DB상의 비번이 맞지않는다면 -->
<%} else if(!pass.equals(myPass)){%>
<script>
alert("비밀번호오류")
location.href = "passwordForm.jsp";
</script>
<%}else{
MemberDto dto = new MemberDto();
if(dto.updatePass(login, chgpass)){ //비밀번호성공
//세선정보 초기화
session.invalidate();
%>
<script type="text/javascript">
alert("로그아웃되었습니다. 변경된 비밀번호로 다시로그인하세요");
opener.location.href = "loginForm.jsp"
self.close();
</script>
<%}else{ %>
<script type="text/javascript">
alert("실패");
self.close();
</script>
<%}} %>
'JSP' 카테고리의 다른 글
부트캠프48일(core태그 , fmt태그 , fn태그 , model2시작) (0) | 2025.04.10 |
---|---|
부트캠프47일 (EL , JSTL) (0) | 2025.04.09 |
부트캠프46일차 (delete , 사진등록 , id,pw찾기) (0) | 2025.04.08 |
부트캠프45일차(로그인 , main , sitemesh , 회원목록 , updateForm) (0) | 2025.04.07 |
부트캠프44일차(model1 ) (0) | 2025.04.04 |