| 세션체크
include를 이용하여
세션내에 아이디정보가 없으면 로그인화면으로 이동시키는 jsp파일을
코드 상단에 넣어주면
url을 통한 무단접속을 방지해줌으로 보안상 도움이된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
if(session.getAttribute("userid") == null){
response.sendRedirect("../login.jsp");
return;
}
%>
1. 회원정보수정
회원가입과 비슷하다. insert대신 update 사용 - info.jsp
(* 여기서는 비밀번호는 수정기능은 넣지않았다).
유효성검사용 js 사용 - info.js
정보수정반영 - info_ok.js
info.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.koreait.db.Dbconn" %>
<%@ include file = "./include/sessioncheck.jsp"%>
<%!
public static boolean compareHobby(String[] arr, String item){
for(String i : arr){
if(i.equals(item)){
return true;
}
}
return false;
}
%>
<%
// String idx = (String)session.getAttribute("idx")//idx를 사용하여 검색하면 속도가 유리(인덱싱되어있기때문)
String userid = (String)session.getAttribute("userid");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String mem_username = "";
String mem_hp = "";
String mem_email = "";
String[] hobbyArr = null;
String mem_ssn1 = "";
String mem_ssn2 = "";
String mem_zipcode = "";
String mem_address1 = "";
String mem_address2 = "";
String mem_address3 = "";
String mem_gender = "";
try{
conn = Dbconn.getConnection();
if(conn != null){
//*(에스터리스크)절대 사용하지 말것!
String sql = "select * from tb_member where mem_userid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userid);
rs = pstmt.executeQuery();
if(rs.next()){
mem_username = rs.getString("mem_username");
mem_hp = rs.getString("mem_hp");
mem_email = rs.getString("mem_email");
hobbyArr = rs.getString("mem_hobby").split(" ");
mem_ssn1 = rs.getString("mem_ssn1");
mem_ssn2 = rs.getString("mem_ssn2");
mem_zipcode = rs.getString("mem_zipcode");
mem_address1 = rs.getString("mem_address1");
mem_address2 = rs.getString("mem_address2");
mem_address3 = rs.getString("mem_address3");
mem_gender = rs.getString("mem_gender");
}
}
}catch(Exception e){
}
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>정보수정</title>
<script defer src="./js/info.js"></script>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
function sample6_execDaumPostcode() {
new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 각 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var addr = ''; // 주소 변수
var extraAddr = ''; // 참고항목 변수
//사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
addr = data.roadAddress;
} else { // 사용자가 지번 주소를 선택했을 경우(J)
addr = data.jibunAddress;
}
// 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
if(data.userSelectedType === 'R'){
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
extraAddr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if(data.buildingName !== '' && data.apartment === 'Y'){
extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if(extraAddr !== ''){
extraAddr = ' (' + extraAddr + ')';
}
// 조합된 참고항목을 해당 필드에 넣는다.
document.getElementById("sample6_extraAddress").value = extraAddr;
} else {
document.getElementById("sample6_extraAddress").value = '';
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('sample6_postcode').value = data.zonecode;
document.getElementById("sample6_address").value = addr;
// 커서를 상세주소 필드로 이동한다.
document.getElementById("sample6_detailAddress").focus();
}
}).open();
}
</script>
</head>
<body>
<h2>정보수정</h2>
<form action="./info_ok.jsp" name="regform" id="regform" method="post" onsubmit="return sendit()">
<p>아이디: <%=userid%></p>
<p>비밀번호: <input type="password" name="userpw" id="userpw" maxlength="20" ></p>
<p>비밀번호 확인: <input type="password" name="userpw_re" id="userpw_re" maxlength="20" ></p>
<p>이름: <input type="text" name="name" id="name" value="<%=mem_username%>"></p>
<p>휴대폰번호: <input type="text" name="hp" id="hp" value="<%=mem_hp%>"></p>
<p>이메일: <input type="text" name="email" id="email" value="<%=mem_email%>"></p>
<p>성별:
<label>남자<input type="radio" name="gender" value="남자"
<% if(mem_gender.equals("남자"))out.print("checked"); %>></label>
<label>여자<input type="radio" name="gender" value="여자"
<% if(mem_gender.equals("여자"))out.print("checked"); %>></label></p>
<p>취미:
<label>등산<input type="checkbox" name="hobby" value="등산"
<%
if(compareHobby(hobbyArr, "등산")) out.print("checked"); //함수를 써서 사용 가
%>></label>
<label>게임<input type="checkbox" name="hobby" value="게임"
<%
for(int i=0;i<hobbyArr.length;i++){
if(hobbyArr[i].equals("게임"))out.print("checked");
}
%>></label>
<label>운동<input type="checkbox" name="hobby" value="운동"
<%
for(int i=0;i<hobbyArr.length;i++){
if(hobbyArr[i].equals("운동"))out.print("checked");
}
%>></label>
<label>드라이브<input type="checkbox" name="hobby" value="드라이브"
<%
for(int i=0;i<hobbyArr.length;i++){
if(hobbyArr[i].equals("드라이브"))out.print("checked");
}
%>></label>
<label>독서<input type="checkbox" name="hobby" value="독서"
<%
for(int i=0;i<hobbyArr.length;i++){
if(hobbyArr[i].equals("독서"))out.print("checked");
}
%>></label>
</p>
<p>주민등록번호<input type="text" name="ssn1" value="<%=mem_ssn1%>"><input type="text" name="ssn2" value="<%=mem_ssn2%>">
<p>우편번호: <input type="text" id="sample6_postcode" name="zipcode" maxlength="5" value="<%=mem_zipcode%>"><button type="button" onclick="sample6_execDaumPostcode()">검색</button></p>
<p>주소: <input type="text" name="address1" id="sample6_address" value="<%=mem_address1%>"></p>
<p>상세주소: <input type="text" name="address2" id="sample6_detailAddress" value="<%=mem_address2%>"></p>
<p>참고항목: <input type="text" name="address3" id="sample6_extraAddress" value="<%=mem_address3%>"></p>
<p><button>수정완료</button> <button type="reset">다시작성</button><button type="button"onclick="location.href='./login.jsp'">돌아가기</button> </p>
</form>
</body>
</html>
info.js
function sendit(){
const userpw = document.getElementById('userpw');
const userpw_re = document.getElementById('userpw_re');
const name = document.getElementById('name');
const hp = document.getElementById('hp');
const email = document.getElementById('email');
const hobby = document.getElementsByName('hobby');
// 정규 표현식
const expNameText = /[가-힣]+$/;
const exeHpText = /^\d{3}-\d{3,4}-\d{4}$/;
const expEmailText = /^[A-Za-z0-9\-\.]+@[A-Za-z0-9\-\.]+\.[A-Za-z0-9]+$/;
const expPwText =/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}/;
if(userpw.value ==''){
alert('비밀번호를 입력하세요');
userpw.focus();
return false;
}
if(!expPwText.test(userpw.value)){
alert('비밀번호 형식을 확인하세요\n소문자,대문자,숫자,특수문자 1개씩 꼭 입력해야합니다');
userpw.focus();
return false;
}
if(userpw.value != userpw_re.value){
alert('비밀번호와 비밀번호 확인의 값이 다릅니다')
userpw_re.focus();
return false;
}
if(name.value ==''){
alert('이름을 입력하세요');
name.focus();
return false;
}
if(!expNameText.test(name.value)){
alert('이름은 한글로 입력하세요');
name.focus();
return false;
}
if(!exeHpText.test(hp.value)){
alert('휴대폰번호 형식을 확인하세요\n하이픈(-)을 포함해야합니다');
hp.focus();
return false;
}
if(!expEmailText.test(email.value)){
alert('이메일 형식을 확인하세요')
email.focus();
return false;
}
let count = 0;
for(let i in hobby){
if(hobby[i].checked){
count++;
}
}
if(count == 0){
alert('취미는 적어도 하나 이상 선택하세요');
return false;
}
return true;
//return true
//return false
}
info_ok.jsp
<%@page import="javax.script.ScriptContext"%>
<%@page import="com.koreait.db.Dbconn"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./include/sessioncheck.jsp"%>
<%@ page import="java.sql.*" %>
<%
request.setCharacterEncoding("UTF-8");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String userid = (String)session.getAttribute("userid");
String userpw = request.getParameter("userpw");
String name = request.getParameter("name");
String hp = request.getParameter("hp");
String email = request.getParameter("email");
String gender = request.getParameter("gender");
String[] hobby = request.getParameterValues("hobby");
String ssn1 = request.getParameter("ssn1");
String ssn2 = request.getParameter("ssn2");
String zipcode = request.getParameter("zipcode");
String address1 = request.getParameter("address1");
String address2 = request.getParameter("address2");
String address3 = request.getParameter("address3");
String sql ="";
try{
conn = Dbconn.getConnection();
if(conn != null){
sql="select mem_userid from tb_member where mem_userid=? and mem_userpw=sha2(?,256)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,userid);
pstmt.setString(2,userpw);
rs = pstmt.executeQuery();
if(rs.next()){
sql = "update tb_member set mem_userpw=sha2(?,256), mem_username=?, mem_hp=?, mem_email=?, mem_hobby=?, mem_ssn1=?, mem_ssn2=?, mem_zipcode=?, mem_address1=?, mem_address2=?,mem_address3=?, mem_gender=? where mem_userid=? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userpw);
pstmt.setString(2, name);
pstmt.setString(3, hp);
pstmt.setString(4, email);
String hobbystr = "";
for(int i=0; i<hobby.length; i++){
hobbystr = hobbystr + hobby[i] + " ";
}
pstmt.setString(5, hobbystr);
pstmt.setString(6, ssn1);
pstmt.setString(7, ssn2);
pstmt.setString(8, zipcode);
pstmt.setString(9, address1);
pstmt.setString(10, address2);
pstmt.setString(11, address3);
pstmt.setString(12, gender);
pstmt.setString(13, userid);
pstmt.executeUpdate();
session.setAttribute("name", name);
%>
<script>
alert("변경되었습니다!");
location.href='./login.jsp'
</script>
<%
}else{
//비밀번호 틀림
%>
<script>
alert('비밀번호를 확인해주세요');
history.back();
</script>
<%
}
}
}catch(Exception e){
e.printStackTrace();
}
%>
반응형
'웹 개발 > 🎆 JSP' 카테고리의 다른 글
JSP | JavaBean,DAO,DTO (0) | 2022.11.29 |
---|---|
JSP | JSP를이용한 홈페이지구현 - 게시판 (0) | 2022.11.27 |
JSP | JSP를이용한 홈페이지구현 - 로그인,회원가입,로그아웃 (0) | 2022.11.27 |
JSP | include,exception,pageContext,ajax (0) | 2022.11.21 |
JSP | cookie,session,servlet (0) | 2022.11.20 |