Files
sam-kd/juilcarlog/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

425 lines
16 KiB
PHP

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
if (!isset($_SESSION["level"]) || $_SESSION["level"] > 5) {
sleep(1);
header("Location:" . $WebSite . "login/login_form.php");
exit;
}
include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php';
$title_message = '업무용승용차 운행기록부 작성';
?>
<title> <?=$title_message?> </title>
</head>
<body>
<?php
$mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : '';
$num = isset($_REQUEST["num"]) ? $_REQUEST["num"] : '';
$tablename = 'juilcarlog';
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
if($num > 0) {
try {
$sql = "SELECT * FROM ". $DB . "." . $tablename . " WHERE num = ?";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1, $num, PDO::PARAM_INT);
$stmh->execute();
$row = $stmh->fetch(PDO::FETCH_ASSOC);
include '_row.php';
} catch (PDOException $Exception) {
print "오류: ".$Exception->getMessage();
}
$mode = 'modify';
} else {
include '_request.php';
$mode = 'insert';
}
?>
<form id="board_form" name="board_form" method="post">
<input type="hidden" id="num" name="num" value="<?= isset($row['num']) ? $row['num'] : '' ?>">
<input type="hidden" id="mode" name="mode" value="<?= isset($mode) ? $mode : '' ?>">
<input type="hidden" id="tablename" name="tablename" value="<?= $tablename ?>">
<div class="container-fluid">
<div class="card text-center mt-5">
<div class="card-header">
<span class="text-center fs-5"> <?=$title_message?> </span>
</div>
<div class="card-body">
<table class="table table-bordered">
<tbody>
<tr>
<td>사용일자</td>
<td><input type="date" id="use_date" name="use_date" class="form-control" value="<?= isset($row['use_date']) ? $row['use_date'] : '' ?>"></td>
<td>차량번호</td>
<td><input type="text" id="car_number" name="car_number" class="form-control" value="<?= isset($row['car_number']) ? $row['car_number'] : '' ?>"></td>
</tr>
<tr>
<td>부서</td>
<td><input type="text" id="department" name="department" class="form-control" value="<?= isset($row['department']) ? $row['department'] : '' ?>"></td>
<td>직책</td>
<td><input type="text" id="position" name="position" class="form-control" value="<?= isset($row['position']) ? $row['position'] : '' ?>"></td>
</tr>
<tr>
<td>사용자</td>
<td><input type="text" id="caruser_name" name="caruser_name" class="form-control" value="<?= isset($row['caruser_name']) ? $row['caruser_name'] : '' ?>"></td>
<td>사용목적</td>
<td><input type="text" id="usage_purpose" name="usage_purpose" class="form-control" value="<?= isset($row['usage_purpose']) ? $row['usage_purpose'] : '' ?>"></td>
</tr>
<tr>
<td>운행내역</td>
<td colspan="3"><input type="text" id="operation_details" name="operation_details" class="form-control" value="<?= isset($row['operation_details']) ? $row['operation_details'] : '' ?>"></td>
</tr>
<tr>
<td>출발지</td>
<td><input type="text" id="departure" name="departure" class="form-control" value="<?= isset($row['departure']) ? $row['departure'] : '' ?>"></td>
<td>도착지</td>
<td><input type="text" id="destination" name="destination" class="form-control" value="<?= isset($row['destination']) ? $row['destination'] : '' ?>"></td>
</tr>
<tr>
<td>주행거리 (km)</td>
<td><input type="number" id="driving_distance" name="driving_distance" class="form-control" value="<?= isset($row['driving_distance']) ? $row['driving_distance'] : '' ?>"></td>
<td>도착누적거리 (km)</td>
<td><input type="number" id="arrival_cumulative_distance" name="arrival_cumulative_distance" class="form-control" value="<?= isset($row['arrival_cumulative_distance']) ? $row['arrival_cumulative_distance'] : '' ?>"></td>
</tr>
<tr>
<td>비고</td>
<td colspan="3"><textarea id="note" name="note" class="form-control"><?= isset($row['note']) ? $row['note'] : '' ?></textarea></td>
</tr>
</tbody>
</table>
<div class="text-center">
<button type="submit" class="btn btn-primary">저장</button>
<button type="button" class="btn btn-danger" onclick="history.back();">취소</button>
</div>
</div>
</div>
</div>
</form>
<!-- 페이지 로딩 -->
<script>
$(document).ready(function(){
var loader = document.getElementById('loadingOverlay');
if(loader)
loader.style.display = 'none';
});
ajaxRequest_write = null;
$(document).ready(function(){
$("#closeBtn").on("click", function() {
self.close();
});
$(document).ready(function(){
$("#saveBtn").on("click", function() {
let msg = '저장완료';
var form = $('#board_form')[0];
var data = new FormData(form);
// 저장 시 데이터를 JSON으로 처리하는 부분
let engineOilList = [];
$('#engineOilListTable tbody tr').each(function() {
let rowData = {};
$(this).find('input, select').each(function() {
let name = $(this).attr('name').replace('[]', '');
rowData[name] = $(this).val();
});
engineOilList.push(rowData);
});
// 데이터를 JSON으로 설정
data.set('engine_oil_change_data', JSON.stringify(engineOilList));
// 정비내역 데이터를 JSON으로 처리하는 부분
let maintenanceList = [];
$('#maintenanceListTable tbody tr').each(function() {
let rowData = {};
$(this).find('input, textarea').each(function() {
let name = $(this).attr('name').replace('[]', '');
rowData[name] = $(this).val();
});
maintenanceList.push(rowData);
});
// 데이터를 JSON으로 설정
data.set('maintenance_data', JSON.stringify(maintenanceList));
if (ajaxRequest_write !== null) {
ajaxRequest_write.abort();
}
ajaxRequest_write = $.ajax({
url: "insert.php",
type: "post",
data: data, // FormData 객체 사용
processData: false, // jQuery가 data를 자동으로 처리하지 않도록 설정
contentType: false, // contentType을 false로 설정하여 multipart/form-data로 전송
success: function(data) {
console.log(data);
Toastify({
text: msg,
duration: 3000,
close: true,
gravity: "top",
position: "center",
backgroundColor: "#4fbe87",
}).showToast();
$(opener.location).attr("href", "javascript:reloadlist();");
setTimeout(function() {
self.close();
}, 1000);
},
error: function(jqxhr, status, error) {
console.log(jqxhr, status, error);
}
});
});
});
});
$(document).ready(function() {
// 삭제 버튼 클릭 이벤트
$("#deleteBtn").on("click", function() {
const delfirstitem = $("#num").val(); // 삭제할 항목의 num 값을 가져옴
delFn(delfirstitem);
});
});
function delFn(delfirstitem) {
$("#mode").val("delete");
$("#num").val(delfirstitem);
Swal.fire({
title: '해당 DATA 삭제',
text: "DATA 삭제는 신중하셔야 합니다. 정말 삭제 하시겠습니까?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '삭제',
cancelButtonText: '취소'
}).then((result) => {
if (result.isConfirmed) {
if (ajaxRequest_write !== null) {
ajaxRequest_write.abort();
}
ajaxRequest_write = $.ajax({
url: "insert.php",
type: "post",
data: $("#board_form").serialize(),
success: function(data) {
console.log(data);
Toastify({
text: "파일 삭제 완료!",
duration: 3000,
close: true,
gravity: "top",
position: "center",
backgroundColor: "#4fbe87"
}).showToast();
// 페이지를 1.5초 후에 새로고침
setTimeout(function() {
$(opener.location).attr("href", "javascript:reloadlist();");
self.close();
}, 1000);
},
error: function(jqxhr, status, error) {
console.log(jqxhr, status, error);
}
});
}
});
}
function inputNumberFormat(obj) {
// 숫자, 소수점 및 - 이외의 문자는 제거
obj.value = obj.value.replace(/[^0-9.-]/g, '');
// 콤마를 제거하고 숫자를 포맷팅
let value = obj.value.replace(/,/g, '');
// 부호가 앞에 오도록 하고 소수점을 포함한 포맷팅 처리
if (value.startsWith('-')) {
// 음수일 때의 처리
value = '-' + formatNumber(value.slice(1));
} else {
// 양수일 때의 처리
value = formatNumber(value);
}
obj.value = value;
}
// 3자리마다 콤마를 추가하는 함수
function formatNumber(value) {
if (!value) return ''; // 값이 없으면 빈 문자열 반환
let parts = value.split('.');
// 정수 부분에만 콤마 추가
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
// 소수점이 있으면 정수 부분 + 소수점 부분을 반환
return parts.length > 1 ? parts.join('.') : parts[0];
}
function deleteLastchar(str)
// 마지막 문자 제거하는 함수
{
return str = str.substr(0, str.length - 1);
}
$(document).ready(function() {
// 서버에서 전달된 engine_oil_change_data를 PHP에서 JSON으로 변환
var engineOilList = <?php echo json_encode($engine_oil_change_data ?? []); ?>;
// 엔진오일 교환일 데이터가 문자열 형태로 넘어올 경우 JSON으로 파싱
if (typeof engineOilList === 'string') {
try {
engineOilList = JSON.parse(engineOilList);
} catch (e) {
console.error('JSON 파싱 오류:', e);
engineOilList = [];
}
}
// 배열인지 확인하고 배열이 아니면 빈 배열로 초기화
if (!Array.isArray(engineOilList)) {
engineOilList = [];
}
// 기존 데이터를 테이블에 추가
engineOilList.forEach(function(rowData, index) {
addRow_engineOil($('#engineOilListBody'), rowData);
});
});
// 초기 행 추가 버튼 클릭 시
$(document).on('click', '.add-row-engineOil', function() {
addRow_engineOil($('#engineOilListBody'));
});
$('#engineOilListBody').on('click', '.remove-row-engineOil', function() {
$(this).closest('tr').remove();
updateSerialNumbers($('#engineOilListBody'));
});
// 행 추가 함수
function addRow_engineOil(tableBody, rowData = {}) {
var newRow = $('<tr>');
// 일련번호
newRow.append('<td class="text-center serial-number"></td>');
// 엔진오일 교환일 (Date 필드)
var engineOilChangeDate = rowData.engine_oil_change_date || new Date().toISOString().split('T')[0]; // 현재 날짜 기본값으로 설정
newRow.append('<td class="text-center"><input type="date" name="engine_oil_change_date[]" class="form-control text-center" value="' + engineOilChangeDate + '"></td>');
// 주행거리 (Mileage 필드)
var mileage = rowData.mileage || ''; // 기존 데이터 설정
newRow.append('<td class="text-center"><input type="number" name="mileage[]" class="form-control text-center" value="' + mileage + '"></td>');
var engineOilFee = rowData.engine_oil_fee || '' ;
newRow.append('<td class="text-center"><input type="text" name="engine_oil_fee[]" class="form-control" value="' + engineOilFee + '"> </td>');
// 추가/삭제 버튼
newRow.append('<td class="text-center">' +
'<button type="button" class="btn btn-outline-dark btn-sm add-row-engineOil" style="border:0px;">+</button>' +
'<button type="button" class="btn btn-outline-danger btn-sm remove-row-engineOil" style="border:0px;">-</button>' +
'</td>');
// 행을 테이블에 추가
tableBody.append(newRow);
// 일련번호 갱신
updateSerialNumbers(tableBody);
}
// 정비내역 행 추가 함수
function addRow_maintenance(tableBody, rowData = {}) {
var newRow = $('<tr>');
// 일련번호
newRow.append('<td class="text-center serial-number"></td>');
// 정비일자 (Date 필드)
var maintenanceDate = rowData.maintenance_date || new Date().toISOString().split('T')[0]; // 현재 날짜 기본값으로 설정
newRow.append('<td class="text-center"><input type="date" name="maintenance_date[]" class="form-control text-center" value="' + maintenanceDate + '"></td>');
// 정비내역 기록 (Text 필드)
var maintenanceRecord = rowData.maintenance_record || ''; // 기존 데이터 설정
var maintenanceFee = rowData.maintenance_fee || ''; // 기존 데이터 설정
newRow.append('<td class="text-center"><input type="text" name="maintenance_record[]" class="form-control" value="' + maintenanceRecord + '"> </td>');
newRow.append('<td class="text-center"><input type="text" name="maintenance_fee[]" class="form-control" value="' + maintenanceFee + '"> </td>');
// 추가/삭제 버튼
newRow.append('<td class="text-center">' +
'<button type="button" class="btn btn-outline-dark btn-sm add-row-maintenance" style="border:0px;">+</button>' +
'<button type="button" class="btn btn-outline-danger btn-sm remove-row-maintenance" style="border:0px;">-</button>' +
'</td>');
// 행을 테이블에 추가
tableBody.append(newRow);
// 일련번호 갱신
updateSerialNumbers(tableBody);
}
// 일련번호 갱신 함수
function updateSerialNumbers(tableBody) {
tableBody.find('tr').each(function(index) {
$(this).find('.serial-number').text(index + 1);
});
}
$(document).ready(function() {
// 서버에서 전달된 maintenance_data를 PHP에서 JSON으로 변환
var maintenanceList = <?php echo json_encode($maintenance_data ?? []); ?>;
// 정비내역 데이터가 문자열 형태로 넘어올 경우 JSON으로 파싱
if (typeof maintenanceList === 'string') {
try {
maintenanceList = JSON.parse(maintenanceList);
} catch (e) {
console.error('JSON 파싱 오류:', e);
maintenanceList = [];
}
}
// 배열인지 확인하고 배열이 아니면 빈 배열로 초기화
if (!Array.isArray(maintenanceList)) {
maintenanceList = [];
}
// 기존 데이터를 테이블에 추가
maintenanceList.forEach(function(rowData) {
addRow_maintenance($('#maintenanceListBody'), rowData);
});
});
// 초기 행 추가 버튼 클릭 시
$(document).on('click', '.add-row-maintenance', function() {
addRow_maintenance($('#maintenanceListBody'));
});
$('#maintenanceListBody').on('click', '.remove-row-maintenance', function() {
$(this).closest('tr').remove();
updateSerialNumbers($('#maintenanceListBody'));
});
</script>
</body>
</html>