본문 바로가기

Programming/php

[PHP] MySql 데이터 끌어와서 리스팅&페이징 하기



어제 기본적인 게시판 글 등록&수정은 일단 알겠다고 실언아닌 실언했다가

오늘 하루종일 회사 DB에 등록된 상품바코드랑 상품명 리스팅이랑 페이징을 하라는 숙제를 받았다ㅠ.ㅠ

일단 관리자 서버에 있는 파일들을 참고해서 만들어보라고 하셔서....

참고해서 만들어야지~ 했는데 그게 뭐 말이 쉽지ㅠㅠ아아아


웹표준 그런거 신경 안쓰고 코딩만 보면 된다고 하셔서.. 페이지 레이아웃은 저렇게.....=.=


처음에는 db연결해서 바코드랑 상품명을 리스팅만 쫙~ 해보자 하고 코딩을 했는데,

계속 맨 첫번째 바코드랑 상품명만 검색되고ㅠㅠ for문을 돌려도 해결되지가 않아서 애를 먹었다ㅠㅠ

책을 보면서 응용해서 코딩을 하니깐 그제서야 됐는데,

이게.. mysqli_~ 이랑 mysql_~의 차이인가??

처음에는 mysql_~로 코딩해서 db접속을 했는데

책에는 mysqli_~로 코딩이 되있어서 이걸로 해보니깐 레코드 검색도 잘되고

while문을 돌렸을 때 목록이 쫙 뜨더라는....


일단 페이징을 하기전의 코딩은,





listview.php(paging 이전)


<html>

<head>

<title>listview</title>

</head>

<body style="margin: 0 auto;">

<center>

<table style="border: 1px solid #000; padding: 10px;">

<tr>

<th>barcode no.</th>

<th>product</th>

</tr>

<?

include "class/class_mysql.php";

for($i=0; $i< $num_result; $i++) {

$row=$result->fetch_assoc();

echo "<tr><td style='padding:5px;'>".stripslashes($row['bar'])."</td>";

echo "<td style='padding:5px;'>".htmlspecialchars(stripslashes($row['prod']))."</td></tr>";

}

?>

</table>

</center>

</body>

</html>


요정도???


여기에 페이징을 추가하려고 하니깐 또 그때부터 머리가 아프기 시작...ㅠㅠ




listview.php(페이징 완료)


<html>

<head>

<title>listview</title>

</head>

<style type="text/css">

a { text-decoration: none; visited:  }

</style>

<body style="margin: 0 auto; padding: 50px 0 0 0;">

<center>

<table style="width: 700px; border: 1px solid #000; padding: 10px;">

<tr>

<th width=50px>no.</th>

<th width=150px>barcode no.</th>

<th width=500px>product</th>

</tr>

<?

include "class/class_mysql.php";

while($row=mysqli_fetch_array($result)) {

?>

<tr>

<td style='padding:5px;'><?= $row[idx] ?></td>

<td style='padding:5px;'><?= $row[bar] ?></td>

<td style='padding:5px;'><?= $row[prod] ?></td>

</tr>

<?

}

?>

</table>

<br>

<div>

<?

if ($total_page < $end_page) $end_page = $total_page;

if ($start_page >= $page_list_size) {

   $prev_list = ($start_page - 1)*$page_size;

   echo  "<a href=\"$PHP_SELF?no=$prev_list\">prev</a>\n";

}


for ($i=$start_page;$i <= $end_page;$i++) {

$page=$page_size*$i; // 페이지값을 no 값으로 변환.

$page_num = $i+1; // 실제 페이지 값이 0부터 시작하므로 표시할때는 1을 더해준다. 페이지 0 -> 1

if ($no!=$page){ //현재 페이지가 아닐 경우만 링크를 표시

echo "<a href=\"$PHP_SELF?no=$page\">";

}

echo " $page_num "; //페이지를 표시

if ($no!=$page){

echo "</a>";

}

}


if($total_page > $end_page) {

$next_list = ($end_page + 1)* $page_size;

echo "<a href=$PHP_SELF?no=$next_list>next</a><p>";

}

?>

</div>

</center>

</body>

</html>


db_conn.php


<?

@ $conn=new mysqli("host", "id","password", "db_name");

if(mysqli_connect_errno()) {

echo 'error: could not connect database....';

exit;

}

$page_size=10;

$page_list_size = 10;


if (!$no || $no < 0) $no=0;


$query="select b_seq AS idx, b_barcode AS bar, b_product_kor AS prod from lioele_barcode order by idx asc limit $no,$page_size";


$result=$conn->query($query);

$result_count=$conn->query("select count(*) from lioele_barcode");

$result_row=mysqli_fetch_row($result_count);

$total_row = $result_row[0]; 


echo ("data result : " . $total_row . "<br><br>");


if ($total_row <= 0) $total_row = 0; // 총게시물의 값이 없거나 할경우 기본값으로 세팅

$total_page = floor(($total_row - 1) / $page_size); // 총게시물을 페이지 사이즈로 나눈뒤 내림을 한다.

$current_page = floor($no/$page_size); // 현재 페이지 계산

$start_page = (int)($current_page / $page_list_size) * $page_list_size;

$end_page = $start_page + $page_list_size - 1;



?>