41기 개발자과정

20210928 검색화면

segment 2021. 9. 28. 16:52

검색화면

1. msearch 폴더 안에 폼과 리스트 파일을 생성했다.

 

2. m_search_form.jsp

아이디, 권한, 이름, 이메일을 선택할 수 있는 선택창을 sk, 검색란을 sv로 정의한다.

m_search_list.jsp 를 import 시켜서 form 만 실행시켜도 값을 받아올 수 있다.

 

전체코드 : 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<form action ="<%= request.getContextPath()%>/msearch/m_search_list.jsp" method="post">
	<select name ="sk">
		<option value = "m_id">아이디</option>
		<option value = "m_level">권한</option>
		<option value = "m_name">이름</option>
		<option value = "m_email">이메일</option>
	</select>
	<input type="text" name ="sv">
	<input type="submit" value ="검색버튼">

</form>

실행화면 :

 

3. m_search_list.jsp

1. 드라이버를 로딩
2. db 연결
3. sk(아이디,권한,이름,이메일) sv(검색란) 에 따른 쿼리준비
4. select 쿼리 실행
5. 종료

sk(select) 와 sv(검색란)의 값을 받아온다.

	request.setCharacterEncoding("euc-kr");
	String sk = request.getParameter("sk");
	String sv = request.getParameter("sv");
	System.out.println(sk+"<---sk");
	System.out.println(sv+"<---sv");

 

1,2,4,5 는 동일하고 3번만 변경하면 된다. 

 

1) 

		if(sk == null &  sv == null){
		pstmt = conn.prepareStatement("select * from tb_member");
		System.out.println(pstmt + "<-- pstmt");
		System.out.println("1조건 - sk null 이고 sv null");
		}else if(sk != null & sv.equals("")){
			pstmt = conn.prepareStatement("select * from tb_member");
			System.out.println(pstmt + "<-- pstmt");
			System.out.println("2조건 - sk null이 아니고 sv 공백조건");
		}else if(sk != null & sv != null){
			if(sk.equals("m_id")){
				pstmt = conn.prepareStatement("select * from tb_member where m_id=?");
				System.out.println(pstmt + "<-- pstmt");
				System.out.println("3조건 - sk null 이 아니고 sv null이 아닌 조건");
				pstmt.setString(1, sv);
			}else if(sk.equals("m_level")){
				pstmt = conn.prepareStatement("select * from tb_member where m_level=?");
				System.out.println(pstmt + "<-- pstmt");
				System.out.println("3조건 - sk null 이 아니고 sv null이 아닌 조건");
				pstmt.setString(1, sv);
			}else if(sk.equals("m_name")){
				pstmt = conn.prepareStatement("select * from tb_member where m_name=?");
				System.out.println(pstmt + "<-- pstmt");
				System.out.println("3조건 - sk null 이 아니고 sv null이 아닌 조건");
				pstmt.setString(1, sv);
			}else if(sk.equals("m_email")){
				pstmt = conn.prepareStatement("select * from tb_member where m_email=?");
				System.out.println(pstmt + "<-- pstmt");
				System.out.println("3조건 - sk null 이 아니고 sv null이 아닌 조건");
				pstmt.setString(1, sv);
			}
		}

 

2)

pstmt = conn.prepareStatement("select * from tb_member where m_id=?");

pstmt = conn.prepareStatement("select * from tb_member where m_level=?");  에서 

m_id, m_level, m_name, m_email 은 앞에서 sk 로 정의했었다.

 

pstmt = conn.prepareStatement("select * from tb_member where "+sk+"=?");

--> where (m_id 등)  = ? 으로 변경이 가능하다.

if(sk == null &  sv == null){
		pstmt = conn.prepareStatement("select * from tb_member");
		System.out.println(pstmt + "<-- pstmt");
		System.out.println("1조건 - sk null 이고 sv null");
		}else if(sk != null & sv.equals("")){
			pstmt = conn.prepareStatement("select * from tb_member");
			System.out.println(pstmt + "<-- pstmt");
			System.out.println("2조건 - sk null이 아니고 sv 공백조건");
		}else if(sk != null & sv != null){
			pstmt = conn.prepareStatement("select * from tb_member where "+sk+"=?");
			//선택하는 sk를 변수에서 받아옴.
			pstmt.setString(1, sv);
		}
		System.out.println(pstmt + "<-- pstmt");

 

3) 중복되는 문장을 selectQuery 에 담고 작성해보기

String selectQuery = "select * from tb_member";
		//중복되는 select ~ member 문장을 변수로 선언
		if(sk == null &  sv == null){
		pstmt = conn.prepareStatement(selectQuery);
		System.out.println(pstmt + "<-- pstmt");
		System.out.println("1조건 - sk null 이고 sv null");
		}else if(sk != null & sv.equals("")){
			pstmt = conn.prepareStatement(selectQuery);
			System.out.println(pstmt + "<-- pstmt");
			System.out.println("2조건 - sk null이 아니고 sv 공백조건");
		}else if(sk != null & sv != null){
			pstmt = conn.prepareStatement(selectQuery + "where "+sk+"=?");
			pstmt.setString(1, sv);
		}
		System.out.println(pstmt + "<-- pstmt");

 

실행결과 :

1) 입력없이 검색

-> 전체 테이블이 조회

2) 권한 : 판매자로 검색


로그인 세션 활용

- 가짜로 로그인 했었던 파일을 활용하여 로그인화면 만들기.

프로젝트 layoutLoginMG2 에서 파일을 가져와 일부를 수정한다.

 

1) 레이아웃을 설정하여 index부분에 검색화면이 나오게 수정한 후

select 쿼리를 이용하여 아이디, 패스워드, 권한을 확인하여 화면을 실행한다.

 

 

1) 쿼리문장 준비 : 입력한 id를 조회하여 해당되는 정보를 불러온다.

 

	if(id == null &  pw == null){
		System.out.println(pstmt + "<-- pstmt");
		System.out.println("1조건 - id null 이고 pw null");
	}else if(id != null & pw != null){
		pstmt = conn.prepareStatement("select * from tb_member where m_id=?");
		System.out.println(pstmt + "<-- pstmt");
		pstmt.setString(1, id);
	}

 

2) 입력한 id, pw 의 값을 가져오고

dbid, dbpw, dbname, dblevel, dbeamil , msg 을 null 값으로 설정.

msg 는 알림 메시지로 활용

String id = request.getParameter("id");
String pw = request.getParameter("pw");
System.out.println(id + "<- id ");
System.out.println(pw + "<- pw ");
String dbid = null;
String dbpw = null;
String dbname = null;
String dblevel = null;
String dbemail= null;

String msg = null;

 

3)  

	if(rs.next()){
		System.out.println("1-1 아이디 일치");
		dbid = rs.getString ("m_id");
		dbpw = rs.getString ("m_pw");
		dbname = rs.getString ("m_name");
		dblevel = rs.getString ("m_level");
		dbemail = rs.getString ("m_email");
		if(pw.equals(dbpw)){
			System.out.println("로그인 성공");
			session.setAttribute("S_ID", dbid);
			session.setAttribute("S_NAME", dbname);
			session.setAttribute("S_LEVEL", dblevel);
			msg = "로그인성공";
		
	}else{
		System.out.println("비번 불일치");
		msg = "비번불일치";
	
	}
	}else{System.out.println("비번 불일치");
	msg = "아이디불일치";
		
	}

 

 

전체코드 : 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>

<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String dbid = null;
String dbpw = null;
String dbname = null;
String dblevel = null;
String dbemail= null;
System.out.println(id + "<- id ");
System.out.println(pw + "<- pw ");
String msg = null;

//1단계 드라이버 로딩
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	//JDBC 프로그램 순서
	//01단계 :드라이버 로딩 시작
	Class.forName("com.mysql.jdbc.Driver");
	String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" +
			"useUnicode=true&characterEncoding=euckr";
	String dbUser = "dev41id";
	String dbPass = "dev41pw";
	conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
	
	System.out.println(conn + "<-- conn m_list.jsp");
	if(conn != null){
		out.println("01 DB연결 성공");
	}else{
		out.println("02 DB연결 실패");
	}
//3단게 셀렉트 쿼리문장 준비
	if(id == null &  pw == null){
		System.out.println(pstmt + "<-- pstmt");
		System.out.println("1조건 - id null 이고 pw null");
	}else if(id != null & pw != null){
		pstmt = conn.prepareStatement("select * from tb_member where m_id=?");
		System.out.println(pstmt + "<-- pstmt");
		pstmt.setString(1, id);
	}

//4단게 쿼리 실행
		rs = pstmt.executeQuery();
		//executeQuery --> select쿼리 실행-------------------
		System.out.println(rs + "<-- rs m_list.jsp");
//5단계 쿼리실행결과 사용: 아이디일치/ 비번일치 비교

	if(rs.next()){
		System.out.println("1-1 아이디 일치");
		dbid = rs.getString ("m_id");
		dbpw = rs.getString ("m_pw");
		dbname = rs.getString ("m_name");
		dblevel = rs.getString ("m_level");
		dbemail = rs.getString ("m_email");
		if(pw.equals(dbpw)){
			System.out.println("로그인 성공");
			session.setAttribute("S_ID", dbid);
			session.setAttribute("S_NAME", dbname);
			session.setAttribute("S_LEVEL", dblevel);
			msg = "로그인성공";
		
	}else{
		System.out.println("비번 불일치");
		msg = "비번불일치";
	
	}
	}else{System.out.println("비번 불일치");
	msg = "아이디불일치";
	}
	
	
//6~ 8딘계 객체 종료
 rs.close();
 conn.close();
 
%>
<script type="text/javascript">
	alert('<%= msg %>');
	location.href='<%= request.getContextPath()%>/index.jsp';
</script>