[TIL] 구디아카데미 18일차: 같은 name속성을 가진 input 태그 값들을 받는 방법

Mijin·2023년 5월 5일
0

TIL

목록 보기
17/21
post-thumbnail

그 동안은 동일한 name속성을 가진 input태그 값들을 하나씩 받았다.
checkbox의 경우 동일한 name속성으로 여러개의 값들을 보낼 수 있는데, 이를 받는 방법을 연습하였다.

✅request.getParameterValues()

  • request.getParameterValues()로 input태그의 값들을 받으면 String배열로 값을 받는다
  • 선택을 하지 않는 경우에는 null로 들어온다는 점을 유념하자(유효성검사를 하는 이유!)
<form action="#" method="get">
		<input type="checkbox" name="fruit" value="apple">사과
		<input type="checkbox" name="fruit" value="orange">오렌지
		<button type="submit">검색</button>
</form>
	if(request.getParameterValues("fruit") != null) {
		for(String s : request.getParameterValues("fruit"))	{
			System.out.println(s);	
		}
	}

⌨월별 검색

  • 1~12월의 checkbox를 만들고 선택된 월의 데이터만 보여주기
  • 월이 선택된 개수에 따라 쿼리의 ?의 개수가 달라지는 부분을 주의한다
	//check박스의 값들이 잘 들어오는지 확인한다 
	System.out.println(request.getParameterValues("ckMonth"));

	// String배열 변수 ckMonth에 파라미터값들을 담는다
	String[] ckMonth =  request.getParameterValues("ckMonth");
	
    // 추후 where절에서 DB의 월과 비교할 때 DB의 값은 숫자이기 때문에 숫자 배열로 형변환한다
	int[] intCkMonth = null; // int[] 대신에 ArrayList<Integer>를 사용할 수 있다
	if(ckMonth != null) {
		intCkMonth = new int[ckMonth.length]; // ckMonth길이이 같은 수
		for(int i=0; i<intCkMonth.length; i+=1) {
			intCkMonth[i] = Integer.parseInt(ckMonth[i]);
		}
	}
	
	String sql = null;
	PreparedStatement stmt = null;
	
	if(intCkMonth == null) { // 선택된 월이 없으면 전체 데이터를 보여준다
		sql = "SELECT * FROM employees LIMIT ?, ?";
		stmt = conn.prepareStatement(sql);
		stmt.setInt(1, startRow);
		stmt.setInt(2, rowPerPage);
	} else { // 선택된 월이 1개 이상일 때 
		sql = "SELECT * FROM employees WHERE MONTH(hire_date) IN (?";
		// 쿼리에 ?의 개수를 셋팅
		for(int i=1; i<intCkMonth.length; i+=1) {
			sql += ",?";	
		}
		sql += ") LIMIT ?, ?";
		
		stmt = conn.prepareStatement(sql);
		
		// 쿼리에 ?값을 셋팅
		for(int i=0; i<intCkMonth.length; i+=1) {
			stmt.setInt(i+1, intCkMonth[i]);
		}
		stmt.setInt(intCkMonth.length+1, startRow);
		stmt.setInt(intCkMonth.length+2, rowPerPage);
	}
	System.out.println(stmt); // 쿼리 디버깅

💪느낀점

  • 몸이 너무 안좋아서 오후에 조퇴했는데 오전에 오늘 진도는 다 들을 수 있어서 다행이었다. 남은 기간에는 건강관리를 더 잘해서 개발공부에 더 집중할 수 있도록 하자.
profile
개발자로 가는 길 🏃‍♀️

0개의 댓글