package ch14;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
public class MemberMgr {
private DBConnectionMgr pool;
public MemberMgr() {
pool = DBConnectionMgr.getInstance();
}
// 로그인: 성공 -> true
public boolean loginMember(String id, String pwd) {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "select id from tblMember where id = ? and pwd = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setString(2,pwd);
rs = pstmt.executeQuery();
flag = rs.next();
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return flag;
}
// id 중복 체크 : 중복 -> true
public boolean checkId(String id) {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "select id from tblMember where id = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,id);
rs = pstmt.executeQuery();
flag = rs.next();
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return flag;
}
// 주소 검색
public Vector<ZipcodeBean> searchZipcode(String area3){
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
Vector<ZipcodeBean> vlist = new Vector<ZipcodeBean>();
try {
con = pool.getConnection();
sql = "select * from tblZipcode " + "where area3 like ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, "%" + area3 + "%");
rs = pstmt.executeQuery();
while (rs.next()) {
ZipcodeBean bean = new ZipcodeBean(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4));
// select 뒤에 가져오는 컬럼의 index
// bean.setZipcode(rs.getString(1));
// bean.setArea1(rs.getString(2));
// bean.setArea2(rs.getString(3));
// bean.setArea3(rs.getString(4));
vlist.addElement(bean);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return vlist;
}
// 회원가입
public boolean insertMember(MemberBean bean) {
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "insert tblMember(id,pwd,name,gender,"
+ "birthday,email,zipcode,address,hobby,job)"
+ "values(?,?,?,?,?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, bean.getId());
pstmt.setString(2, bean.getPwd());
pstmt.setString(3, bean.getName());
pstmt.setString(4, bean.getGender());
pstmt.setString(5, bean.getBirthday());
pstmt.setString(6, bean.getEmail());
pstmt.setString(7, bean.getZipcode());
pstmt.setString(8, bean.getAddress());
///////////////////////////////////////
String lists[] = {"인터넷","여행","게임","영화","운동"};
String hobby[] = bean.getHobby(); // {"인터넷,"운동"};
char hb[] = {'0','0','0','0','0'};
for (int i = 0; i < hobby.length; i++) {
for (int j = 0; j < lists.length; j++) {
if(hobby[i].equals(lists[j])) {
hb[j] = '1';
break;
}
}
}
// 10001
pstmt.setString(9, new String(hb));
///////////////////////////////////////
pstmt.setString(10, bean.getJob());
if(pstmt.executeUpdate()==1)
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt);
}
return flag;
}
// 회원정보 가져오기
public MemberBean getMember(String id) {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
MemberBean bean = new MemberBean();
try {
con = pool.getConnection();
sql = "select *from tblMember where id = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id); // id = 'aaa'
rs = pstmt.executeQuery();
if(rs.next()) {
bean.setId(rs.getString("id"));
bean.setPwd(rs.getString("pwd"));
bean.setName(rs.getString("name"));
bean.setGender(rs.getString("gender"));
bean.setBirthday(rs.getString("birthday"));
bean.setEmail(rs.getString("email"));
bean.setZipcode(rs.getString("zipcode"));
bean.setAddress(rs.getString("address"));
String hobby = rs.getString("hobby");
String hb[] = new String[hobby.length()];
for (int i = 0; i < hb.length; i++) {
hb[i] = hobby.substring(i,i+1);
} // 01010 -> {"0","1","0","1","0"};
bean.setHobby(hb);
bean.setJob(rs.getString("job"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return bean;
}
// 회원수정 : id를 제외한 모든 값을 수정
public boolean updateMember(MemberBean bean) {
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "update tblMember set pwd=?,name=?,gender=?,"
+ "birthday=?,email=?,zipcode=?,address=?,hobby=?"
+ ",job=? where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, bean.getPwd());
pstmt.setString(2, bean.getName());
pstmt.setString(3, bean.getGender());
pstmt.setString(4, bean.getBirthday());
pstmt.setString(5, bean.getEmail());
pstmt.setString(6, bean.getZipcode());
pstmt.setString(7, bean.getAddress());
String lists[] = {"인터넷","여행","게임","영화","운동"};
String hobby[] = bean.getHobby(); // {"인터넷,"운동"};
char hb[] = {'0','0','0','0','0'};
for (int i = 0; i < hobby.length; i++) {
for (int j = 0; j < lists.length; j++) {
if(hobby[i].equals(lists[j])) {
hb[j] = '1';
break;
}
}
}
pstmt.setString(8, new String(hb));
pstmt.setString(9, bean.getJob());
pstmt.setString(10, bean.getId());
int cnt = pstmt.executeUpdate();
if(cnt==1)
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt);
}
return flag;
}
}
<member.jsp>
<!-- member.jsp -->
<%@page contentType="text/html; charset=UTF-8" %>
<!doctype html>
<html>
<head>
<title>회원가입</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript">
function idCheck(id) {
if(id==""){
alert("아이디를 입력하세요.");
document.regFrm.id.focus();
return;//이후에 코드를 실행이 안됨. 함수를 빠져나감.
}
url = "idCheck.jsp?id="+id;
window.open(url,"ID 증복체크","width=300, height=150, top=100, left=100");
}
function zipSearch() {
url = "zipSearch.jsp?search=n";
window.open(url,"우편번호 검색","width=500, height=300, top=100, left=100, scrollbars=yes");
}
</script>
</head>
<body bgcolor="#FFFFCC" onLoad="regFrm.id.focus()">
<div align="center">
<br /><br />
<form name="regFrm" method="post" action="memberProc.jsp">
<table cellpadding="5">
<tr>
<td bgcolor="#FFFFCC">
<table border="1" cellspacing="0" cellpadding="2" width="600">
<tr bgcolor="#996600">
<td colspan="3"><font color="#FFFFFF"><b>회원 가입</b></font></td>
</tr>
<tr>
<td width="20%">아이디</td>
<td width="50%">
<input name="id" size="15">
<input type="button" value="ID중복확인"
onClick="idCheck(this.form.id.value)">
</td>
<td width="30%">아이디를 적어 주세요.</td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pwd" size="15"></td>
<td>비밀번호를 적어주세요.</td>
</tr>
<tr>
<td>비밀번호 확인</td>
<td><input type="password" name="repwd" size="15"></td>
<td>비밀번호를 확인합니다.</td>
</tr>
<tr>
<td>이름</td>
<td><input name="name" size="15">
</td>
<td>이름을 적어주세요.</td>
</tr>
<tr>
<td>성별</td>
<td>
남<input type="radio" name="gender" value="1" checked>
여<input type="radio" name="gender" value="2">
</td>
<td>성별을 선택 하세요.</td>
</tr>
<tr>
<td>생년월일</td>
<td><input name="birthday" size="6">
ex)830815</td>
<td>생년월일를 적어 주세요.</td>
</tr>
<tr>
<td>Email</td>
<td><input name="email" size="30">
</td>
<td>이메일를 적어 주세요.</td>
</tr>
<tr>
<td>우편번호</td>
<td><input name="zipcode" size="5" readonly>
<input type="button" value="우편번호찾기" onClick="zipSearch()">
</td>
<td>우편번호를 검색하세요.</td>
</tr>
<tr>
<td>주소</td>
<td><input name="address" size="45"></td>
<td>주소를 적어 주세요.</td>
</tr>
<tr>
<td>취미</td>
<td>인터넷<input type="checkbox" name="hobby" value="인터넷">
여행<input type="checkbox" name="hobby" value="여행"> 게임<input
type="checkbox" name="hobby" value="게임"> 영화<input
type="checkbox" name="hobby" value="영화"> 운동<input
type="checkbox" name="hobby" value="운동">
</td>
<td>취미를 선택 하세요.</td>
</tr>
<tr>
<td>직업</td>
<td><select name=job>
<option value="0" selected>선택하세요.
<option value="회사원">회사원
<option value="연구전문직">연구전문직
<option value="교수학생">교수학생
<option value="일반자영업">일반자영업
<option value="공무원">공무원
<option value="의료인">의료인
<option value="법조인">법조인
<option value="종교,언론,에술인">종교.언론/예술인
<option value="농,축,수산,광업인">농/축/수산/광업인
<option value="주부">주부
<option value="무직">무직
<option value="기타">기타
</select></td>
<td>직업을 선택 하세요.</td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="button" value="회원가입" onclick="inputCheck()">
<input type="reset" value="다시쓰기">
<input type="button" value="로그인" onClick="javascript:location.href='login.jsp'">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
<idCheck.jsp>
<!-- idCheck.jsp -->
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch14.MemberMgr"/>
<%
String id = request.getParameter("id");
boolean result = mgr.checkId(id);
//out.print(result);
%>
<!doctype html>
<html>
<head>
<title>ID 중복체크</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFCC">
<div align="center">
<br/><b><%=id%></b>
<%
if(result){
out.println("는 이미 존재하는 ID입니다.<p/>");
}else{
out.println("는 사용 가능합니다.<p/>");
}
%>
<a href="#" onclick="self.close()">닫기</a>
</div>
</body>
</html>
<zipSearch.jsp>
<!-- zipSearch.jsp -->
<%@page import="ch14.ZipcodeBean"%>
<%@page import="java.util.Vector"%>
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch14.MemberMgr"/>
<%
String search = request.getParameter("search");
Vector<ZipcodeBean> vlist = new Vector<ZipcodeBean>();
// search 값이 y는 검색, n은 창만 open
String area3 = null;
if(search.equals("y")){
area3 = request.getParameter("area3");
vlist = mgr.searchZipcode(area3);
//out.println(vlist.size());
}
%>
<!doctype html>
<html>
<head>
<title>우편번호 검색</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function loadSearch() {
frm = document.zipFrm;
if(frm.area3.value==""){
alert("도로명을 입력하세요.");
return;
}
frm.action = "zipSearch.jsp";
frm.submit();
}
function sendAdd(zipcode, adds) {
// alert(zipcode + " " + adds);
// opener -> member.jsp
opener.document.regFrm.zipcode.value=zipcode;
opener.document.regFrm.address.value=adds;
self.close();
}
</script>
</head>
<body bgcolor="#FFFFCC">
<div align="center">
<br />
<form name="zipFrm" method="post">
<table>
<tr>
<td>
<br/>도로명 입력 : <input name="area3">
<input type="button" value="검색" onclick="loadSearch()">
</td>
</tr>
<!-- 검색 결과 Start -->
<%
if(search.equals("y")){
if(vlist.isEmpty()){
%>
<tr>
<td align="center"><br>검색된 결과가 없습니다.</td>
</tr>
<%
}else{
%>
<tr>
<td align="center"><br>※검색 후, 아래 주소를 클릭하면 자동으로 입력됩니다.</td>
</tr>
<%
for(int i=0;i<vlist.size();i++){
ZipcodeBean bean = vlist.get(i);
String zipcode = bean.getZipcode();
String adds = bean.getArea1()+" ";
adds+=bean.getArea2()+" ";
adds+=bean.getArea3()+" ";
%>
<tr>
<td><a href="#" onClick="sendAdd('<%=zipcode%>','<%=adds%>')"><%=zipcode+" "+adds%></a></td>
</tr>
<%
} //--for
} // --if2
} // --if1
%>
<!-- 검색 결과 End -->
<tr>
<td align="center"><br/>
<a href="#" onClick="self.close()">닫기</a></td>
</tr>
</table>
<input type="hidden" name="search" value="y">
</form>
</div>
</body>
</html>
<arrayTest.jsp>
<!-- arrayTest.jsp -->
<%@page contentType="text/html; charset=UTF-8" %>
<form action="arrayTest2.jsp">
취미 : 인터넷<input type="checkbox" name="hobby" value="인터넷">
여행<input type="checkbox" name="hobby" value="여행">
게임<input type="checkbox" name="hobby" value="게임">
영화<input type="checkbox" name="hobby" value="영화">
운동<input type="checkbox" name="hobby" value="운동">
<input type="submit">
</form>
<arrayTest2.jsp>
<!-- arrayTest2.jsp -->
<%@page import="ch14.MemberBean"%>
<%@page contentType="text/html; charset=UTF-8"%>
<%
String hobby[] = request.getParameterValues("hobby");
for(int i=0; i<hobby.length;i++){
out.println(hobby[i] + "<br>");
}
%><hr>
<jsp:useBean id="bean" class="ch14.MemberBean"/>
<jsp:setProperty property="hobby" name="bean"/>
<%
String hobby2[] = request.getParameterValues("hobby");
for(int i=0; i<hobby2.length;i++){
out.println(hobby2[i] + "<br>");
}
%>
<memberProc.jsp>
<!-- memberProc.jsp -->
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch14.MemberMgr"/>
<jsp:useBean id="bean" class="ch14.MemberBean"/>
<jsp:setProperty property="*" name="bean"/>
<%
// 가입을 하고 실패하면 '가입실패' 알림 member.jsp
boolean result = mgr.insertMember(bean);
String msg = "가입실패";
String url = "member.jsp";
// 가입을 하고 성공하면 '가입성공' 후에 login.jsp 응답 (session에 id 값 저장)
if(result){
msg = "가입성공";
url = "login.jsp";
session.setAttribute("idKey", bean.getId());
}
%>
<script>
alert("<%=msg%>");
location.href = "<%=url%>";
</script>
<memberUpdate.jsp>
<!-- memberUpdate.jsp -->
<%@page import="ch14.MemberBean"%>
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch14.MemberMgr"/>
<%
String id = (String)session.getAttribute("idKey");
if(id==null){
response.sendRedirect("login.jsp");
return;
}
MemberBean bean = mgr.getMember(id);
%>
<html>
<head>
<title>회원수정</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript">
function zipCheck() {
url = "zipSearch.jsp?search=n";
window.open(url, "ZipCodeSearch","width=500, height=300, top=100, left=100, scrollbars=yes");
}
</script>
</head>
<body bgcolor="#FFFFCC" onLoad="regFrm.id.focus()">
<div align="center">
<br /> <br />
<form name="regFrm" method="post" action="memberUpdateProc.jsp">
<table align="center" cellpadding="5" >
<tr>
<td align="center" valign="middle" bgcolor="#FFFFCC">
<table border="1" cellpadding="2" align="center" width="600">
<tr align="center" bgcolor="#996600">
<td colspan="3"><font color="#FFFFFF"><b>회원 수정</b></font></td>
</tr>
<tr>
<td width="20%">아이디</td>
<td width="80%"><input name="id" size="15"
value="<%=bean.getId() %>" readonly></td>
</tr>
<tr>
<td>패스워드</td>
<td><input type="password" name="pwd" size="15"
value="<%=bean.getPwd()%>"></td>
</tr>
<tr>
<td>이름</td>
<td><input name="name" size="15"
value="<%=bean.getName()%>"></td>
</tr>
<tr>
<td>성별</td>
<td>
남<input type="radio" name="gender" value="1"
<%if(bean.getGender().equals("1")) out.print("checked"); %>>
여<input type="radio" name="gender" value="2"
<%if(bean.getGender().equals("2")) out.print("checked"); %>>
</td>
</tr>
<tr>
<td>생년월일</td>
<td><input name="birthday" size="6"
value="<%=bean.getBirthday()%>"> ex)830815</td>
</tr>
<tr>
<td>Email</td>
<td><input name="email" size="30"
value="<%=bean.getEmail()%>"></td>
</tr>
<tr>
<td>우편번호</td>
<td><input name="zipcode" size="5"
value="<%=bean.getZipcode()%>" readonly> <input
type="button" value="우편번호찾기" onClick="zipCheck()"></td>
</tr>
<tr>
<td>주소</td>
<td><input name="address" size="45" value="<%=bean.getAddress()%>"></td>
</tr>
<tr>
<td>취미</td>
<td>
<%
String list[] = {"인터넷", "여행", "게임", "영화", "운동"};
String hb[] = bean.getHobby();//{"1","0","1,"0,"1"}
for(int i=0;i<hb.length;i++){
%>
<%=list[i] %>
<input type="checkbox" name="hobby" value="<%=list[i]%>"
<%=hb[i].equals("1")?"checked":"" %>>
<%}//---for%>
</td>
</tr>
<tr>
<td>직업</td>
<td><select name="job">
<option value="0">선택하세요.
<option value="회사원">회사원
<option value="연구전문직">연구전문직
<option value="교수학생">교수학생
<option value="일반자영업">일반자영업
<option value="공무원">공무원
<option value="의료인">의료인
<option value="법조인">법조인
<option value="종교,언론,에술인">종교.언론/예술인
<option value="농,축,수산,광업인">농/축/수산/광업인
<option value="주부">주부
<option value="무직">무직
<option value="기타">기타
</select>
<script type="text/javascript">
document.regFrm.job.value="<%=bean.getJob()%>";
</script>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="submit" value="수정완료">
<input type="reset" value="다시쓰기"></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
<memberUpdateProc.jsp>
<!-- memberProc.jsp -->
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch14.MemberMgr"/>
<jsp:useBean id="bean" class="ch14.MemberBean"/>
<jsp:setProperty property="*" name="bean"/>
<%
boolean result = mgr.updateMember(bean);
if(result){
%>
<script>
alert("회원정보를 수정 하였습니다.");
location.href="login.jsp";
</script>
<% }else{%>
<script>
alert("회원정보 수정에 실패 하였습니다.");
history.back(); // 뒤로
</script>
<% }%>