티스토리 뷰

반응형

웹 개발을 하다 보면 퇴사자와 재직자를 구분해서 데이터를 관리하고 표시해야 하는 경우가 종종 생깁니다. 이번 글에서는 PHP를 이용해 퇴사자와 재직자 데이터를 분리하여 표시하는 방법을 예제와 함께 살펴보겠습니다. 특히, 체크박스를 활용해 사용자가 손쉽게 퇴사자를 포함할지 여부를 선택할 수 있도록 구현하는 방법을 소개합니다.

 

체크박스 UI 추가

먼저, HTML에 체크박스를 추가합니다. 사용자는 이를 통해 퇴사자 데이터를 포함하거나 제외할 수 있습니다. 체크박스는 다음과 같이 간단하게 추가할 수 있습니다:

<div class="d-flex mt-3 mb-1 justify-content-center align-items-center">
    <div class="form-check">
        <input class="form-check-input" type="checkbox" id="showRetired" name="showRetired" onchange="filterRetired()" <?php echo isset($_POST['showRetired']) && $_POST['showRetired'] == 1 ? 'checked' : ''; ?>>
        <label class="form-check-label fs-6 me-2" for="showRetired">퇴사자</label>
    </div>
    &nbsp;&nbsp;&nbsp;
    <button type="button" class="btn btn-dark btn-sm" onclick="popupCenter('write_form.php', '신규', 600, 700); return false;">
        <ion-icon name="create-outline"></ion-icon> 신규
    </button>
    &nbsp;&nbsp;&nbsp;
    <button type="button" class="btn btn-dark btn-sm" id="csvDownload">
        <ion-icon name="save-outline"></ion-icon> CSV
    </button>
</div>

이 체크박스는 onchange 이벤트를 통해 상태가 변경될 때마다 폼을 제출하도록 설정했습니다. 또한, PHP를 이용해 체크박스 상태를 유지하도록 구현했습니다. 이는 사용자가 페이지를 새로고침하거나 데이터를 다시 조회했을 때, 이전에 설정한 체크박스 상태를 기억할 수 있도록 돕습니다.

PHP로 데이터 필터링

체크박스 상태에 따라 퇴사자를 포함하거나 제외하는 로직은 PHP에서 처리됩니다. 아래 코드는 $_POST로 체크박스 상태를 받아 데이터 필터링에 반영하는 방법을 보여줍니다:

require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();

if (isset($_REQUEST["search"])) {
    $search = $_REQUEST["search"];
}

if (isset($_REQUEST["mode"])) {
    $mode = $_REQUEST["mode"];
}

if (isset($_REQUEST["list"])) {
    $list = $_REQUEST["list"];
} else {
    $list = 0;
}

if (isset($_REQUEST["page"])) {
    $page = $_REQUEST["page"];
} else {
    $page = 1;
}

isset($_REQUEST["year"]) ? $year = $_REQUEST["year"] : $year = date("Y");
$showRetired = isset($_POST['showRetired']) ? $_POST['showRetired'] : 0;

$whereCondition = " WHERE referencedate = '$year' ";
$andCondition = " AND referencedate = '$year' ";
if (!$showRetired) {
    $whereCondition .= " AND status != '퇴사'";
}

$scale = 100;       // 한 페이지에 보여질 게시글 수
$page_scale = 15;   // 한 페이지당 표시될 페이지 수
$first_num = ($page - 1) * $scale;  // 리스트에 표시되는 게시글의 첫 순번.

if ($mode == "search") {
    if (empty($search)) {
        $sql = "SELECT * FROM ".$DB.".almember ".$whereCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC LIMIT $first_num, $scale";
        $sqlcon = "SELECT * FROM ".$DB.".almember ".$whereCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC";
    } elseif (!empty($search)) {
        $sql = "SELECT * FROM ".$DB.".almember WHERE (name LIKE '%$search%') OR (part LIKE '%$search%') OR (referencedate LIKE '%$search%')";
        $sql .= " ".$andCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC LIMIT $first_num, $scale";
        $sqlcon = "SELECT * FROM ".$DB.".almember WHERE (name LIKE '%$search%') OR (part LIKE '%$search%') OR (referencedate LIKE '%$search%') ";
        $sqlcon .= " ".$andCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC";
    }
} else {
    $sql = "SELECT * FROM ".$DB.".almember ".$whereCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC LIMIT $first_num, $scale";
    $sqlcon = "SELECT * FROM ".$DB.".almember ".$whereCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC";
}

try {
    $stmh = $pdo->query($sql);
    while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) {
        include "rowDB.php"; // 데이터 출력
    }
} catch (PDOException $Exception) {
    echo "오류: ".$Exception->getMessage();
}

이 코드에서는 $_REQUEST와 $_POST를 활용하여 사용자가 입력한 데이터를 처리하고, 쿼리에 조건을 동적으로 추가하여 데이터를 필터링합니다. 예를 들어, 퇴사자를 포함하지 않으려면 status != '퇴사' 조건을 추가합니다.

페이지네이션 구현

페이지네이션은 대량의 데이터를 효율적으로 표시하기 위한 핵심 기능입니다. 위 코드에서는 페이지 번호와 게시글 수를 기반으로 첫 게시글 순번을 계산하고, 데이터베이스 쿼리에 적용하여 필요한 데이터만 가져옵니다:

$first_num = ($page - 1) * $scale;  // 리스트에 표시되는 게시글의 첫 순번.
$sql = "SELECT * FROM ".$DB.".almember ".$whereCondition." ORDER BY referencedate DESC, dateofentry ASC, num DESC LIMIT $first_num, $scale";

결과 출력

조회된 데이터는 rowDB.php를 통해 각 행으로 출력됩니다. 이 파일에는 각 데이터 행을 HTML로 렌더링하는 코드가 포함되어야 하며, 필터링된 결과를 즉시 확인할 수 있습니다.

이번 구현을 통해 퇴사자 데이터를 효과적으로 관리하고, 사용자가 필요에 따라 데이터 표시 여부를 조정할 수 있는 시스템을 만들 수 있습니다. PHP와 MySQL을 활용해 동적인 데이터 관리를 진행할 때 이러한 방식은 직관적이고 유용합니다. 필요한 부분에 맞춰 코드를 확장하면 더욱 다양한 기능을 손쉽게 추가할 수 있습니다.

반응형
댓글