<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="java.util.Date" %>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> [guestList.jsp] </title>
<style type="text/css">
*{ font-size: 20pt; }
a{ font-size: 18pt; color:blue; text-decoration:none; }
a:hover{ font-size:20pt; color:green; text-decoration:none; }
</style>
<script type="text/javascript">
</script>
</head>
<body>
<%
msg="select count(*) as cnt from guest " ;
ST=CN.createStatement();
RS=ST.executeQuery(msg);
RS.next();
GGtotal = RS.getInt("cnt");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date dt = new Date( );
String pnum;
int pageNUM, pagecount;
int start, end;
int startpage, endpage ;
int tmp;
String sqry=" ";
String skey="", sval="" ;
String returnpage="";
skey = request.getParameter("keyfield");
sval = request.getParameter("keyword");
System.out.println("넘어온 필드=" + skey + " 키워드=" + sval);
if(skey==null || skey=="" || sval==null || sval==""){
skey="";
sval="" ;
sqry = " where name like '%%' ";
}else{
sqry = " where "+ skey +" like '%" + sval +"%'";
}
returnpage="&keyfield="+skey+"&keyword="+sval;
System.out.println(returnpage);
msg="select count(*) as cnt from guest " + sqry;
ST=CN.createStatement();
RS=ST.executeQuery(msg);
RS.next();
Gtotal = RS.getInt("cnt");
pnum = request.getParameter("pageNum");
if( pnum==null || pnum==""){ pnum="1"; }
pageNUM = Integer.parseInt(pnum);
//System.out.println("클릭한 페이지 = " + pageNUM);
start = (pageNUM-1)*10+1 ;
end = (pageNUM*10) ;
tmp = (pageNUM-1)%10 ;
startpage = pageNUM-tmp ;
endpage = startpage+9 ;
if( Gtotal%10==0 ) { pagecount = Gtotal/10; }
else { pagecount = (Gtotal/10)+1; }
if(endpage>pagecount) { endpage=pagecount; }
String a="select * from ( ";
String b=" select rownum rn,sabun,name,title,wdate,pay,hit,email from ( ";
String y=" select * from guest " + sqry + " order by sabun ) " ;
String c=") where rn between " + start + " and " + end ;
msg = a + b + y + c ;
ST=CN.createStatement();
RS=ST.executeQuery(msg);
%>
<table width="1200" border="1" cellspacing="0">
<tr align="right">
<td colspan="7">
<a href="index.jsp">[index]</a>
<a href="login.jsp">[로그인]</a>
총레코드갯수:<%=Gtotal %> /<%=GGtotal %>
</td>
</tr>
<tr bgcolor="yellow">
<td>행번호</td> <td>사번</td> <td>이름</td>
<td>제목</td> <td>날짜</td> <td>조회수</td> <td>삭제</td>
</tr>
<%
while(RS.next()==true) {
Gsabun = RS.getInt("sabun");
Gtitle = RS.getString("title");
%>
<tr onmouseover="style.backgroundColor='rgb(0,200,200)'"
onmouseout="style.backgroundColor=''">
<td> <%= RS.getInt("rn") %> </td>
<td> <%= Gsabun %> </td>
<td> <%= RS.getString("name") %> </td>
<td> <a href="guestDetail.jsp?idx=<%=Gsabun%>"> <%= Gtitle %> </a> </td>
<td> <%= RS.getDate("wdate") %> </td>
<td> <%= RS.getInt("hit") %> </td>
<td align="center">
<input type="button" onclick="location.href='guestDelete.jsp?idx=<%=Gsabun%>' " value="삭제">
</td>
</tr>
<% } %>
<tr>
<td colspan="7" align="center">
<%
if ( startpage > 10 ) {
out.println("<a href=guestList.jsp?pageNum="+(startpage-10)+returnpage+">[이전]</a>");
}
for(int i=startpage;i<=endpage; i++){
if(i==pageNUM){
out.println("<font style='font-size:22pt; color:red'>["+i+"]</font> ");
}else{
out.println("<a href=guestList.jsp?pageNum="+i+returnpage+">["+i+"]</a>");
}
}//for end
if ( endpage < pagecount ) {
out.println("<a href=guestList.jsp?pageNum="+(startpage+10)+returnpage+">[다음]</a>");
}
%>
</td>
</tr>
<tr>
<td colspan="7" align="center">
<form action="guestList.jsp">
검색:
<select name="keyfield">
<option value="" >-----검색키워드-----</option>
<option value="name" >이름검색</option>
<option value="title">제목검색</option>
<option value="" >내용검색</option>
</select>
<input type="text" name="keyword" size="10" placeholder="검색어입력">
<input type="submit" value=" 검 색 ">
</form>
</td>
</tr>
</table>
</body>
</html>
'd'가 들어간 이름을 검색해보자.
select name을 "keyfield" 로 명시 하자.
이름검색 / 제목검색 / 내용검색 을 선택 했을 때 value를 keyfiled에 저장
검색어를 입력 한다면 'keyword' 가 값을 기억 하겠지?
검색을 누르면 submit
여기로 값을 전송, 하지만 지금은 자기 자신에게 전송하는 꼴 (가능)
값을 받아와서 저장
skey 와 sval이 "" 이라는 말은 즉,
모든 값을 출력 하겠다!
"WHERE NAME LIKE '%%'" => 모든 글자가 포함
skey 와 sval에 값이 들어있다면 else 문 실행
(ex) "WHERE NAME LIKE '%d%'"
"WHERE TITLE LIKE '%s%'"
returnpage 에다가는 &keyfield = skey &keyword = sval 이라고 넣어준다
자 이제 미리 만들어 둔 sqry를 이용해서 msg 변수를 완성 시켜준다.
쿼리를 실행 시키고 값을 RS가 가지고 있는다.
사용자가 원하는 조건의 값들의 개수가 Gtotal 로 저장이 되고
pageNum은 페이지 수를 선택하면 페이지 수를 기억하는 변수인데
pageNum이 null 이라면 1을 대입시켜 준다.
즉, 기본값은 1 페이지!
이제 페이지 수는 연산을 해줘야 하니까 Integer 로 변환 해주자.
자, 이제 페이지 수와 게시물 수를 정하는 연산들을 하고
Gtotal ( 전체 데이터 수 ) 는 10으로 나눈 나머지가 0 이라면
게시물 수를 10개씩 나열한다고 했을 때
page 수는 Gtotal/10 만큼이 필요하지만
Gtotal ( 전체 데이터 수 ) 는 10으로 나눈 나머지가 0 이상 이라면
1 페이지가 더 필요하므로 Gtotal/10 +1 을 해주자.
endpage 가 pagecount 보다 크다는 것은
페이지 수가 10 쪽까지 필요 없다는 뜻,
pagecount 를 endpage 에다가 대입 해주고,
데이터 값 출력문에서는 endpage 까지만 출력하자!
데이터가 없는 페이지의 수는 보여줄 필요가 없기에!
미리 만들어 둔 쿼리문(sqry) 을 이용해서 데이터를 추출하고, order by sabun 으로 정렬한다.
필요한 데이터를 rownum 과 함께 추출하자.
rn 을 기준으로 start 부터 end 까지 출력 해준다.
이제 쿼리문을 실행 해주고
Gtotal 은 추출한 데이터 수 / GGtotal 은 전체 데이터 수
이렇게! 해주기
RS 로 데이터를 불러와서 출력
startpage가 10 이하라면 [이전] 페이지는 필요 없어
선택한 페이지 수에 맞춰서 페이지를 출력하지만
선택한 페이지에 대한 효과를 주기 위해서 <font> 로 효과를 지정해 주자.
이렇게 페이지를 누른 곳을 강조 해주자.
endcount 보다 pagecount 가 크다는 것은 [ 다음 ] 버튼이 존재해야 해
오늘은 회원 정보 페이징 하는 방법이랑 [이전] [다음] 버튼을 만드는 법을 배웠는데,
이제 흐름을 잘 알꺼 같다. 역시 자꾸 보는게 답인거 같다.
내일은 댓글 만드는 법을 배운다고 헀는데 기대중
얼릉 제대로 된 웹 사이트를 구현하고 싶다.
그러기 위해서 차근차근 경험치 쌓는 중.....
'개발중 > Web' 카테고리의 다른 글
Web06 sql 외래키 제약조건 명시 (0) | 2020.07.30 |
---|---|
Web06 카테고리 재선택 택스트 창 clear (0) | 2020.07.30 |
Web05 page button color (0) | 2020.07.29 |
Web06 page number (0) | 2020.07.29 |
Web05 page number (0) | 2020.07.28 |