달력

112024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

view_user.php를 last_name, first_name, registration_date 별로 각각 정렬하여 출력할 수 있도록 수정한다.
sort는 SQL의 order by 절을 이용하여 asc 방식으로 정렬하게 된다.
sort를 결정하는 것도 GET타입 method를 이용하여 링크를 만든다.




<?php # Script 9.4 - #5
$page_title = 'View the Current Users';
include ('includes/header.html');

echo '<h1>Registered Users</h1>';

require_once('../mysqli_connect.php');

$display = 10;

if(isset($_GET['p']) && is_numeric($_GET['p'])) {
    $pages = $_GET['p'];
} else {
    $q = "SELECT COUNT(user_id) FROM users";
    $r = @mysqli_query($dbc, $q);
    $row = @mysqli_fetch_array($r, MYSQLI_NUM);
    $records = $row[0];

    if($records > $display) {
        $pages = ceil($records/$display);
    } else {
        $pages = 1;
    }
}

if(isset($_GET['s']) && is_numeric($_GET['s'])) {
    $start = $_GET['s'];
} else {
    $start = 0;
}

$sort = (isset($_GET['sort'])) ? $_GET['sort'] : 'rd'; // sort값이 null이 아닐 경우에는 $sort=$_GET['sort']를 할당하고, null값이 들어오면 기본값인 'rd'를 $sort에 할당한다

switch($sort) {
    case 'ln';
        $order_by = 'last_name ASC';
        break;
    case 'fn';
        $order_by = 'first_name ASC';
        break;
    case 'rd';
        $order_by = 'registration_date ASC';
        break;
    default:
        $order_by = 'registration_date ASC';
        $sort = 'rd';
        break;
}

$q = "SELECT last_name, first_name, DATE_FORMAT(registration_date, '%M %d, %Y') AS dr, user_id FROM users ORDER BY $order_by LIMIT $start, $display"; // ORDER BY 절에 $order_by 변수를 넣어 정렬기준을 선택한다
$r = @mysqli_query($dbc, $q);

echo '<table align="center" cellspacing="5" cellpadding="5" width="100%">
<tr>
    <td align="left"><b>Edit</b></td>
    <td align="left"><b>Delete</b></td>
    // Last Name, First Name, Date Registration를 각각 기준으로 정렬할 수 있게 sort를 전달한다
    <td align="left"><b><a href="view_users.php?sort=ln">Last Name</a></b></td>
    <td align="left"><b><a href="view_users.php?sort=fn">First Name</a></b></td>
    <td align="left"><b><a href="view_users.php?sort=dr">Date Registration</a></b></td>
</tr>
';

$bg = '#eeeeee';

while($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
    $bg = ($bg=='#eeeeee' ? '#ffffff' : '#eeeeee');
    echo '<tr bgcolor="' . $bg . '">
        <td align="left"><a href="edit_user.php?id=' . $row['user_id'] . '">Edit</a></td>
        <td align="left"><a href="delete_user.php?id=' . $row['user_id'] . '">Delete</a></td>
        <td align="left">' . $row['last_name'] . '</td>
        <td align="left">' . $row['first_name'] . '</td>
        <td align="left">' . $row['dr'] . '</td>
    </tr>
    ';
}

echo '</table>';

mysqli_free_result ($r);
mysqli_close($dbc);

// 현재 적용된 정렬기준을 다른 페이지에서도 적용하기 위해 각각의 링크에 '&sort='.$sort. 를 추가한다
if ($pages > 1) {
    echo '<br /><p>';
    $current_page = ($start/$display) + 1;

    if($current_page != 1) {
        echo '<a href="view_users.php?s=' . ($start - $display) . '&p=' . $pages . '&sort=' . $sort . '">Previous</a> ';
    }

    for ($i = 1; $i <= $pages; $i++) {
        if($i != $current_page) {
            echo '<a href="view_users.php?s=' . (($display * ($i - 1))) . '&p=' . $pages . '&sort=' . $sort . '">' . $i . '</a> ';
        } else {
            echo $i . ' ';
        }
    }
    if ($current_page != $pages) {
        echo '<a href="view_users.php?s=' . ($start + $display) . '&p=' . $pages . '&sort=' . $sort . '">Next</a>';
    }
}

include ('includes/footer.html');
?>




#Error Comment

각각의 정렬기준을 위해 $sort 변수와 $order_by 변수를 만들었다.
쿼리문의 ORDER BY 절에서 쓰이는 변수 $order_by는 $sort를 통해 derived된다.
쿼리문의 어떠한 위치에라도 변수를 쓸 수 있다는 점을 확인 할 수 있는 예제다.

이번 예제의 포인트는 각각의 링크에도 $sort 변수를 전달해야한다는 점이다.
이는 다른 페이지에서도 정렬 결과가 적용되게 하기 위함이다.


Posted by CloudySky
|