JAVA

회원등록.ver2,PreparedStatement(jsp버전)

docc 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>