Files
sam-kd/member/write_form.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

560 lines
24 KiB
PHP

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
if (!isset($_SESSION["level"]) || intval($_SESSION["level"]) > 1) {
sleep(1);
header("Location:" . $WebSite . "login/login_form.php");
exit;
}
include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php';
$title_message = '회원관리(등록/수정)';
?>
<?php include $_SERVER['DOCUMENT_ROOT'] . '/mymodal.php'; ?>
<?php
isset($_REQUEST["num"]) ? $num = $_REQUEST["num"] : $num = '';
isset($_REQUEST["mode"]) ? $mode = $_REQUEST["mode"] : $mode = '';
// corp.json 파일에서 소속 목록 불러오기
$corpFile = $_SERVER['DOCUMENT_ROOT'] . '/member/corp.json';
$corpData = [];
if (file_exists($corpFile)) {
$corpJson = file_get_contents($corpFile);
$corpData = json_decode($corpJson, true);
if (!is_array($corpData)) { $corpData = []; }
}
// part.json 파일에서 부서 목록 불러오기
$partFile = $_SERVER['DOCUMENT_ROOT'] . '/member/part.json';
$partData = [];
if (file_exists($partFile)) {
$partJson = file_get_contents($partFile);
$partData = json_decode($partJson, true);
if (!is_array($partData)) {
$partData = [];
}
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
if ($mode == 'modify') {
try {
$sql = "select * from " . $DB . ".member where num = ? ";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1, $num, PDO::PARAM_STR);
$stmh->execute();
$count = $stmh->rowCount();
$row = $stmh->fetch(PDO::FETCH_ASSOC); // $row 배열로 DB 정보를 불러온다.
include '_row.php';
} catch (PDOException $Exception) {
print "오류: " . $Exception->getMessage();
}
} else {
$num = '';
$id = '';
$pass = '';
$name = '';
$nick = NULL;
$hp = NULL;
$email = NULL;
$regist_day = NULL;
$lv = NULL;
$authority = NULL;
$eworks_lv = 4;
$division = NULL;
$position = NULL;
$part = NULL;
$numorder = NULL;
$lv = '4';
$mode = 'insert';
$address = '';
$card_company = '';
$card_number = '';
$pay_bank = '';
$pay_account = '';
$pay_holder = '';
}
?>
<title> <?=$title_message?> </title>
<style>
.table-hover tbody tr:hover {
cursor: pointer;
}
</style>
</head>
<div class="container-fluid">
<div class="d-flex justify-content-center align-items-center">
<div class="col-12 text-center">
<div class="card align-middle">
<div class="card" style="padding:10px;margin:10px;">
<h4 class="card-title text-center" style="color:#113366;"> 회원등록/수정 </h4>
</div>
<div class="card-body text-center">
<form id="board_form" name="board_form" class="form-signin" method="post">
<input type="hidden" id="mode" name="mode" value="<?=$mode?>">
<input type="hidden" id="num" name="num" value="<?=$num?>">
<table class="table table-bordered">
<tr>
<td>* 성명</td>
<td>
<input type="text" id="name" name="name" value="<?=$name?>" class="form-control" required>
</td>
<td>* id</td>
<td>
<input type="text" id="id" name="id" value="<?=$id?>" class="form-control" required>
</td>
</tr>
<tr>
<td>* password</td>
<td>
<input type="text" id="pass" name="pass" value="<?=$pass?>" class="form-control" required>
</td>
<td>연락처 HP</td>
<td>
<input type="text" id="hp" name="hp" value="<?=$hp?>" class="form-control">
</td>
</tr>
<tr>
<td>* 레벨</td>
<td>
<input type="text" id="lv" name="lv" value="<?=$lv?>" class="form-control" >
</td>
<td class="text-success fw-bold"> Email</td>
<td>
<input type="text" id="email" name="email" value="<?=$email?>" class="form-control text-start" style="font-size: 0.8rem!important; " placeholder="Email @형태" required>
</td>
</tr>
<tr>
<td>* 회사(소속)</td>
<td>
<select id="division" name="division" class="form-select" style="font-size: 0.8rem; height: 32px;">
<option value=""><?= "(소속)" ?></option>
<?php foreach($corpData as $corp): ?>
<option value="<?= htmlspecialchars($corp, ENT_QUOTES, 'UTF-8') ?>" <?= (isset($division) && $division === $corp) ? 'selected' : '' ?>>
<?= htmlspecialchars($corp, ENT_QUOTES, 'UTF-8') ?>
</option>
<?php endforeach; ?>
</select>
</td>
<td>* 부서(파트)</td>
<td>
<select id="part" name="part" class="form-select" style="font-size: 0.8rem; height: 32px;">
<option value=""><?= "(부서)" ?></option>
</select>
</td>
</tr>
<tr>
<td>* 직위</td>
<td>
<input type="text" id="position" name="position" value="<?=$position?>" class="form-control">
</td>
<td> 회계권한 </td>
<td class="text-center">
<select id="authority" name="authority" class="form-select" style="font-size: 0.8rem; height: 32px;">
<option value="" <?= ($authority == '') ? 'selected' : '' ?>>선택</option>
<option value="ACCOUNT" <?= ($authority == 'ACCOUNT') ? 'selected' : '' ?>>ACCOUNT</option>
</select>
</td>
</tr>
<tr>
<td>번호순서 Numorder</td>
<td>
<input type="text" id="numorder" name="numorder" value="<?=$numorder?>" class="form-control">
</td>
<td>전자결재 eworks_lv</td>
<td>
<select id="eworks_lv" name="eworks_lv" class="form-select" style="font-size: 0.8rem; height: 32px;">
<option value="1" <?= ($eworks_lv == '1') ? 'selected' : '' ?>>1</option>
<option value="2" <?= ($eworks_lv == '2') ? 'selected' : '' ?>>2</option>
<option value="3" <?= ($eworks_lv == '3') ? 'selected' : '' ?>>3</option>
<option value="4" <?= ($eworks_lv == '4') ? 'selected' : '' ?>>4</option>
</select>
</td>
</tr>
<tr>
<td>* 1차 결재</td>
<td>
<select id="firstApprovalSelect" class="form-select" style="font-size: 0.8rem; height: 32px;">
<option value=""><?= "(1차 결재권자)" ?></option>
<?php
// eworks_lv가 1 또는 2인 회원 목록을 불러옴
$sqlmember = "SELECT id, name FROM {$DB}.member WHERE eworks_lv IN ('1','2') ORDER BY name ASC";
$memberstmt = $pdo->query($sqlmember);
while ($members = $memberstmt->fetch(PDO::FETCH_ASSOC)) {
?>
<option value="<?= htmlspecialchars($members['id'], ENT_QUOTES, 'UTF-8') ?>"
<?= (isset($first_approval_id) && $first_approval_id === $members['id']) ? 'selected' : '' ?>>
<?= htmlspecialchars($members['name'], ENT_QUOTES, 'UTF-8') ?>
</option>
<?php } ?>
</select>
</td>
<td>* 1차 결재 ID</td>
<td>
<input type="hidden" id="first_approval_name" name="first_approval_name" class="form-control" readonly style="font-size: 0.9rem; height: 32px;" value="<?= isset($first_approval_name) ? $first_approval_name : '' ?>">
<!-- 실제 결재권자 ID 저장 (hidden) -->
<input type="hidden" id="first_approval_id" name="first_approval_id" value="<?= isset($first_approval_id) ? $first_approval_id : '' ?>">
<!-- 화면에 표시되는 아이디(개인정보 보호를 위해 마스킹 처리) -->
<input type="text" id="firstApprovalDisplay" class="form-control mt-1" readonly style="font-size: 0.9rem; height: 32px;" value="<?= isset($first_approval_id) && $first_approval_id != '' ? '****' : '' ?>">
</td>
</tr>
<tr>
<td class="text-primary fw-bold"> 입사일 </td>
<td>
<input type="date" id="enterDate" name="enterDate" value="<?=$enterDate?>" class="form-control">
</td>
<td class="text-danger fw-bold"> 퇴사일 </td>
<td>
<input type="date" id="quitDate" name="quitDate" value="<?=$quitDate?>" class="form-control">
</td>
</tr>
<tr>
<td> 생일(축하금 지급일) </td>
<td colspan="1">
<div class="d-flex justify-content-start align-items-center">
<input type="date" id="birthday" name="birthday" value="<?=$birthday?>" class="form-control w100px mx-1">
<label class="form-check-label mx-1">
<input type="radio" name="birthday_type" class="form-check-input" value="양력" <?= ($birthday_type == '양력') ? 'checked' : '' ?>> 양력
</label>
<label class="form-check-label mx-1">
<input type="radio" name="birthday_type" class="form-check-input" value="음력" <?= ($birthday_type == '음력') ? 'checked' : '' ?>> 음력
</label>
</div>
</td>
<td> 주민번호 </td>
<td colspan="1">
<input type="text" id="IDnumber" name="IDnumber" value="<?php
if(isset($IDnumber) && $IDnumber) {
// 저장된 주민번호에 하이픈 추가하여 표시
if(strlen($IDnumber) == 13) {
echo substr($IDnumber, 0, 6) . '-' . substr($IDnumber, 6);
} else {
echo $IDnumber;
}
}
?>" class="form-control text-start" maxlength="14" placeholder="000000-0000000">
</td>
</tr>
<tr>
<td> 자택주소 </td>
<td colspan="3">
<input type="text" id="address" name="address" value="<?=$address?>" class="form-control text-start">
</td>
</tr>
<tr>
<td class="text-success fw-bold">법인카드 회사</td>
<td><input type="text" id="card_company" name="card_company" value="<?= $card_company ?>" class="form-control text-start"></td>
<td class="text-success fw-bold">법인카드 번호</td>
<td><input type="text" id="card_number" name="card_number" value="<?= $card_number ?>" class="form-control text-start"></td>
</tr>
<tr>
<td colspan="4" class="text-white bg-primary fw-bold" style="padding: 3px!important; "> 급여 계좌정보 </td>
</tr>
<tr>
<td>은행명</td>
<td>
<select id="pay_bank" name="pay_bank" class="form-select text-start" style="font-size: 0.8rem; height: 32px;">
<option value="">은행 선택</option>
<?php
$banks = [
"국민은행", "신한은행", "우리은행", "하나은행", "농협은행",
"기업은행", "SC제일은행", "씨티은행", "카카오뱅크", "케이뱅크",
"토스뱅크", "수협은행", "대구은행", "부산은행", "경남은행",
"광주은행", "전북은행", "제주은행", "우체국", "산업은행","지역농축협"
];
foreach ($banks as $bank) {
$selected = ($pay_bank == $bank) ? 'selected' : '';
echo "<option value=\"{$bank}\" {$selected}>{$bank}</option>";
}
?>
</select>
</td>
<td> 계좌번호 </td>
<td>
<input type="text" id="pay_account" name="pay_account" value="<?=$pay_account?>" class="form-control text-start">
</td>
</tr>
<tr>
<td> 예금주 </td>
<td>
<input type="text" id="pay_holder" name="pay_holder" value="<?=$pay_holder?>" class="form-control text-start">
</td>
<td colspan="2">
</td>
</tr>
</table>
<div class="d-flex justify-content-center mt-2 mb-2">
<?php if (intval($level) == 1 ) {
print '<button id="saveBtn" class="btn btn-dark btn-sm me-2" type="button"> <i class="bi bi-floppy-fill"></i> 저장 </button>';
print '<button id="delBtn" class="btn btn-danger btn-sm me-5" type="button"> <i class="bi bi-trash"></i> 삭제 </button>';
print '<button class="btn btn-outline-secondary btn-sm me-2" type="button" onclick="self.close();"> <i class="bi bi-x-lg"></i> 닫기 </button>';
} ?>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- 페이지로딩 -->
<script>
// 페이지 로딩
$(document).ready(function() {
var loader = document.getElementById('loadingOverlay');
loader.style.display = 'none';
});
</script>
<script>
ajaxRequest = null;
$(document).ready(function() {
var state = $('#state').val();
$("#closeModalBtn").click(function() {
$('#myModal').modal('hide');
});
$("#closeBtn").click(function() {
// 저장하고 창닫기
});
$("#saveBtn").click(function() {
// 주민번호 하이픈 제거
var idNumber = $('#IDnumber').val();
if (idNumber) {
var cleanIdNumber = idNumber.replace(/-/g, '');
$('#IDnumber').val(cleanIdNumber);
}
// DATA 저장버튼 누름
var form = $('#board_form')[0];
var datasource = new FormData(form);
if ($("#name").val() == '' || $("#id").val() == '' || $("#pass").val() == '' ) {
Swal.fire({
title: '필수입력 확인',
text: "필수입력 사항을 확인바랍니다.",
icon: 'error',
confirmButtonText: '확인'
});
} else {
if (ajaxRequest !== null) {
ajaxRequest.abort();
}
ajaxRequest = $.ajax({
enctype: 'multipart/form-data',
processData: false,
contentType: false,
cache: false,
timeout: 600000,
url: "insert.php",
type: "post",
data: datasource,
dataType: "json",
success: function(data) {
console.log(data);
Toastify({
text: "파일 저장완료",
duration: 2000,
close: true,
gravity: "top",
position: "center",
style: {
background: "linear-gradient(to right, #00b09b, #96c93d)"
},
}).showToast();
setTimeout(function() {
if (window.opener && !window.opener.closed) {
window.opener.location.reload(); // 부모 창 새로고침
window.close();
}
}, 1000);
},
error: function(jqxhr, status, error) {
console.log(jqxhr, status, error);
}
});
}
});
$("#delBtn").click(function() {
var state = $("#state").val();
var level = '<?php echo $level; ?>';
var admin = '<?php echo $admin; ?>';
if (level !== '1') {
Swal.fire({
title: '삭제불가',
text: "관리자만 삭제가능합니다.",
icon: 'error',
confirmButtonText: '확인'
});
} else {
Swal.fire({
title: '자료 삭제',
text: "삭제는 신중! 정말 삭제하시겠습니까?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '삭제',
cancelButtonText: '취소'
}).then((result) => {
if (result.isConfirmed) {
$("#mode").val('delete');
$.ajax({
url: "insert.php",
type: "post",
data: $("#board_form").serialize(),
dataType: "json",
success: function(data) {
console.log(data);
Toastify({
text: "파일 삭제완료",
duration: 2000,
close: true,
gravity: "top",
position: "center",
style: {
background: "linear-gradient(to right, #00b09b, #96c93d)"
},
}).showToast();
setTimeout(function() {
if (window.opener && !window.opener.closed) {
window.opener.restorePageNumber(); // 부모 창에서 페이지 번호 복원
window.opener.location.reload(); // 부모 창 새로고침
window.close();
}
}, 1000);
},
error: function(jqxhr, status, error) {
console.log(jqxhr, status, error);
}
});
}
});
}
});
});
// 두날짜 사이 일자 구하기
const getDateDiff = (d1, d2) => {
const date1 = new Date(d1);
const date2 = new Date(d2);
const diffDate = date1.getTime() - date2.getTime();
return Math.abs(diffDate / (1000 * 60 * 60 * 24)); // 밀리세컨 * 초 * 분 * 시 = 일
}
$(document).ready(function(){
$("input").attr("autocomplete", "off");
});
</script>
<script>
$(document).ready(function(){
// 부서 데이터 정의 (JSON 파일의 데이터를 JavaScript로 변환)
var partData = <?php echo json_encode($partData); ?>;
var currentPart = '<?php echo isset($part) ? $part : ""; ?>';
// 회사 선택에 따른 부서 업데이트 함수
function updatePartOptions(selectedCorp) {
var partSelect = $('#part');
partSelect.empty();
partSelect.append('<option value="">(부서)</option>');
if (selectedCorp) {
partData.forEach(function(dept) {
if (dept.corp === selectedCorp) {
var selected = (dept.part === currentPart) ? 'selected' : '';
partSelect.append('<option value="' + dept.part + '" ' + selected + '>' + dept.part + '</option>');
}
});
}
}
// 회사 선택 변경 이벤트
$('#division').on('change', function() {
var selectedCorp = $(this).val();
updatePartOptions(selectedCorp);
});
// 페이지 로드 시 현재 선택된 회사에 따른 부서 설정
var currentDivision = $('#division').val();
if (currentDivision) {
updatePartOptions(currentDivision);
}
// 1차 결재 선택 이벤트
$('#firstApprovalSelect').on('change', function(){
var selectedId = $(this).val();
var selectedName = $(this).find('option:selected').text();
// 선택한 회원의 id를 히든 필드에 저장
$('#first_approval_id').val(selectedId);
// 화면에는 id 대신 "****"을 표시하여 개인정보 보호
$('#firstApprovalDisplay').val('****');
// 1차 결재권자 이름 필드에 선택된 이름을 반영
$('#first_approval_name').val(selectedName);
});
// 주민번호 자동 포맷팅
$('#IDnumber').on('input', function() {
var value = $(this).val().replace(/[^0-9]/g, ''); // 숫자만 추출
var formattedValue = '';
if (value.length <= 6) {
formattedValue = value;
} else if (value.length <= 13) {
formattedValue = value.substring(0, 6) + '-' + value.substring(6);
} else {
formattedValue = value.substring(0, 6) + '-' + value.substring(6, 13);
}
$(this).val(formattedValue);
});
// 주민번호 하이픈 제거하여 서버에 전송
$('#board_form').on('submit', function() {
var idNumber = $('#IDnumber').val();
if (idNumber) {
// 하이픈 제거하여 숫자만 저장
var cleanIdNumber = idNumber.replace(/-/g, '');
$('#IDnumber').val(cleanIdNumber);
}
});
// 주민번호 유효성 검사 (선택사항)
$('#IDnumber').on('blur', function() {
var value = $(this).val();
if (value && value.length === 14) {
// 주민번호 형식 검사 (간단한 검증)
var pattern = /^\d{6}-\d{7}$/;
if (!pattern.test(value)) {
Swal.fire({
title: '입력 오류',
text: '주민번호 형식이 올바르지 않습니다. (000000-0000000)',
icon: 'warning',
confirmButtonText: '확인'
});
$(this).focus();
}
}
});
});
</script>
</body>
</html>