게시판 목록에서 페이징 처리를 하였는데 검색 기능을 추가
페이지 정보

본문
게시판 목록에서 페이징 처리를 하였는데 검색 기능을 추가 하였습니다.
검색 후 페이징 까지는 정상적으로 처리가 되는데 ...
문제는 검색 후 2번 페이지를 누르면 전체 목록의 2번이 노출되네요.....
저번주에 php를 시작했는데 도통 어떻게 해야할지 감이 오질 않아서 고수님들의 답변 기다리겠습니다.ㅠㅠ
소스 확인 좀 부탁드릴께요~
<meta charset="utf-8">
<?php
include "anifra_memo.php";
?>
<form action="anifra_list.php" method="post">
<select name="search">
<option value="search_choose">검색선택</option>
<option value="search_contents">내용</option>
<option value="search_name">이름</option>
<option value="search_email">이메일</option>
</select>
<tr>
<td align="center" style="width:400px;height:50px;"><input type="text" name="searching_box" style="width:200px;"></td>
</tr>
<input type="submit" value="Search">
</form>
<?php
$connect = mysql_connect("127.0.0.1", "root", "rd2810tu") or die(mysql_error());
mysql_select_db("anifra_data") or die(mysql_error());
mysql_query("set names utf8");
echo "ddddd$_GET[page]";
if ($_GET[page] && $_GET[page] > 0){
$page = $_GET[page];
} else {
$page = 1;
}
$searching = $_POST['searching_box'];
$page_per_row = 10;
$page_scale = 10;
if ($_POST['search'] == 'search_contents'){
$totalPage_query = "select count(*) as cnt from anifra_memo where anifra_ct like '%$searching%'";
} elseif ($_POST['search'] == 'search_name') {
$totalPage_query = "select count(*) as cnt from anifra_memo where anifra_id like '%$searching%'";
} elseif ($_POST['search'] == 'search_email') {
$totalPage_query = "select count(*) as cnt from anifra_memo where anifra_em like '%$searching%'";
} else {
$totalPage_query = "select count(*) as cnt from anifra_memo";
}
$totalPage_result = mysql_query($totalPage_query, $connect);
$totalPage_data = mysql_fetch_array($totalPage_result);
$total_count = $totalPage_data[cnt];
echo "";
echo "게시물 총 개수 - $totalPage_data[cnt]";
echo "";
$total_page = ceil($total_count / $page_per_row);
$from_recording = ($page - 1) * $page_per_rows;
echo "";
echo "$from_recording";
echo "";
$paging_str = "";
if ($page > 1) {
$paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1'>처음</a>";
echo "$paging_str";
}
$start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;
$end_page = $start_page + $page_scale - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."'>이전</a>";
}
if ($total_page > 1) {
for ($i = $start_page; $i <= $end_page; $i++) {
if ($page != $i){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."'><span>$i</span></a>";
// $paging_str = $_SERVER[PHP_SELF];
// $paging_str .= " <a href='anifra_list.php?page=".$i."'><span>$i</span></a>";
}else{
$paging_str .= " <b>$i</b> ";
}
}
}
if ($total_page > $end_page){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."'>다음</a>";
}
if ($page < $total_page) {
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$total_page."'>맨끝</a>";
}
// $query = "select * from anifra_memo where 1 order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
echo "";
// if ($searching == ""){
// echo"<script>alert(\"검색어를 입력하세요.\");</script>";
// echo"<script>history.go(-1);</script>";
// exit;
// } else if ($_POST['search'] == 'search_choose') {
// echo"<script>alert(\"검색어 단위를 입력하세요.\");</script>";
// echo"<script>history.go(-1);</script>";
// exit;
// }
echo "";
echo "검색어 - $searching";
// switch ($_POST['search']){
// case 'search_contents':
// // echo "내용";
// $query = "select * from anifra_memo where anifra_ct like '%$searching%'";
//
// break;
// case 'search_name':
// // echo "이름";
// $query = "select * from anifra_memo where anifra_id like '%$searching%'";
// break;
// case 'search_email':
// // echo "이메일";
// $query = "select * from anifra_memo where anifra_em like '%$searching%'";
// break;
//
// }
if ($_POST['search'] == 'search_contents'){
$query = "select * from anifra_memo where anifra_ct like '%$searching%' order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
} elseif ($_POST['search'] == 'search_name') {
$query = "select * from anifra_memo where anifra_id like '%$searching%' order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
} elseif ($_POST['search'] == 'search_email') {
$query = "select * from anifra_memo where anifra_em like '%$searching%' order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
} else {
$query = "select * from anifra_memo where 1 order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
}
$result = mysql_query($query, $connect);
$rows = mysql_num_rows($result);
echo "";
echo "검색된 데이터 갯수 - $rows";
echo "";
?>
<table style="width: 1000px; font-size: 12px;">
<tr>
<td height="20" bgcolor="gray" align="center" valign="middle" style="border:1px #000000 solid;font-weight:bold;">내용</td>
<td align = "center" bgcolor="gray" style = "border: 1px #000000 solid;font-weight:normal;">이름</td>
<td align = "center" bgcolor="gray" style = "border: 1px #000000 solid;font-weight:normal;">이메일</td>
<td align = "center" bgcolor="gray" style = "border: 1px #000000 solid;font-weight:normal;">작성일</td>
<!-- <td align = "center" style = "border: 1px #000000 solid;font-weight:normal;">수정/삭제</td>-->
</tr>
<?php
$i = 0;
?>
<?php
while($data = mysql_fetch_array($result)){
// echo "메모 - $data[m_memo]";
?>
<tr>
<td height="20" align="center" valign="middle" style="border:1px #CCCCCC solid;"><a href="anifra_detail.php?anifra_idx=<?php echo $data[anifra_idx]?>"><?php echo $data[anifra_ct]?><a/></td>
<td align="center" style="border:1px #CCCCCC solid;"><?php echo $data[anifra_id]?></td>
<td align="center" style="border:1px #CCCCCC solid;"><?php echo $data[anifra_em]?></td>
<td align="center" style="border:1px #CCCCCC solid;"><?php echo substr($data[anifra_dt],5,11)?></td>
<!--<td align="center" style="border:1px #CCCCCC solid;"><input type="button" value="수정" onClick="location.href='anifra_modify.php?anifra_idx=<?php echo $data[anifra_idx]?>'"><input type="button" value="삭제" onClick="location.href='anifra_delete.php?anifra_idx=<?php echo $data[anifra_idx]?>'"></td>-->
</tr>
<?php
$i++;
}
if($i == 0){
?>
<tr>
<td height="50" align="center" valign="middle" colspan="5" style="border:1px #CCCCCC solid;">자료가 하나도 없습니다.</td>
</tr>
<?php
}
if($paging_str){
?>
<tr>
<td height="30" bgcolor="gray" align="center" colspan="5" style="border:1px #CCCCCC solid;"><?php echo $paging_str?></td>
</tr>
<?php
}
// 11.디비 닫기
mysql_close($connect);
?>
</table>
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$searching."'><span>$i</span></a>";
이게 틀렸어요 $searching 이게 아니구 $search 이렇게 들어가야 해요 그리고 뒤에 $searching 이거를 더 추가 시켜 주셔야해요
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$search."&searching=".$searching."'><span>$i</span></a>";
이렇게 써야 겠죠? ㅋ
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$search."&searching_box=".$searching."'><span>$i</span></a>";
이렇게 하니까 되었습니다!!!!
페이징 시 흔히 범하는 실수입니다.
검색어 기능이 없다면 페이지 번호에 링크 걸때 클릭한 페이지 번호만 넘기면 되지만,
검색어 기능이 있는 경우라면, 페이지 번호 링크에는 클릭한 페이지 번호와, 검색어까지 함께 넘겨야 합니다.
(검색을 한번 했다면, 페이지를 옴겨갈때 계속 검색어를 들고 다녀야 합니다.)
그러면 페이지 로드 전에 php단에서 해당 검색어에 대한 검색을 다시 하고 그에 대한 2페이지를 출력할 수 있습니다.
2번을 눌렀을때 search값이 유지가 안돼는거 갔습니다. 페이징에서 링크를
더 추가 시켜야 할듯 합니다. ?page=변수&search=$search 뭐 이런식으루요 그리고 $_POST['search'] 이 값은
$_GET['search']으로 변경 하셔야 되구요.. 이런것보다 서버환경에 globlas_register = ON으로 변경하시구 _POST나 _GET을
빼고 그냥 $변수명 이렇게 사용하세요
global_registers를 On으로 하는 것은 보안 상 안하는 것이 좋습니다.
웬만하면 $_POST와 $_GET을 구분하여 사용하는 것이 좋으나 정 불편하다면 $_REQUEST($_POST + $_GET)가 있으니 이용해 보세요.
이거 추천 ㅋㅋㅋㅋ globlas_register = ON 이거 하지 말고 정컴님처럼 변수는 사용 하셔도 될거 같아요
method="get"를 post로 변경하고 모든 $_GET을 $_POST로 모두 변경을 하였습니다.
페이징 주소도 하단처럼 진행을 하였는데도
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$searching."'><span>$i</span></a>";
검색 후 2번 페이지를 누르면 전체 페이지의 2번 페이지가 노출되네요.
받아 먹지를 못 하네요 ㅠ
페이지 주소를 그렇게 하셨다면, $_GET['search']로 값이 들어옵니다.
소스를 전부 보지 않았지만 모든 $_POST를 $_GET으로 변경하시고 method도 get으로 하시면 될 것 같습니다.
게시판 페이징 구현
<?
$page = $_GET[page] ? $_GET[page] : 1;
$total_articles = 100;
$scale = 5; // 페이지당 리스트 수
$pageScale = 5; // 한화면의 페이지 수
$totalPage = ceil ($total_articles / $scale);
$pageBlock = ceil ($page / $pageScale);
$listStart = $scale * ($page - 1);
$listEnd = $scale * ($page + 1);
$articles_num = $total_articles - $listStart;
$blockStart = ($pageBlock - 1) * $pageScale;
$blockEnd = $pageBlock * $pageScale;
if ($blockEnd > $totalPage) $blockEnd = $totalPage;
?>
<? if ($pageBlock > 1) { // 이전페이지?>
<li class="box"><a href="list.php?table=<?=$table?>&page=<?=$blockStart?>">◀</a></li>
<?}?>
<? for ($i = $blockStart + 1; $i <= $blockEnd; $i++) { // 페이지 출력?>
<li class="box">
<? if($i==$page){?>
<a><span class="orange"><?=$i?></span></a>
<?} else {?>
<a href="list.php?table=<?=$table?>&page=<?=$i?>"><?=$i?></a>
<?}?>
</li>
<?}?>
<?if ($pageBlock < $totalPage && $blockEnd != $totalPage) {?>
<li class="box"><a href="list.php?table=<?=$table?>&page=<?=($blockEnd+1)?>">▶</a></li>
<?}?>
출처: http://mosei.tistory.com/entry/게시판-페이징-구현?category=582082 [씹어먹는 블로그]
검색 후 페이징 까지는 정상적으로 처리가 되는데 ...
문제는 검색 후 2번 페이지를 누르면 전체 목록의 2번이 노출되네요.....
저번주에 php를 시작했는데 도통 어떻게 해야할지 감이 오질 않아서 고수님들의 답변 기다리겠습니다.ㅠㅠ
소스 확인 좀 부탁드릴께요~
<meta charset="utf-8">
<?php
include "anifra_memo.php";
?>
<form action="anifra_list.php" method="post">
<select name="search">
<option value="search_choose">검색선택</option>
<option value="search_contents">내용</option>
<option value="search_name">이름</option>
<option value="search_email">이메일</option>
</select>
<tr>
<td align="center" style="width:400px;height:50px;"><input type="text" name="searching_box" style="width:200px;"></td>
</tr>
<input type="submit" value="Search">
</form>
<?php
$connect = mysql_connect("127.0.0.1", "root", "rd2810tu") or die(mysql_error());
mysql_select_db("anifra_data") or die(mysql_error());
mysql_query("set names utf8");
echo "ddddd$_GET[page]";
if ($_GET[page] && $_GET[page] > 0){
$page = $_GET[page];
} else {
$page = 1;
}
$searching = $_POST['searching_box'];
$page_per_row = 10;
$page_scale = 10;
if ($_POST['search'] == 'search_contents'){
$totalPage_query = "select count(*) as cnt from anifra_memo where anifra_ct like '%$searching%'";
} elseif ($_POST['search'] == 'search_name') {
$totalPage_query = "select count(*) as cnt from anifra_memo where anifra_id like '%$searching%'";
} elseif ($_POST['search'] == 'search_email') {
$totalPage_query = "select count(*) as cnt from anifra_memo where anifra_em like '%$searching%'";
} else {
$totalPage_query = "select count(*) as cnt from anifra_memo";
}
$totalPage_result = mysql_query($totalPage_query, $connect);
$totalPage_data = mysql_fetch_array($totalPage_result);
$total_count = $totalPage_data[cnt];
echo "";
echo "게시물 총 개수 - $totalPage_data[cnt]";
echo "";
$total_page = ceil($total_count / $page_per_row);
$from_recording = ($page - 1) * $page_per_rows;
echo "";
echo "$from_recording";
echo "";
$paging_str = "";
if ($page > 1) {
$paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1'>처음</a>";
echo "$paging_str";
}
$start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;
$end_page = $start_page + $page_scale - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."'>이전</a>";
}
if ($total_page > 1) {
for ($i = $start_page; $i <= $end_page; $i++) {
if ($page != $i){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."'><span>$i</span></a>";
// $paging_str = $_SERVER[PHP_SELF];
// $paging_str .= " <a href='anifra_list.php?page=".$i."'><span>$i</span></a>";
}else{
$paging_str .= " <b>$i</b> ";
}
}
}
if ($total_page > $end_page){
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."'>다음</a>";
}
if ($page < $total_page) {
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$total_page."'>맨끝</a>";
}
// $query = "select * from anifra_memo where 1 order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
echo "";
// if ($searching == ""){
// echo"<script>alert(\"검색어를 입력하세요.\");</script>";
// echo"<script>history.go(-1);</script>";
// exit;
// } else if ($_POST['search'] == 'search_choose') {
// echo"<script>alert(\"검색어 단위를 입력하세요.\");</script>";
// echo"<script>history.go(-1);</script>";
// exit;
// }
echo "";
echo "검색어 - $searching";
// switch ($_POST['search']){
// case 'search_contents':
// // echo "내용";
// $query = "select * from anifra_memo where anifra_ct like '%$searching%'";
//
// break;
// case 'search_name':
// // echo "이름";
// $query = "select * from anifra_memo where anifra_id like '%$searching%'";
// break;
// case 'search_email':
// // echo "이메일";
// $query = "select * from anifra_memo where anifra_em like '%$searching%'";
// break;
//
// }
if ($_POST['search'] == 'search_contents'){
$query = "select * from anifra_memo where anifra_ct like '%$searching%' order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
} elseif ($_POST['search'] == 'search_name') {
$query = "select * from anifra_memo where anifra_id like '%$searching%' order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
} elseif ($_POST['search'] == 'search_email') {
$query = "select * from anifra_memo where anifra_em like '%$searching%' order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
} else {
$query = "select * from anifra_memo where 1 order by anifra_idx desc limit ".$from_recording.", ".$page_per_row;"";
}
$result = mysql_query($query, $connect);
$rows = mysql_num_rows($result);
echo "";
echo "검색된 데이터 갯수 - $rows";
echo "";
?>
<table style="width: 1000px; font-size: 12px;">
<tr>
<td height="20" bgcolor="gray" align="center" valign="middle" style="border:1px #000000 solid;font-weight:bold;">내용</td>
<td align = "center" bgcolor="gray" style = "border: 1px #000000 solid;font-weight:normal;">이름</td>
<td align = "center" bgcolor="gray" style = "border: 1px #000000 solid;font-weight:normal;">이메일</td>
<td align = "center" bgcolor="gray" style = "border: 1px #000000 solid;font-weight:normal;">작성일</td>
<!-- <td align = "center" style = "border: 1px #000000 solid;font-weight:normal;">수정/삭제</td>-->
</tr>
<?php
$i = 0;
?>
<?php
while($data = mysql_fetch_array($result)){
// echo "메모 - $data[m_memo]";
?>
<tr>
<td height="20" align="center" valign="middle" style="border:1px #CCCCCC solid;"><a href="anifra_detail.php?anifra_idx=<?php echo $data[anifra_idx]?>"><?php echo $data[anifra_ct]?><a/></td>
<td align="center" style="border:1px #CCCCCC solid;"><?php echo $data[anifra_id]?></td>
<td align="center" style="border:1px #CCCCCC solid;"><?php echo $data[anifra_em]?></td>
<td align="center" style="border:1px #CCCCCC solid;"><?php echo substr($data[anifra_dt],5,11)?></td>
<!--<td align="center" style="border:1px #CCCCCC solid;"><input type="button" value="수정" onClick="location.href='anifra_modify.php?anifra_idx=<?php echo $data[anifra_idx]?>'"><input type="button" value="삭제" onClick="location.href='anifra_delete.php?anifra_idx=<?php echo $data[anifra_idx]?>'"></td>-->
</tr>
<?php
$i++;
}
if($i == 0){
?>
<tr>
<td height="50" align="center" valign="middle" colspan="5" style="border:1px #CCCCCC solid;">자료가 하나도 없습니다.</td>
</tr>
<?php
}
if($paging_str){
?>
<tr>
<td height="30" bgcolor="gray" align="center" colspan="5" style="border:1px #CCCCCC solid;"><?php echo $paging_str?></td>
</tr>
<?php
}
// 11.디비 닫기
mysql_close($connect);
?>
</table>
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$searching."'><span>$i</span></a>";
이게 틀렸어요 $searching 이게 아니구 $search 이렇게 들어가야 해요 그리고 뒤에 $searching 이거를 더 추가 시켜 주셔야해요
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$search."&searching=".$searching."'><span>$i</span></a>";
이렇게 써야 겠죠? ㅋ
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$search."&searching_box=".$searching."'><span>$i</span></a>";
이렇게 하니까 되었습니다!!!!
페이징 시 흔히 범하는 실수입니다.
검색어 기능이 없다면 페이지 번호에 링크 걸때 클릭한 페이지 번호만 넘기면 되지만,
검색어 기능이 있는 경우라면, 페이지 번호 링크에는 클릭한 페이지 번호와, 검색어까지 함께 넘겨야 합니다.
(검색을 한번 했다면, 페이지를 옴겨갈때 계속 검색어를 들고 다녀야 합니다.)
그러면 페이지 로드 전에 php단에서 해당 검색어에 대한 검색을 다시 하고 그에 대한 2페이지를 출력할 수 있습니다.
2번을 눌렀을때 search값이 유지가 안돼는거 갔습니다. 페이징에서 링크를
더 추가 시켜야 할듯 합니다. ?page=변수&search=$search 뭐 이런식으루요 그리고 $_POST['search'] 이 값은
$_GET['search']으로 변경 하셔야 되구요.. 이런것보다 서버환경에 globlas_register = ON으로 변경하시구 _POST나 _GET을
빼고 그냥 $변수명 이렇게 사용하세요
global_registers를 On으로 하는 것은 보안 상 안하는 것이 좋습니다.
웬만하면 $_POST와 $_GET을 구분하여 사용하는 것이 좋으나 정 불편하다면 $_REQUEST($_POST + $_GET)가 있으니 이용해 보세요.
이거 추천 ㅋㅋㅋㅋ globlas_register = ON 이거 하지 말고 정컴님처럼 변수는 사용 하셔도 될거 같아요
method="get"를 post로 변경하고 모든 $_GET을 $_POST로 모두 변경을 하였습니다.
페이징 주소도 하단처럼 진행을 하였는데도
$paging_str .= " <a href='".$_SERVER[PHP_SELF]."?page=".$i."&search=".$searching."'><span>$i</span></a>";
검색 후 2번 페이지를 누르면 전체 페이지의 2번 페이지가 노출되네요.
받아 먹지를 못 하네요 ㅠ
페이지 주소를 그렇게 하셨다면, $_GET['search']로 값이 들어옵니다.
소스를 전부 보지 않았지만 모든 $_POST를 $_GET으로 변경하시고 method도 get으로 하시면 될 것 같습니다.
게시판 페이징 구현
<?
$page = $_GET[page] ? $_GET[page] : 1;
$total_articles = 100;
$scale = 5; // 페이지당 리스트 수
$pageScale = 5; // 한화면의 페이지 수
$totalPage = ceil ($total_articles / $scale);
$pageBlock = ceil ($page / $pageScale);
$listStart = $scale * ($page - 1);
$listEnd = $scale * ($page + 1);
$articles_num = $total_articles - $listStart;
$blockStart = ($pageBlock - 1) * $pageScale;
$blockEnd = $pageBlock * $pageScale;
if ($blockEnd > $totalPage) $blockEnd = $totalPage;
?>
<? if ($pageBlock > 1) { // 이전페이지?>
<li class="box"><a href="list.php?table=<?=$table?>&page=<?=$blockStart?>">◀</a></li>
<?}?>
<? for ($i = $blockStart + 1; $i <= $blockEnd; $i++) { // 페이지 출력?>
<li class="box">
<? if($i==$page){?>
<a><span class="orange"><?=$i?></span></a>
<?} else {?>
<a href="list.php?table=<?=$table?>&page=<?=$i?>"><?=$i?></a>
<?}?>
</li>
<?}?>
<?if ($pageBlock < $totalPage && $blockEnd != $totalPage) {?>
<li class="box"><a href="list.php?table=<?=$table?>&page=<?=($blockEnd+1)?>">▶</a></li>
<?}?>
출처: http://mosei.tistory.com/entry/게시판-페이징-구현?category=582082 [씹어먹는 블로그]
- 이전글PHP 파일 업로드 21.02.22
- 다음글웹서비스를 위한 퍼미션 문제 21.02.22
댓글목록
등록된 댓글이 없습니다.

