검색 페이징
페이지 정보

본문
https://hiddensource.tistory.com/19
http://blog.kurien.co.kr/530
디비연결
디비자료 가져와서 출력
페이징
검색 기능을 구현해 봤습니다
그런데 검색안하고 처음 상태에서는 페이징이 잘되는데
검색을 하고 페이지를 넘거가면 다른게 뜹니다.
제가 보기엔 where 조건 문이 안넘어가서 그런거 같은데 어떻게 해야할까요
그냥 게시판 목록에서 페이징 처리는 문제가없는데
검색을 한뒤 첫페이지는 검색한결과대로 화면에 잘뿌려집니다.
그러나 다음페이지를 누르면 그냥 원래 게시판리스트의 페이징처리로 돌아가버립니다.
쉽게 얘기해서 검색하고 페이징이 안됩니다.
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#search_btn').click(function(){
var search_val= $('#search_text').val()
if(search_val==""){
alert('검색어를 입력해주세요');
return false;
}else{
var field_val= $('#field').val();
location.href="<?php echo $_SERVER['PHP_SELF']; ?>?field="+field_val+"&search_text="+search_val;
}
});
$('#reset').click(function(){
location.href="<?php echo $_SERVER['PHP_SELF']; ?>";
});
});
</script>
<?php
$now_page = isset($_GET['page'])?$_GET['page']:"1";//페이징
$list_page = 3;
$num_page = 4;
$where = "";
$lp = ($now_page-1)*$list_page;
if(isset($_GET['field']) && isset($_GET['search_text'])){// 검색 버튼
$field=$_GET['field'];
$search_text=$_GET['search_text'];
$where=" where ".$field." like "."'%". $search_text ."%'";
}else{//초기화
$where="";
}
$db_host="11111111";
$db_user="asdf";
$db_pw="asdf123";
$db="taaadb";
$conn= mysql_connect($db_host,$db_user,$db_pw) or die ("데이터베이스 연결에 실패하였습니다!.".mysql_error());
//if(!$conn) die("데이터베이스 연결에 실패하였습니다.");
$selectdb= mysql_select_db($db) or die("데이터 베이스를 선택할수 없습니다.".mysql_error());
$pagequery="select count(upc) cnt from talb";//페이징
$pageresult=mysql_query($pagequery);//페이징
$cnt_arr=array();//페이징
$cnt_arr=mysql_fetch_assoc($pageresult);//페이징
$total_list= $cnt_arr['cnt'];//페이징=전체페이징
$toal_page=ceil($total_list/$list_page);
$i=$total_list;
$i=($now_page-1)*$list_page;
$query ="select * from talb"
.$where." limit ".$lp.",".$list_page;
$result =mysql_query($query);
mysql_query("set session character_set_connection=utf8;");
mysql_query("set session character_set_results=utf8;");
mysql_query("set session character_set_client=utf8;");
if(!$result) die(".".mysql_error());
$n_master_item_row=array();
$db_item_data=array();
while($n_master_item_row = mysql_fetch_assoc($result)){
$db_item_data[] = $n_master_item_row;
}
?>
<div class="c" align="center">
<table border="1" cellpadding="2">
<tr>
<td colspan="9" align="center"> 상품 정보 </td>
</tr>
<tr>
<td>upc</td>
<td>mfgcd</td>
<td>item_name</td>
<td>potency</td>
<td>potency_unit</td>
<td>count</td>
<td>type</td>
<td>location</td>
<td>currentqty</td>
</tr>
<?php
foreach($db_item_data as $k=>$v){?>
<tr>
<td><?php echo $db_item_data[$k]['d']?></td>
<td><?php echo $db_item_data[$k]['dcd']?></td>
<td><?php echo $db_item_data[$k]['id']?></td>
<td><?php echo $db_item_data[$k]['pod']?></td>
<td><?php echo $db_item_data[$k]['pot']?></td>
<td><?php echo $db_item_data[$k]['ct']?></td>
<td><?php echo $db_item_data[$k]['type']?></td>
<td><?php echo $db_item_data[$k]['l']?></td>
<td><?php echo $db_item_data[$k]['curr']?></td>
</tr>
<?php } ?>
<tr>
<td colspan=9 align="center">
<?php
if($toal_page >1){ ?>
<?php if($now_page==1){}else{ ?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=1">처음</a>
<?php } ?>
<?php
if($now_page -1 ==0){$prev_page =1;}else{$prev_page=(((int)(($now_page-1-$num_page)/$num_page))*$num_page)+1;}
?>
<?php if($now_page==1){}else{ ?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$prev_page?>">이전</a>
<?php } ?>
<?php } ?>
<?php
if($toal_page==0) $toal_page=1;
$prev= intval(($now_page -1)/ $num_page)*$num_page;
$start_page = $prev + 1;
if($start_page +4 < $toal_page){
$end_page=$start_page +4;
} else {
$end_page= $toal_page;
}
for($i= $start_page; $i <= $end_page;$i++){
if($i == $now_page){
?>
<a class="pg_num select">*<?=$i?>*</a>
<?
} else {
?>
<a class="pg_num" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$i?>"><?=$i?></a>
<?
}
}
?>
<?
if($now_page +1 > $toal_page){$next_page=$toal_page;}else{$next_page=(((int)(($now_page-1+$num_page)/$num_page))*$num_page)+1;}
?>
<? if($toal_page>1){?>
<?php if($toal_page==$now_page){}else{ ?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$next_page?>">다음</a>
<? if($toal_page>2){?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$toal_page?>">마지막</a>
<? }
} ?>
<? } ?>
</td>
</tr>
</table>
</div>
<div class="search" align="center">
<select name=field id=field>
<option value=item_name>item_name</option>
<option value=upc>upc</option>
<option value=mfgcd>mfgcd</option>
</select>
<input type=text id="search_text" name=search_text size=20><input id="search_btn" type=button value='search'>
<input id="reset" type=button value='reset'>
</div>
채택답변
질문자가 질문 해결에 도움이 되어 선택한 답변입니다.
96, 102, 121 line의 href에 field와 search_txt를 넣어주면 동작은 하겠네요.
https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=294862&page=1892
검색을 하면 검색 목록이 잘 뜹니다. 문제는 1 2 3 4...등의 이부분입니다.
예로 1 2 까지가 목록이 전부인데도 불구하고 전체 목록의 페이징수가 뜨는 것입니다..
예로 전체 페이징수가 3인데 검색하여 1 2까지만 데이터가 있다고 가정할때 페이징수가 1 2 3 이렇게 다 나온다는 것입니다.
몇개의 글을 검색해도 항상 전체 페이징 수가 뜨니 도저히 에러를 못잡겠습니다.
여기저기 페이징 소스를 다 뒤져봤지만 아무 이상이 없어 보이는데 왜 그런지;;
고수님들 꼭 좀 부탁드립니다.
//전체 글 수를 구합니다. (쿼리문을 사용하여 결과를 배열로 저장하는 일반적 인 방법)
$query="select count(*) from board";
$result=mysql_query($query); // 위의 쿼리문을 실제로 실행하여 결과를 result에 대입
$row=mysql_fetch_row($result); //위 결과 값을 하나하나 배열로 저장합니다 .
$total_no=$row[0]; //배열의 첫번째 요소의 값, 즉 테이블의 전체 글 수를 저장합니다.
$page = $HTTP_GET_VARS['page'];
if(!$page) $page = 1; //페이지 번호가 없으면 1
$list_num = 10; //한 페이지에 보여줄 목록 갯수
$page_num = 10; //한 화면에 보여줄 페이지 링크(묶음) 갯수
$offset = $list_num*($page-1); //한 페이지의 시작 글 번호(listnum 수만큼 나누었을 때 시작하는 글의 번호)
//전체 페이지 수와 현재 글 번호를 구합니다.
$total_page=ceil($total_no/$list_num); // 전체글수를 페이지당글수로 나눈 값의 올림 값을 구합니다.
$cur_num=$total_no - $offset; //현재 글번호
..중략 .. 하단 부..
$total_block=ceil($total_page/$page_num);
$block=ceil($page/$page_num); //현재 블록
$first=($block-1)*$page_num; // 페이지 블록이 시작하는 첫 페이지
$last=$block*$page_num; //페이지 블록의 끝 페이지
if($block >= $total_block) {
$last=$total_page;
}
//[처음][*개앞]
if($block > 1) {
$prev=$first-1;
echo "<a href='bqboardlist.php?page=1&searchPart=$searchPart&searchKeyword=$searchKeyword'>[처음 ]</a> ";
echo "<a href='bqboardlist.php?page=$prev&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_num 개 앞]</a>";
}
//페이지 링크
for ($page_link=$first+1;$page_link<=$last;$page_link++) {
if($page_link==$page) {
echo "| <font color=green><b>$page_link</b></font> | ";
}
else {
echo "<a href='bqboardlist.php?page=$page_link&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_link]</a> | ";
}
}
//[*개뒤][마지막]
if($block < $total_block) {
$next=$last+1;
echo "<a href='bqboardlist.php?page=$netxt&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_num 개 뒤]</a> ";
echo "<a href='bqboardlist.php?page=$total_page&searchPart=$searchPart&searchKeyword=$searchKeyword'>[마지막]</a></p>";
}
이전, 다음은 잘 됩니다.; 위의 문제만 꼭 좀 해결 부탁드립니다. 감사합니다. 꾸벅.
전체댓글수 5
기술레벨커뮤니티레벨누나소금 10-03-25 02:26
소스보기
소스~는 분석하지 않고, 제가 테스트만 해 본 결과~~
페이징~은 아주 잘 동작하였습니다.
$total_no = 1; // <== 이 숫자를 계속 변경함.
echo '전체갯수 = [' . $total_no . ']<br>' . "\n";
데이타~가 0 개일 때, 아무것도 안 보였고,
데이타~가 1 개 일 때, 1 페이지일 때
if(!isset($page)) $page = 1; // <== 링크~로 출력되서.. isset 로 변경해서 에러 고침~
데이타 9 개, 10개 까지는 1페이지
데이타 11개 19개 20개 2페이지
데이타 21개 ... 3페이지
300 로 테스트 하는데 .. [ 10개 뒤 부분~ 에러 ]
오타~~ $netxt ==> $next
echo "<a href='bqboardlist.php?page=$next&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_num 개 뒤]</a> ";
오타~등.. 별다른 에러~가 없었습니다.
3000 개 3001 개도 정상 동작하였습니다.
==============================
이 소스에서는 오류~는 없구요.
1. where 조건 쪽.. 에서 where 뒷 부분에 동일한 변수~로 처리하시고.
$where=" where .....조건 order by ......";
$query="select count(*) from board";
$query .= $where;
$query2 ="select * from board";
$query2 .= $where;
$query2 .= " limit $offset ,$page_num";
2. 위에서 $offset 값에... 처음 출력할 레코드 번호가 저장되어 있었습니다.
echo $sql;
echo $sql2;
sql 문을 .. 화면에 출력해서~ 쿼리~를 눈~으로 확인하시고~
그래도 잘못된 부분~이 안 보이면, mysql 콘솔~에서 이 쿼리~를 던져~보세요.
구성~이 아주 깔끔하게 잘 되어 있군요.
저는 게시판~을 모두 직접 만드는데~ 페이징부분은 맨 마지막에 만듭니다.
그냥 [1] ................... [200] 다 출력해놓고 테스트 합니다.
다른 작업~이 마무리 되었거나......... 시간이 틈틈히 날 때, 페이징쪽 작업을 합니다.
할 때마다 헤깔리더군요.
다음처럼~ 아래 값들을 출력~해 봤습니다.
$total_no = 3000;
echo '전체갯수 = [' . $total_no . ']<br>' . "\n";
echo '$block = [' . $block . ']<br>' . "\n";
echo '$offset = [' . $offset . ']<br>' . "\n";
기술레벨커뮤니티레벨JS러브 작성자 10-03-25 06:33
소스보기
친절한 답변 감사합니다.
제가 한가지 실수를 했군요;; 그냥 검색에선 잘 돌아가는것을 확인햇습니다.^^;;
소스를 미쳐 올리지 못함을 죄송스럽게 생각하며, 원래 소스는 재검색 기능이 되는 소스입니다.
그부분을 기록해서 하니 안되더군요...그래서 마져 올립니다.
참, 오타 발견 감사합니다.
//전체 글 수를 구합니다. (쿼리문을 사용하여 결과를 배열로 저장하는 일반적 인 방법)
$query="select count(*) from board";
$result=mysql_query($query); // 위의 쿼리문을 실제로 실행하여 결과를 result에 대입
$row=mysql_fetch_row($result); //위 결과 값을 하나하나 배열로 저장합니다 .
$total_no=$row[0]; //배열의 첫번째 요소의 값, 즉 테이블의 전체 글 수를 저장합니다.
$page = $HTTP_GET_VARS['page'];
if(!$page) $page = 1; //페이지 번호가 없으면 1
$list_num = 10; //한 페이지에 보여줄 목록 갯수
$page_num = 10; //한 화면에 보여줄 페이지 링크(묶음) 갯수
$offset = $list_num*($page-1); //한 페이지의 시작 글 번호(listnum 수만큼 나누었을 때 시작하는 글의 번호)
//전체 페이지 수와 현재 글 번호를 구합니다.
$total_page=ceil($total_no/$list_num); // 전체글수를 페이지당글수로 나눈 값의 올림 값을 구합니다.
$cur_num=$total_no - $offset; //현재 글번호
function getPartField($part) {
switch ($part) {
case 1: return 'btitle';
case 2: return 'btm';
case 3: return 'btmlist';
case 4: return 'bsc';
case 5: return 'bcontent';
case 6: return 'bcomment';
case 7: return 'bqt';
case 8: return 'betf';
}
return false;
}
$historyPart = $_POST[historyPart];// 이전 검색 분류
$historyKeyword = $_POST[historyKeyword];// 이전 검색어
$searchWith = $_POST[searchWith];// 결과내 검색
$searchPart = $_REQUEST[searchPart];// 현재 검색 분류
$searchKeyword = $_REQUEST[searchKeyword];// 현재 검색어
$whereFields = array(' where 1 ');
// 결과내 검색이 있을 경우 이전 검색 분류와 검색어를 쿼리로 적용
if ($searchWith && $historyKeyword) {
if ($part = getPartField($historyPart)) {
array_push($whereFields, " `$part` like '%$historyKeyword%' ");
}
}
// 현재 검색 추가
if ($searchKeyword) {
if ($part = getPartField($searchPart)) {
array_push($whereFields, " `$part` like '%$searchKeyword%' ");
}
}
$where = join(' and ', $whereFields);
$sql = "select * from board $where order by ref desc, re_step asc limit $offset, $page_num";
$result = mysql_query($sql);
기술레벨커뮤니티레벨누나소금 10-03-25 13:42
소스보기
1. $where 를 만드는 부분~이 맨 앞에 나와야 합니다.
$page = $_GET['page'];
if(!isset($_GET['page'])) $page = 1; //페이지 번호가 없으면 1
$HTTP_GET_VARS => $_GET 으로 변경하시고,
2. $query="select count(*) from board";
$query .= $where; // 전체 글수를 구할 때, where 조건이 있어야 총 갯수를 구할 수 있습니다.
// 이 부분이 없으면,, 검색할 때, 없는 페이지가 당연히 나오게 됩니다.
3. getPartField($part) 함수~로 1,2,3 숫자로 전달하는대신,
직접 btitle 로 전달한다.
if(isset($_GET['btitle']) && $_GET['btitle']) $btitle = $_GET['btitle'];
$btitle = mb_strcut($btitle,0,200); // mb 계열함수 유무 판단해야 함
4. sql injection 으로 인한 테이블 내용 삭제 변경 추가문제
그리고, sql injection 에 대비하여....... 각 값들에서 .. 특수문자들을 제거하고,
각 값은 mysql_real_escape_string 이나 mysql_escape_string 으로 값을 변환시켜야 합니다.
값들을 검사하지 않으면, 외부에서 마음대로 글을 지우거나 심지어 다른 테이블~까지 삭제할 수도 있습니다.
% 정리해 보면,
1. 값처리.. urlencode urldecode 길이제한
2. 쿼리값처리 .. mysql_escape_string mysql_real_escape_string
3. isset 함수를 통한,, 변수값 입력여부 판단
4. 전체적인 흐름 파악을 쉽게 하기..
각각의 부분을 약간의 모듈화~를 시키셔야 합니다.
5. 다른 게시판 소스 훔쳐보기..
예) 다른 게시판소스~에서 값처리하는 부분~을 확인합니다.
소스~가 좀 많이 길어지더라도, 소스~의 맨 앞에~ 값처리하는 부분이 있어야 합니다.
1. 값처리하는 부분에서는 값처리만 집중~하고,
2. mysql 쿼리~만드는 부분에서 .. sql injection 대비하고
3. 총갯수 구하는 쿼리~와 내용가져오는 쿼리 두 개 만들고,
4. 총갯수값을 가져오고...
5. 총갯수~값에 의해 변경되는 변수~값을을 재조정하고
6. 리스트를 가져와서 화면에 보여주고,
7. 페이징부분~에 들어갈 ? 뒤에 들어갈 부분 만들고,
8. 페이징부분~에서 page=1 page=2 부분을 추가하여, 출력
결과내 재검색 부분은 .. 1번과 2번..에서 처리하게 되니,
소스의 맨 앞부분에서 한참 라인이 추가 될 것입니다.
///////////// 값처리 시작 //////////////////////////////
............
///////////// 값처리 끝 //////////////////////////////
여기에서 5라인 정도 띄워주시고..
///////////// mysql 값처리 시작 //////////////////////////////
............
///////////// mysql 값처리 끝 //////////////////////////////
스스로 구분하기 좋게 만드시면 됩니다. 규칙은 없습니다.
드디어 삽질의 세계에 입문하셨습니다. 파이팅!!요!! ^^;
기술레벨커뮤니티레벨JS러브 작성자 10-03-25 16:35
소스보기
친절한 답변에 다시한번 감사의 말씀 드립니다.
그런데 PHP초짜라서 정말 알아듣기가 힘듭니다;;죄송합니다.
직접소스를 좀 적어서 보여주시면 안될까요? 부탁드립니다.;;;
정말 아무리 읽고 고쳐봐도 안되어 말씀대로 몇시간 삽질하다가 결국 포기..ㅜㅜ
부탁드립니다.
기술레벨커뮤니티레벨누나소금 10-03-25 17:53
소스보기
차근차근 정리~해가면서 작업 하셔요.
지금 위에 나열한 것처럼 하나하나 작업을 나누어 집중해서 하셔야 합니다.
이정도 하셨으면, 모두 완성하신 것입니다.
이 상태에서 더 이상 해 드릴 것이 없습니다.
알고리즘~ 정리~가 안되어 있을 땐, 삽질~이 최고입니다.
끓임없는 입력값과 결과값에 의한 .. 소스 수정입니다.
그래두 왼만하면,, 모든 소스~를 하나하나.. 척보면, 아실 수 있도록, 코드를 정리하십시오.
코드~가 길어지든 안 길어지든..
if ($searchWith && $historyKeyword) { 이거보다는...
if ($searchWith !='' && $historyKeyword !='') { // 두 값이 모두 빈값이 아니면
이런식으로 이해가 되기 쉽게 고치고, 주석을 달아두시면,,,,, 좋습니다.
조금 소스~가 이상해 보이더라도, 나름대로 이해하기 쉬운 방식을 택해서 작업하세요.
검색 후 페이징처리를 해보려고 했는데 잘 안돼서 질문드립니다.
검색을 해보아도 제가 원하는 답이 나오질 않네요.
$date_paging 이라는 변수를 따로 선언하여 그곳에 페이징 처리를 해주어야 할것을 선언하는데
$stx변수까진 페이징 처리가 잘 되고 있습니다.
$wr_1 부분부터 페이징이 안되는데요
어떻게 바꿔야 하는지 도움 부탁드립니다.(__)
<?php
include_once('./_common.php');
//$type = "video";
$g5['title']="소모품리스트";
$bo_table = "sub03_02";
include_once(G5_PATH.'/head.php');
$sql = " SELECT * FROM g5_write_sub03_02 where wr_is_comment = 0 and wr_6 <> '완료' ";
if($member['mb_level']=='10'){
$sql_where ="";
}else if($member['mb_level']=='7'){
$sql_where =" and wr_subject = '".$member['mb_4']."' ";
}else if($member['mb_level']=='5'){
$sql_where =" and wr_subject = '".$member['mb_4']."' and wr_5 = '".$member['mb_nick']."' ";
}
if($_GET['sfl']){
$sfl = mysql_escape_string($_GET['sfl']);
$stx = mysql_escape_string($_GET['stx']);
$sql_sch = " and ".$sfl." like '".$stx."%' ";
}
if($_GET['wr_1']) {
$wr_2 = mysql_escape_string($_GET['start_y']."-".$_GET['start_m']."-".$_GET['start_d']);
$wr_3 = mysql_escape_string($_GET['end_y']."-".$_GET['end_m']."-".$_GET['end_d']);
$wr_2 = date("Y-m-d", strtotime($wr_2));
$wr_3 = date("Y-m-d", strtotime($wr_3));
$sql_search = " and (wr_1 between '$wr_2' and '$wr_3') ";
}else{
$wr_2 = date("Y-m-d");
$wr_3 = date("Y-m-d");
}
$sql .= $sql_where;
$sql .= $sql_sch;
$sql .= $sql_search;
$sql .= $sql_order;
//echo $sql;
$sql_cnt = " SELECT count(*) as cnt FROM g5_write_sub03_02 where wr_is_comment = 0 and wr_6 <> '완료' ";
$sql_cnt .= $sql_where;
$sql_cnt .= $sql_sch;
$sql_cnt .= $sql_search;
/* 페이징 시작 */
//페이지 get 변수가 있다면 받아오고, 없다면 1페이지를 보여준다.
if(isset($_GET['page'])){ $page = $_GET['page']; } else { $page = 1; }
$row1 = sql_fetch($sql_cnt);
$allPost = $row1['cnt']; //전체 게시글의 수
$onePage = 2; // 한 페이지에 보여줄 게시글의 수.
$allPage = ceil($allPost / $onePage); //전체 페이지의 수
if($page < 1 && $page > $allPage) {
?>
<script>
alert("존재하지 않는 페이지입니다.");
history.back();
</script>
<?php
exit;
}
$oneSection = 10; //한번에 보여줄 총 페이지 개수(1 ~ 10, 11 ~ 20 ...)
$currentSection = ceil($page / $oneSection); //현재 섹션
$allSection = ceil($allPage / $oneSection); //전체 섹션의 수
$firstPage = ($currentSection * $oneSection) - ($oneSection - 1); //현재 섹션의 처음 페이지
if($currentSection == $allSection) {
$lastPage = $allPage; //현재 섹션이 마지막 섹션이라면 $allPage가 마지막 페이지가 된다.
} else {
$lastPage = $currentSection * $oneSection; //현재 섹션의 마지막 페이지
}
$prevPage = (($currentSection - 1) * $oneSection); //이전 페이지, 11~20일 때 이전을 누르면 10 페이지로 이동.
$nextPage = (($currentSection + 1) * $oneSection) - ($oneSection - 1); //다음 페이지, 11~20일 때 다음을 누르면 21 페이지로 이동.
$date_paging = "&date_yy=".$_GET['date_yy']."&date_mm=".$_GET['date_mm']."&sfl=".$sfl."&stx=".$stx."&wr_1=".$_GET['wr_1']."&wr_2=".($_GET['start_y']."-".$_GET['start_m']."-".$_GET['start_d'])."&wr_3=".($_GET['end_y']."-".$_GET['end_m']."-".$_GET['end_d']);
$paging = '<ul>'; // 페이징을 저장할 변수
//첫 페이지가 아니라면 처음 버튼을 생성
if($page != 1) {
$paging .= '<li class="page page_start"><a href="./supplie_reg_list.php?page=1">처음</a></li>';
}
//첫 섹션이 아니라면 이전 버튼을 생성
if($currentSection != 1) {
$paging .= '<li class="page page_prev"><a href="./supplie_reg_list.php?page=' . $prevPage .$date_paging. '">이전</a></li>';
}
for($i = $firstPage; $i <= $lastPage; $i++) {
if($i == $page) {
$paging .= '<li class="page current">' . $i . '</li>';
} else {
$paging .= '<li class="page"><a href="./supplie_reg_list.php?page=' . $i .$date_paging. '">' . $i . '</a></li>';
}
}
//마지막 섹션이 아니라면 다음 버튼을 생성
if($currentSection != $allSection) {
$paging .= '<li class="page page_next"><a href="./supplie_reg_list.php?page=' . $nextPage .$date_paging. '">다음</a></li>';
}
//마지막 페이지가 아니라면 끝 버튼을 생성
if($page != $allPage) {
$paging .= '<li class="page page_end"><a href="./supplie_reg_list.php?page=' . $allPage .$date_paging. '">끝</a></li>';
}
$paging .= '</ul>';
/* 페이징 끝 */
$currentLimit = ($onePage * $page) - $onePage; //몇 번째의 글부터 가져오는지
$sqlLimit = ' limit ' . $currentLimit . ', ' . $onePage; //limit sql 구문
$sql = $sql . $sqlLimit; //원하는 개수만큼 가져온다. (0번째부터 20번째까지
$result = sql_query($sql);
$list_num = $allPost - ($page - 1) * $onepage;
?>
<script type="text/javascript">
function goForm(f){
if(f.sfl.value==''){ alert("검색분류를 선택하세요."); f.stx.focus(); return false; }
if(f.stx.value==''){ alert("검색어가 입력되지 않았습니다."); f.stx.focus(); return false; }
f.submit();
}
function showhideinline(oDiv,flag) {
var obj = document.getElementById(oDiv);
if(flag)
obj.style.display="inline";
else
obj.style.display="none";
}
</script>
<form action="./supplie_reg_list.php" onsubmit="return goForm(this)" method="get">
<select name="sfl" id="sfl">
<option value="">-선택-</option>
<option value="wr_subject" <?=$sfl == 'wr_subject' ? 'selected' : ''?>>고객업체명</option>
<option value="wr_5" <?=$sfl == 'wr_5' ? 'selected' : ''?>>현장명</option>
<option value="wr_content" <?=$sfl == 'wr_content' ? 'selected' : ''?>>장비명</option>
</select>
<input type="text" name="stx" id="stx" value="<?=$stx?>" />
<!--select로 기간 검색-->
<!--<select name="wr_1" id="wr_1">
<option value="wr_1" <?=$wr_1 == 'wr_1' ? 'selected' : '' ?>>기간</option>
</select>-->
* 기간별 검색시 체크
<input type="checkbox" onclick="showhideinline('a',this.checked)" name="wr_1" value="1" <?php if($_REQUEST['wr_1']) {echo 'checked'; $a_display = 'inline';} else { $a_display = 'none';}?>/>
<div id="a" style="display:<?php echo $a_display;?>"><?=date_select($wr_2,"start") ?> 부터 <?= date_select($wr_3,"end")?> 까지</div>
<input type="submit" value="검색" />
</form>
전체댓글수 6
기술레벨커뮤니티레벨진지하면진지드삼 16-09-20 16:39 채택답변 질문자가 질문 해결에 도움이 되어 선택한 답변입니다.
소스보기
$_GET으로 받는 부분과 보내는 부분이 맞지 않습니다. 년/월/일을 분리해서 $_GET으로 받는 것을 기준으로
수정을 해 보았네요..
(수정부분)
$date_paging = "&date_yy=".$_GET['date_yy']."&date_mm=".$_GET['date_mm']."&sfl=".$sfl."&stx=".$stx."&wr_1=".$_GET['wr_1']."&start_y=".($_GET['start_y']."&start_m=".$_GET['start_m']."&start_d".$_GET['start_d'])."&end_y=".($_GET['end_y']."&end_m=".$_GET['end_m']."&end_d=".$_GET['end_d']);
기술레벨커뮤니티레벨시로님 작성자 16-09-20 16:55
움... start와 end를 각각 변수 wr_2와 wr_3으로 선언해서 저렇게 해주었는데 잘못된거였나보네요.. 감사합니다. 한번 해보겠습니다.
기술레벨커뮤니티레벨진지하면진지드삼 16-09-20 17:03
wr_2와 wr_3로 처리하시려면,
$_GET으로 받는 부분도 wr_2와 wr_3로 받아서 처리를 하도록 맞춰주야 합니다.
기술레벨커뮤니티레벨시로님 작성자 16-09-20 17:18
아아 그러네요, 진지님이 써주신대로 해보았지만 여전히 나네요ㅠ
기술레벨커뮤니티레벨진지하면진지드삼 16-09-20 17:20
페이징하면서 쿼리를 한번 찍어 보세요. 원하는데로 쿼리가 생성이 되는지..
게시판 페이징
https://yonoo88.tistory.com/62
http://swriterit.kr/221375627800
http://blog.daum.net/web_design/489
https://blog.naver.com/kkaria/221401557201
http://blog.kurien.co.kr/530
디비연결
디비자료 가져와서 출력
페이징
검색 기능을 구현해 봤습니다
그런데 검색안하고 처음 상태에서는 페이징이 잘되는데
검색을 하고 페이지를 넘거가면 다른게 뜹니다.
제가 보기엔 where 조건 문이 안넘어가서 그런거 같은데 어떻게 해야할까요
그냥 게시판 목록에서 페이징 처리는 문제가없는데
검색을 한뒤 첫페이지는 검색한결과대로 화면에 잘뿌려집니다.
그러나 다음페이지를 누르면 그냥 원래 게시판리스트의 페이징처리로 돌아가버립니다.
쉽게 얘기해서 검색하고 페이징이 안됩니다.
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#search_btn').click(function(){
var search_val= $('#search_text').val()
if(search_val==""){
alert('검색어를 입력해주세요');
return false;
}else{
var field_val= $('#field').val();
location.href="<?php echo $_SERVER['PHP_SELF']; ?>?field="+field_val+"&search_text="+search_val;
}
});
$('#reset').click(function(){
location.href="<?php echo $_SERVER['PHP_SELF']; ?>";
});
});
</script>
<?php
$now_page = isset($_GET['page'])?$_GET['page']:"1";//페이징
$list_page = 3;
$num_page = 4;
$where = "";
$lp = ($now_page-1)*$list_page;
if(isset($_GET['field']) && isset($_GET['search_text'])){// 검색 버튼
$field=$_GET['field'];
$search_text=$_GET['search_text'];
$where=" where ".$field." like "."'%". $search_text ."%'";
}else{//초기화
$where="";
}
$db_host="11111111";
$db_user="asdf";
$db_pw="asdf123";
$db="taaadb";
$conn= mysql_connect($db_host,$db_user,$db_pw) or die ("데이터베이스 연결에 실패하였습니다!.".mysql_error());
//if(!$conn) die("데이터베이스 연결에 실패하였습니다.");
$selectdb= mysql_select_db($db) or die("데이터 베이스를 선택할수 없습니다.".mysql_error());
$pagequery="select count(upc) cnt from talb";//페이징
$pageresult=mysql_query($pagequery);//페이징
$cnt_arr=array();//페이징
$cnt_arr=mysql_fetch_assoc($pageresult);//페이징
$total_list= $cnt_arr['cnt'];//페이징=전체페이징
$toal_page=ceil($total_list/$list_page);
$i=$total_list;
$i=($now_page-1)*$list_page;
$query ="select * from talb"
.$where." limit ".$lp.",".$list_page;
$result =mysql_query($query);
mysql_query("set session character_set_connection=utf8;");
mysql_query("set session character_set_results=utf8;");
mysql_query("set session character_set_client=utf8;");
if(!$result) die(".".mysql_error());
$n_master_item_row=array();
$db_item_data=array();
while($n_master_item_row = mysql_fetch_assoc($result)){
$db_item_data[] = $n_master_item_row;
}
?>
<div class="c" align="center">
<table border="1" cellpadding="2">
<tr>
<td colspan="9" align="center"> 상품 정보 </td>
</tr>
<tr>
<td>upc</td>
<td>mfgcd</td>
<td>item_name</td>
<td>potency</td>
<td>potency_unit</td>
<td>count</td>
<td>type</td>
<td>location</td>
<td>currentqty</td>
</tr>
<?php
foreach($db_item_data as $k=>$v){?>
<tr>
<td><?php echo $db_item_data[$k]['d']?></td>
<td><?php echo $db_item_data[$k]['dcd']?></td>
<td><?php echo $db_item_data[$k]['id']?></td>
<td><?php echo $db_item_data[$k]['pod']?></td>
<td><?php echo $db_item_data[$k]['pot']?></td>
<td><?php echo $db_item_data[$k]['ct']?></td>
<td><?php echo $db_item_data[$k]['type']?></td>
<td><?php echo $db_item_data[$k]['l']?></td>
<td><?php echo $db_item_data[$k]['curr']?></td>
</tr>
<?php } ?>
<tr>
<td colspan=9 align="center">
<?php
if($toal_page >1){ ?>
<?php if($now_page==1){}else{ ?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=1">처음</a>
<?php } ?>
<?php
if($now_page -1 ==0){$prev_page =1;}else{$prev_page=(((int)(($now_page-1-$num_page)/$num_page))*$num_page)+1;}
?>
<?php if($now_page==1){}else{ ?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$prev_page?>">이전</a>
<?php } ?>
<?php } ?>
<?php
if($toal_page==0) $toal_page=1;
$prev= intval(($now_page -1)/ $num_page)*$num_page;
$start_page = $prev + 1;
if($start_page +4 < $toal_page){
$end_page=$start_page +4;
} else {
$end_page= $toal_page;
}
for($i= $start_page; $i <= $end_page;$i++){
if($i == $now_page){
?>
<a class="pg_num select">*<?=$i?>*</a>
<?
} else {
?>
<a class="pg_num" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$i?>"><?=$i?></a>
<?
}
}
?>
<?
if($now_page +1 > $toal_page){$next_page=$toal_page;}else{$next_page=(((int)(($now_page-1+$num_page)/$num_page))*$num_page)+1;}
?>
<? if($toal_page>1){?>
<?php if($toal_page==$now_page){}else{ ?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$next_page?>">다음</a>
<? if($toal_page>2){?>
<a class="pg_btn" href="<?php echo $_SERVER['PHP_SELF'];?>?page=<?=$toal_page?>">마지막</a>
<? }
} ?>
<? } ?>
</td>
</tr>
</table>
</div>
<div class="search" align="center">
<select name=field id=field>
<option value=item_name>item_name</option>
<option value=upc>upc</option>
<option value=mfgcd>mfgcd</option>
</select>
<input type=text id="search_text" name=search_text size=20><input id="search_btn" type=button value='search'>
<input id="reset" type=button value='reset'>
</div>
채택답변
질문자가 질문 해결에 도움이 되어 선택한 답변입니다.
96, 102, 121 line의 href에 field와 search_txt를 넣어주면 동작은 하겠네요.
https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=294862&page=1892
검색을 하면 검색 목록이 잘 뜹니다. 문제는 1 2 3 4...등의 이부분입니다.
예로 1 2 까지가 목록이 전부인데도 불구하고 전체 목록의 페이징수가 뜨는 것입니다..
예로 전체 페이징수가 3인데 검색하여 1 2까지만 데이터가 있다고 가정할때 페이징수가 1 2 3 이렇게 다 나온다는 것입니다.
몇개의 글을 검색해도 항상 전체 페이징 수가 뜨니 도저히 에러를 못잡겠습니다.
여기저기 페이징 소스를 다 뒤져봤지만 아무 이상이 없어 보이는데 왜 그런지;;
고수님들 꼭 좀 부탁드립니다.
//전체 글 수를 구합니다. (쿼리문을 사용하여 결과를 배열로 저장하는 일반적 인 방법)
$query="select count(*) from board";
$result=mysql_query($query); // 위의 쿼리문을 실제로 실행하여 결과를 result에 대입
$row=mysql_fetch_row($result); //위 결과 값을 하나하나 배열로 저장합니다 .
$total_no=$row[0]; //배열의 첫번째 요소의 값, 즉 테이블의 전체 글 수를 저장합니다.
$page = $HTTP_GET_VARS['page'];
if(!$page) $page = 1; //페이지 번호가 없으면 1
$list_num = 10; //한 페이지에 보여줄 목록 갯수
$page_num = 10; //한 화면에 보여줄 페이지 링크(묶음) 갯수
$offset = $list_num*($page-1); //한 페이지의 시작 글 번호(listnum 수만큼 나누었을 때 시작하는 글의 번호)
//전체 페이지 수와 현재 글 번호를 구합니다.
$total_page=ceil($total_no/$list_num); // 전체글수를 페이지당글수로 나눈 값의 올림 값을 구합니다.
$cur_num=$total_no - $offset; //현재 글번호
..중략 .. 하단 부..
$total_block=ceil($total_page/$page_num);
$block=ceil($page/$page_num); //현재 블록
$first=($block-1)*$page_num; // 페이지 블록이 시작하는 첫 페이지
$last=$block*$page_num; //페이지 블록의 끝 페이지
if($block >= $total_block) {
$last=$total_page;
}
//[처음][*개앞]
if($block > 1) {
$prev=$first-1;
echo "<a href='bqboardlist.php?page=1&searchPart=$searchPart&searchKeyword=$searchKeyword'>[처음 ]</a> ";
echo "<a href='bqboardlist.php?page=$prev&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_num 개 앞]</a>";
}
//페이지 링크
for ($page_link=$first+1;$page_link<=$last;$page_link++) {
if($page_link==$page) {
echo "| <font color=green><b>$page_link</b></font> | ";
}
else {
echo "<a href='bqboardlist.php?page=$page_link&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_link]</a> | ";
}
}
//[*개뒤][마지막]
if($block < $total_block) {
$next=$last+1;
echo "<a href='bqboardlist.php?page=$netxt&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_num 개 뒤]</a> ";
echo "<a href='bqboardlist.php?page=$total_page&searchPart=$searchPart&searchKeyword=$searchKeyword'>[마지막]</a></p>";
}
이전, 다음은 잘 됩니다.; 위의 문제만 꼭 좀 해결 부탁드립니다. 감사합니다. 꾸벅.
전체댓글수 5
기술레벨커뮤니티레벨누나소금 10-03-25 02:26
소스보기
소스~는 분석하지 않고, 제가 테스트만 해 본 결과~~
페이징~은 아주 잘 동작하였습니다.
$total_no = 1; // <== 이 숫자를 계속 변경함.
echo '전체갯수 = [' . $total_no . ']<br>' . "\n";
데이타~가 0 개일 때, 아무것도 안 보였고,
데이타~가 1 개 일 때, 1 페이지일 때
if(!isset($page)) $page = 1; // <== 링크~로 출력되서.. isset 로 변경해서 에러 고침~
데이타 9 개, 10개 까지는 1페이지
데이타 11개 19개 20개 2페이지
데이타 21개 ... 3페이지
300 로 테스트 하는데 .. [ 10개 뒤 부분~ 에러 ]
오타~~ $netxt ==> $next
echo "<a href='bqboardlist.php?page=$next&searchPart=$searchPart&searchKeyword=$searchKeyword'>[$page_num 개 뒤]</a> ";
오타~등.. 별다른 에러~가 없었습니다.
3000 개 3001 개도 정상 동작하였습니다.
==============================
이 소스에서는 오류~는 없구요.
1. where 조건 쪽.. 에서 where 뒷 부분에 동일한 변수~로 처리하시고.
$where=" where .....조건 order by ......";
$query="select count(*) from board";
$query .= $where;
$query2 ="select * from board";
$query2 .= $where;
$query2 .= " limit $offset ,$page_num";
2. 위에서 $offset 값에... 처음 출력할 레코드 번호가 저장되어 있었습니다.
echo $sql;
echo $sql2;
sql 문을 .. 화면에 출력해서~ 쿼리~를 눈~으로 확인하시고~
그래도 잘못된 부분~이 안 보이면, mysql 콘솔~에서 이 쿼리~를 던져~보세요.
구성~이 아주 깔끔하게 잘 되어 있군요.
저는 게시판~을 모두 직접 만드는데~ 페이징부분은 맨 마지막에 만듭니다.
그냥 [1] ................... [200] 다 출력해놓고 테스트 합니다.
다른 작업~이 마무리 되었거나......... 시간이 틈틈히 날 때, 페이징쪽 작업을 합니다.
할 때마다 헤깔리더군요.
다음처럼~ 아래 값들을 출력~해 봤습니다.
$total_no = 3000;
echo '전체갯수 = [' . $total_no . ']<br>' . "\n";
echo '$block = [' . $block . ']<br>' . "\n";
echo '$offset = [' . $offset . ']<br>' . "\n";
기술레벨커뮤니티레벨JS러브 작성자 10-03-25 06:33
소스보기
친절한 답변 감사합니다.
제가 한가지 실수를 했군요;; 그냥 검색에선 잘 돌아가는것을 확인햇습니다.^^;;
소스를 미쳐 올리지 못함을 죄송스럽게 생각하며, 원래 소스는 재검색 기능이 되는 소스입니다.
그부분을 기록해서 하니 안되더군요...그래서 마져 올립니다.
참, 오타 발견 감사합니다.
//전체 글 수를 구합니다. (쿼리문을 사용하여 결과를 배열로 저장하는 일반적 인 방법)
$query="select count(*) from board";
$result=mysql_query($query); // 위의 쿼리문을 실제로 실행하여 결과를 result에 대입
$row=mysql_fetch_row($result); //위 결과 값을 하나하나 배열로 저장합니다 .
$total_no=$row[0]; //배열의 첫번째 요소의 값, 즉 테이블의 전체 글 수를 저장합니다.
$page = $HTTP_GET_VARS['page'];
if(!$page) $page = 1; //페이지 번호가 없으면 1
$list_num = 10; //한 페이지에 보여줄 목록 갯수
$page_num = 10; //한 화면에 보여줄 페이지 링크(묶음) 갯수
$offset = $list_num*($page-1); //한 페이지의 시작 글 번호(listnum 수만큼 나누었을 때 시작하는 글의 번호)
//전체 페이지 수와 현재 글 번호를 구합니다.
$total_page=ceil($total_no/$list_num); // 전체글수를 페이지당글수로 나눈 값의 올림 값을 구합니다.
$cur_num=$total_no - $offset; //현재 글번호
function getPartField($part) {
switch ($part) {
case 1: return 'btitle';
case 2: return 'btm';
case 3: return 'btmlist';
case 4: return 'bsc';
case 5: return 'bcontent';
case 6: return 'bcomment';
case 7: return 'bqt';
case 8: return 'betf';
}
return false;
}
$historyPart = $_POST[historyPart];// 이전 검색 분류
$historyKeyword = $_POST[historyKeyword];// 이전 검색어
$searchWith = $_POST[searchWith];// 결과내 검색
$searchPart = $_REQUEST[searchPart];// 현재 검색 분류
$searchKeyword = $_REQUEST[searchKeyword];// 현재 검색어
$whereFields = array(' where 1 ');
// 결과내 검색이 있을 경우 이전 검색 분류와 검색어를 쿼리로 적용
if ($searchWith && $historyKeyword) {
if ($part = getPartField($historyPart)) {
array_push($whereFields, " `$part` like '%$historyKeyword%' ");
}
}
// 현재 검색 추가
if ($searchKeyword) {
if ($part = getPartField($searchPart)) {
array_push($whereFields, " `$part` like '%$searchKeyword%' ");
}
}
$where = join(' and ', $whereFields);
$sql = "select * from board $where order by ref desc, re_step asc limit $offset, $page_num";
$result = mysql_query($sql);
기술레벨커뮤니티레벨누나소금 10-03-25 13:42
소스보기
1. $where 를 만드는 부분~이 맨 앞에 나와야 합니다.
$page = $_GET['page'];
if(!isset($_GET['page'])) $page = 1; //페이지 번호가 없으면 1
$HTTP_GET_VARS => $_GET 으로 변경하시고,
2. $query="select count(*) from board";
$query .= $where; // 전체 글수를 구할 때, where 조건이 있어야 총 갯수를 구할 수 있습니다.
// 이 부분이 없으면,, 검색할 때, 없는 페이지가 당연히 나오게 됩니다.
3. getPartField($part) 함수~로 1,2,3 숫자로 전달하는대신,
직접 btitle 로 전달한다.
if(isset($_GET['btitle']) && $_GET['btitle']) $btitle = $_GET['btitle'];
$btitle = mb_strcut($btitle,0,200); // mb 계열함수 유무 판단해야 함
4. sql injection 으로 인한 테이블 내용 삭제 변경 추가문제
그리고, sql injection 에 대비하여....... 각 값들에서 .. 특수문자들을 제거하고,
각 값은 mysql_real_escape_string 이나 mysql_escape_string 으로 값을 변환시켜야 합니다.
값들을 검사하지 않으면, 외부에서 마음대로 글을 지우거나 심지어 다른 테이블~까지 삭제할 수도 있습니다.
% 정리해 보면,
1. 값처리.. urlencode urldecode 길이제한
2. 쿼리값처리 .. mysql_escape_string mysql_real_escape_string
3. isset 함수를 통한,, 변수값 입력여부 판단
4. 전체적인 흐름 파악을 쉽게 하기..
각각의 부분을 약간의 모듈화~를 시키셔야 합니다.
5. 다른 게시판 소스 훔쳐보기..
예) 다른 게시판소스~에서 값처리하는 부분~을 확인합니다.
소스~가 좀 많이 길어지더라도, 소스~의 맨 앞에~ 값처리하는 부분이 있어야 합니다.
1. 값처리하는 부분에서는 값처리만 집중~하고,
2. mysql 쿼리~만드는 부분에서 .. sql injection 대비하고
3. 총갯수 구하는 쿼리~와 내용가져오는 쿼리 두 개 만들고,
4. 총갯수값을 가져오고...
5. 총갯수~값에 의해 변경되는 변수~값을을 재조정하고
6. 리스트를 가져와서 화면에 보여주고,
7. 페이징부분~에 들어갈 ? 뒤에 들어갈 부분 만들고,
8. 페이징부분~에서 page=1 page=2 부분을 추가하여, 출력
결과내 재검색 부분은 .. 1번과 2번..에서 처리하게 되니,
소스의 맨 앞부분에서 한참 라인이 추가 될 것입니다.
///////////// 값처리 시작 //////////////////////////////
............
///////////// 값처리 끝 //////////////////////////////
여기에서 5라인 정도 띄워주시고..
///////////// mysql 값처리 시작 //////////////////////////////
............
///////////// mysql 값처리 끝 //////////////////////////////
스스로 구분하기 좋게 만드시면 됩니다. 규칙은 없습니다.
드디어 삽질의 세계에 입문하셨습니다. 파이팅!!요!! ^^;
기술레벨커뮤니티레벨JS러브 작성자 10-03-25 16:35
소스보기
친절한 답변에 다시한번 감사의 말씀 드립니다.
그런데 PHP초짜라서 정말 알아듣기가 힘듭니다;;죄송합니다.
직접소스를 좀 적어서 보여주시면 안될까요? 부탁드립니다.;;;
정말 아무리 읽고 고쳐봐도 안되어 말씀대로 몇시간 삽질하다가 결국 포기..ㅜㅜ
부탁드립니다.
기술레벨커뮤니티레벨누나소금 10-03-25 17:53
소스보기
차근차근 정리~해가면서 작업 하셔요.
지금 위에 나열한 것처럼 하나하나 작업을 나누어 집중해서 하셔야 합니다.
이정도 하셨으면, 모두 완성하신 것입니다.
이 상태에서 더 이상 해 드릴 것이 없습니다.
알고리즘~ 정리~가 안되어 있을 땐, 삽질~이 최고입니다.
끓임없는 입력값과 결과값에 의한 .. 소스 수정입니다.
그래두 왼만하면,, 모든 소스~를 하나하나.. 척보면, 아실 수 있도록, 코드를 정리하십시오.
코드~가 길어지든 안 길어지든..
if ($searchWith && $historyKeyword) { 이거보다는...
if ($searchWith !='' && $historyKeyword !='') { // 두 값이 모두 빈값이 아니면
이런식으로 이해가 되기 쉽게 고치고, 주석을 달아두시면,,,,, 좋습니다.
조금 소스~가 이상해 보이더라도, 나름대로 이해하기 쉬운 방식을 택해서 작업하세요.
검색 후 페이징처리를 해보려고 했는데 잘 안돼서 질문드립니다.
검색을 해보아도 제가 원하는 답이 나오질 않네요.
$date_paging 이라는 변수를 따로 선언하여 그곳에 페이징 처리를 해주어야 할것을 선언하는데
$stx변수까진 페이징 처리가 잘 되고 있습니다.
$wr_1 부분부터 페이징이 안되는데요
어떻게 바꿔야 하는지 도움 부탁드립니다.(__)
<?php
include_once('./_common.php');
//$type = "video";
$g5['title']="소모품리스트";
$bo_table = "sub03_02";
include_once(G5_PATH.'/head.php');
$sql = " SELECT * FROM g5_write_sub03_02 where wr_is_comment = 0 and wr_6 <> '완료' ";
if($member['mb_level']=='10'){
$sql_where ="";
}else if($member['mb_level']=='7'){
$sql_where =" and wr_subject = '".$member['mb_4']."' ";
}else if($member['mb_level']=='5'){
$sql_where =" and wr_subject = '".$member['mb_4']."' and wr_5 = '".$member['mb_nick']."' ";
}
if($_GET['sfl']){
$sfl = mysql_escape_string($_GET['sfl']);
$stx = mysql_escape_string($_GET['stx']);
$sql_sch = " and ".$sfl." like '".$stx."%' ";
}
if($_GET['wr_1']) {
$wr_2 = mysql_escape_string($_GET['start_y']."-".$_GET['start_m']."-".$_GET['start_d']);
$wr_3 = mysql_escape_string($_GET['end_y']."-".$_GET['end_m']."-".$_GET['end_d']);
$wr_2 = date("Y-m-d", strtotime($wr_2));
$wr_3 = date("Y-m-d", strtotime($wr_3));
$sql_search = " and (wr_1 between '$wr_2' and '$wr_3') ";
}else{
$wr_2 = date("Y-m-d");
$wr_3 = date("Y-m-d");
}
$sql .= $sql_where;
$sql .= $sql_sch;
$sql .= $sql_search;
$sql .= $sql_order;
//echo $sql;
$sql_cnt = " SELECT count(*) as cnt FROM g5_write_sub03_02 where wr_is_comment = 0 and wr_6 <> '완료' ";
$sql_cnt .= $sql_where;
$sql_cnt .= $sql_sch;
$sql_cnt .= $sql_search;
/* 페이징 시작 */
//페이지 get 변수가 있다면 받아오고, 없다면 1페이지를 보여준다.
if(isset($_GET['page'])){ $page = $_GET['page']; } else { $page = 1; }
$row1 = sql_fetch($sql_cnt);
$allPost = $row1['cnt']; //전체 게시글의 수
$onePage = 2; // 한 페이지에 보여줄 게시글의 수.
$allPage = ceil($allPost / $onePage); //전체 페이지의 수
if($page < 1 && $page > $allPage) {
?>
<script>
alert("존재하지 않는 페이지입니다.");
history.back();
</script>
<?php
exit;
}
$oneSection = 10; //한번에 보여줄 총 페이지 개수(1 ~ 10, 11 ~ 20 ...)
$currentSection = ceil($page / $oneSection); //현재 섹션
$allSection = ceil($allPage / $oneSection); //전체 섹션의 수
$firstPage = ($currentSection * $oneSection) - ($oneSection - 1); //현재 섹션의 처음 페이지
if($currentSection == $allSection) {
$lastPage = $allPage; //현재 섹션이 마지막 섹션이라면 $allPage가 마지막 페이지가 된다.
} else {
$lastPage = $currentSection * $oneSection; //현재 섹션의 마지막 페이지
}
$prevPage = (($currentSection - 1) * $oneSection); //이전 페이지, 11~20일 때 이전을 누르면 10 페이지로 이동.
$nextPage = (($currentSection + 1) * $oneSection) - ($oneSection - 1); //다음 페이지, 11~20일 때 다음을 누르면 21 페이지로 이동.
$date_paging = "&date_yy=".$_GET['date_yy']."&date_mm=".$_GET['date_mm']."&sfl=".$sfl."&stx=".$stx."&wr_1=".$_GET['wr_1']."&wr_2=".($_GET['start_y']."-".$_GET['start_m']."-".$_GET['start_d'])."&wr_3=".($_GET['end_y']."-".$_GET['end_m']."-".$_GET['end_d']);
$paging = '<ul>'; // 페이징을 저장할 변수
//첫 페이지가 아니라면 처음 버튼을 생성
if($page != 1) {
$paging .= '<li class="page page_start"><a href="./supplie_reg_list.php?page=1">처음</a></li>';
}
//첫 섹션이 아니라면 이전 버튼을 생성
if($currentSection != 1) {
$paging .= '<li class="page page_prev"><a href="./supplie_reg_list.php?page=' . $prevPage .$date_paging. '">이전</a></li>';
}
for($i = $firstPage; $i <= $lastPage; $i++) {
if($i == $page) {
$paging .= '<li class="page current">' . $i . '</li>';
} else {
$paging .= '<li class="page"><a href="./supplie_reg_list.php?page=' . $i .$date_paging. '">' . $i . '</a></li>';
}
}
//마지막 섹션이 아니라면 다음 버튼을 생성
if($currentSection != $allSection) {
$paging .= '<li class="page page_next"><a href="./supplie_reg_list.php?page=' . $nextPage .$date_paging. '">다음</a></li>';
}
//마지막 페이지가 아니라면 끝 버튼을 생성
if($page != $allPage) {
$paging .= '<li class="page page_end"><a href="./supplie_reg_list.php?page=' . $allPage .$date_paging. '">끝</a></li>';
}
$paging .= '</ul>';
/* 페이징 끝 */
$currentLimit = ($onePage * $page) - $onePage; //몇 번째의 글부터 가져오는지
$sqlLimit = ' limit ' . $currentLimit . ', ' . $onePage; //limit sql 구문
$sql = $sql . $sqlLimit; //원하는 개수만큼 가져온다. (0번째부터 20번째까지
$result = sql_query($sql);
$list_num = $allPost - ($page - 1) * $onepage;
?>
<script type="text/javascript">
function goForm(f){
if(f.sfl.value==''){ alert("검색분류를 선택하세요."); f.stx.focus(); return false; }
if(f.stx.value==''){ alert("검색어가 입력되지 않았습니다."); f.stx.focus(); return false; }
f.submit();
}
function showhideinline(oDiv,flag) {
var obj = document.getElementById(oDiv);
if(flag)
obj.style.display="inline";
else
obj.style.display="none";
}
</script>
<form action="./supplie_reg_list.php" onsubmit="return goForm(this)" method="get">
<select name="sfl" id="sfl">
<option value="">-선택-</option>
<option value="wr_subject" <?=$sfl == 'wr_subject' ? 'selected' : ''?>>고객업체명</option>
<option value="wr_5" <?=$sfl == 'wr_5' ? 'selected' : ''?>>현장명</option>
<option value="wr_content" <?=$sfl == 'wr_content' ? 'selected' : ''?>>장비명</option>
</select>
<input type="text" name="stx" id="stx" value="<?=$stx?>" />
<!--select로 기간 검색-->
<!--<select name="wr_1" id="wr_1">
<option value="wr_1" <?=$wr_1 == 'wr_1' ? 'selected' : '' ?>>기간</option>
</select>-->
* 기간별 검색시 체크
<input type="checkbox" onclick="showhideinline('a',this.checked)" name="wr_1" value="1" <?php if($_REQUEST['wr_1']) {echo 'checked'; $a_display = 'inline';} else { $a_display = 'none';}?>/>
<div id="a" style="display:<?php echo $a_display;?>"><?=date_select($wr_2,"start") ?> 부터 <?= date_select($wr_3,"end")?> 까지</div>
<input type="submit" value="검색" />
</form>
전체댓글수 6
기술레벨커뮤니티레벨진지하면진지드삼 16-09-20 16:39 채택답변 질문자가 질문 해결에 도움이 되어 선택한 답변입니다.
소스보기
$_GET으로 받는 부분과 보내는 부분이 맞지 않습니다. 년/월/일을 분리해서 $_GET으로 받는 것을 기준으로
수정을 해 보았네요..
(수정부분)
$date_paging = "&date_yy=".$_GET['date_yy']."&date_mm=".$_GET['date_mm']."&sfl=".$sfl."&stx=".$stx."&wr_1=".$_GET['wr_1']."&start_y=".($_GET['start_y']."&start_m=".$_GET['start_m']."&start_d".$_GET['start_d'])."&end_y=".($_GET['end_y']."&end_m=".$_GET['end_m']."&end_d=".$_GET['end_d']);
기술레벨커뮤니티레벨시로님 작성자 16-09-20 16:55
움... start와 end를 각각 변수 wr_2와 wr_3으로 선언해서 저렇게 해주었는데 잘못된거였나보네요.. 감사합니다. 한번 해보겠습니다.
기술레벨커뮤니티레벨진지하면진지드삼 16-09-20 17:03
wr_2와 wr_3로 처리하시려면,
$_GET으로 받는 부분도 wr_2와 wr_3로 받아서 처리를 하도록 맞춰주야 합니다.
기술레벨커뮤니티레벨시로님 작성자 16-09-20 17:18
아아 그러네요, 진지님이 써주신대로 해보았지만 여전히 나네요ㅠ
기술레벨커뮤니티레벨진지하면진지드삼 16-09-20 17:20
페이징하면서 쿼리를 한번 찍어 보세요. 원하는데로 쿼리가 생성이 되는지..
게시판 페이징
https://yonoo88.tistory.com/62
http://swriterit.kr/221375627800
http://blog.daum.net/web_design/489
https://blog.naver.com/kkaria/221401557201
- 이전글substr(), mb_substr() : 문자열 자르기 / 한글문자 자르기 21.02.22
- 다음글그누보드5 개인 php파일 만들기 21.02.22
댓글목록
등록된 댓글이 없습니다.

