본문 바로가기

개발중/Web

Web05 page [이전][1]....[9][다음]

728x90
반응형

<%@ 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> &nbsp;
   	     총레코드갯수:<%=Gtotal %> /<%=GGtotal %> &nbsp;&nbsp;
   	  </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 가 크다는 것은 [ 다음 ] 버튼이 존재해야 해

 

오늘은 회원 정보 페이징 하는 방법이랑 [이전] [다음] 버튼을 만드는 법을 배웠는데,

이제 흐름을 잘 알꺼 같다. 역시 자꾸 보는게 답인거 같다.

내일은 댓글 만드는 법을 배운다고 헀는데 기대중

얼릉 제대로 된 웹 사이트를 구현하고 싶다.

그러기 위해서 차근차근 경험치 쌓는 중.....

 

728x90
반응형

'개발중 > 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