-
회원등록.ver2,PreparedStatement(jsp버전)JAVA 2021. 7. 25. 00:32
이메일, 전화번호, 비밀번호, 등록버튼 추가
>> db.sql
drop database if exists 회원2db; create database 회원2db; use 회원2db; create table 회원 ( 번호 int primary key auto_increment, 성명 varchar(20) not null, 우편번호 char(5), 주소 varchar(50), 상세주소 varchar(50), 전화번호 varchar(20), 이메일 varchar(30), 아이디 varchar(20) not null, 패스워드 varchar(20) not null, 등록일 timestamp default current_timestamp ); desc 회원;
>> 회원. java
import java.sql.Date; public class 회원 { private int 번호; private String 성명; private String 우편번호; private String 주소; private String 상세주소; private String 전화번호; private String 이메일; private String 아이디; private String 패스워드; private Date 등록일; public int get번호() { return 번호; } public void set번호(int 번호) { this.번호 = 번호; } public String get성명() { return 성명; } public void set성명(String 성명) { this.성명 = 성명; } public String get우편번호() { return 우편번호; } public void set우편번호(String 우편번호) { this.우편번호 = 우편번호; } public String get주소() { return 주소; } public void set주소(String 주소) { this.주소 = 주소; } public String get상세주소() { return 상세주소; } public void set상세주소(String 상세주소) { this.상세주소 = 상세주소; } public String get전화번호() { return 전화번호; } public void set전화번호(String 전화번호) { this.전화번호 = 전화번호; } public String get이메일() { return 이메일; } public void set이메일(String 이메일) { this.이메일 = 이메일; } public String get아이디() { return 아이디; } public void set아이디(String 아이디) { this.아이디 = 아이디; } public String get패스워드() { return 패스워드; } public void set패스워드(String 패스워드) { this.패스워드 = 패스워드; } public Date get등록일() { return 등록일; } public void set등록일(Date 등록일) { this.등록일 = 등록일; } }
>>회원등록준비.jsp (추가)
비밀번호는 재입력과 값이 똑같은지 본 다음 하나만 가져오면 된다.
<body> <form action="회원등록.jsp" onsubmit="return 회원등록하다()" method="post"> <h1>회원등록</h1> <!--기초내용 --> 성명 <input type = "text" name = "name" id="name"><br> 우편번호 <input type = "text" name = "post" id="post" readonly="readonly"><input type="button" onclick="조회창을띄우다()" value="조회"><br> 주소 <input type = "text" name = "address" id="address" readonly="readonly"> <br> 상세주소 <input type = "text" name = "detailaddress"> <br> 전화번호 <input type="text" name="tel"/><br> 이메일 <input type="text" name="email1"/>@ <select name="email2"> <option value="google.com">google.com</option> <option value="naver.com">naver.com</option> <option value="daum.com">daum.com</option> </select> <br> 아이디 <input type="text" name="id" id="id" readonly="readonly"> <input type="button" onclick="아이디중복검사창을띄우다()" value="조회"><br> 패스워드 <input type="password" name="password" id="password1"/><br> 패스워드재입력 <input type="password" id="password2"/><br> <input type="submit" value="등록" /> </form> </body> <script> /* 필수입력, 비밀번호확인 */ function 회원등록하다(){ // 필수 입력확인 var txt성명 = document.querySelector("#name"); if(txt성명.value == ""){ alert("성명은 필수 입력입니다."); return false; } var txt아이디 = document.querySelector("#id"); if(txt아이디.value == ""){ alert("아이디은 필수 입력입니다."); return false; } var txt패스워드 = document.querySelector("#password1"); if(txt패스워드.value == ""){ alert("패스워드은 필수 입력입니다."); return false; } // 비밀번호 동일 확인 var txt패스워드2 = document.querySelector("#password2"); if(txt패스워드.value != txt패스워드2.value){ alert("패스워드가 동일하지 않습니다."); return false; } return true; } </script>
1. form 태그에 onsubmit 이벤트를 넣는다( 정보등록.jsp 에 값을 넘기면서 같이 일어나는 이벤트 )
2. onsubmit 에 적용할 함수를 만든다.
이 함수에서 필수입력과 비밀번호를 확인한다.
필수입력에 미입력이라면 ("") false 를 return하여 form을 못넘기게 하면된다.
비밀번호와 비밀번호재입력을 가져와 비교한 다음 틀리다면 false로
마지막으로 다 완료되면 true하면 된다.
그리고 함수를 적용하는 onsubmit 이벤트에 return 키워드를 적어줘야 return값을 받아온다.
새로운 JDBC 의 명령클래스 PreparedStatement 를 사용해보자 ( 사용법은 Statement와 유사)
>> 회원DAO.java
import java.sql.*; import control.ConnectionInfo; public class 회원DAO { public boolean 아이디가사용가능한가(String id) { boolean 아이디가사용가능 = false; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection c = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true",ConnectionInfo.DBIP,ConnectionInfo.DBPORT,ConnectionInfo.DBName),ConnectionInfo.UID,ConnectionInfo.PASSWORD); PreparedStatement st = c.prepareStatement("select count(*) as 갯수 from 회원 where 아이디 = ?"); st.setString(1, id); ResultSet set = st.executeQuery(); if(set.next()) { // 아이디가사용가능 = (set.getInt("갯수")==0)? true:false; if(set.getInt("갯수")==0) { 아이디가사용가능 = true; } } set.close(); c.close(); }catch(Exception e){ e.printStackTrace(); } return 아이디가사용가능; } public void 저장한다(회원 새회원) { try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection c = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true",ConnectionInfo.DBIP,ConnectionInfo.DBPORT,ConnectionInfo.DBName),ConnectionInfo.UID,ConnectionInfo.PASSWORD); PreparedStatement st = c.prepareStatement("insert into 회원(성명,우편번호,주소,상세주소,전화번호,이메일,아이디,패스워드) values(?,?,?,?,?,?,?,?)"); st.setString(1, 새회원.get성명()); st.setString(2, 새회원.get우편번호()); st.setString(3, 새회원.get주소()); st.setString(4, 새회원.get상세주소()); st.setString(5, 새회원.get전화번호()); st.setString(6, 새회원.get이메일()); st.setString(7, 새회원.get아이디()); st.setString(8, 새회원.get패스워드()); st.executeUpdate(); c.close(); }catch(Exception e){ e.printStackTrace(); } } }
아이디 중복확인시 count(*) 를 사용해 받아온 id가 있는지 갯수를 세보면 안다.
count(*) 해서 없을 경우 0을 반환한다.
>> 회원등록.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.sql.*"%> <%@ page import="membermanage.*"%> <% request.setCharacterEncoding("UTF-8"); 회원 새회원 = new 회원(); 새회원.set성명(request.getParameter("name")); 새회원.set우편번호(request.getParameter("post")); 새회원.set주소(request.getParameter("address")); 새회원.set상세주소(request.getParameter("detailaddress")); 새회원.set전화번호(request.getParameter("tel")); 새회원.set이메일(request.getParameter("email1")+"@"+request.getParameter("email2")); 새회원.set아이디(request.getParameter("id")); 새회원.set패스워드(request.getParameter("password")); // 1. 업무규칙검사 // 2. DB저장 회원DAO dao = new 회원DAO(); dao.저장한다(새회원); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!-- 3. 결과통보 --> <%= 새회원.get성명() %> 님 회원 등록해주셔서 감사합니다. </body> </html>
'JAVA' 카테고리의 다른 글
RequestDispatcher,forward(),게시물등록(model2.ver) (0) 2021.07.25 JSP내장객체정리, 로그인하기(jsp버전) (0) 2021.07.25 회원등록(jsp버전) (0) 2021.07.25 게시물Paging+페이지블럭(jsp버전),DAO (0) 2021.07.25 게시물목록,상세보기,Paging(jsp버전) (0) 2021.07.25