티스토리 뷰
웹 개발을 하다 보면 퇴사자와 재직자를 구분해서 데이터를 관리하고 표시해야 하는 경우가 종종 생깁니다. 이번 글에서는 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>
<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>
<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을 활용해 동적인 데이터 관리를 진행할 때 이러한 방식은 직관적이고 유용합니다. 필요한 부분에 맞춰 코드를 확장하면 더욱 다양한 기능을 손쉽게 추가할 수 있습니다.
'IT tech Coding > php' 카테고리의 다른 글
PHP PDO에서 IN 절을 안전하게 사용하는 방법 - array_map과 prepared statement 활용하기 (0) | 2024.12.27 |
---|---|
PHP 세션 유지 시간 12시간 설정하기: .htaccess 활용 가이드 (0) | 2024.12.26 |
PHP에서 문자열 길이를 제한하는 방법 (0) | 2024.12.14 |
PHP에서 isset으로 Input Value 기본값 설정하기 (0) | 2024.12.11 |
php 배열에서 특정 키를 기준으로 중복 제거하기 array_reduce , (0) | 2024.12.03 |
- Total
- Today
- Yesterday
- 효율적코딩방법
- 코딩튜토리얼
- Bootstrap 5
- 구글드라이브API
- #프로그램설치
- 티스토리챌린지
- 테크에능한여성
- #파이썬패키징
- json파일편하게보는법
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- #InstallForge
- 엑셀입력보호
- 코딩효율성
- General error: 2031
- 스크립트작성기초
- isset을 적용해야 하는 이유
- 파이썬코드줄바꿈방법
- 도면자동생성
- ajax오류메시지
- 오블완
- sql문장 날짜계산
- json파일형태보기
- 프로그래머생활
- 엑셀보호
- 뫄프로그래밍
- 캐드자동작도
- 오토핫키가이드
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 엑셀셀보호
- chatGPT3.5파이썬버전
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |