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

123 lines
4.4 KiB
PHP

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
require_once(__DIR__ . '/../lib/mydb.php');
// 권한 체크 (레벨 5 이하만 접근)
if ($level > 5) {
echo "<script>alert('접근 권한이 없습니다.'); history.back();</script>";
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo "<script>alert('잘못된 접근입니다.'); location.href='list.php';</script>";
exit;
}
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
$biz_no = isset($_POST['biz_no']) ? trim($_POST['biz_no']) : '';
$company_name = isset($_POST['company_name']) ? trim($_POST['company_name']) : '';
$representative = isset($_POST['representative']) ? trim($_POST['representative']) : '';
$open_date = isset($_POST['open_date']) ? trim($_POST['open_date']) : null;
$address = isset($_POST['address']) ? trim($_POST['address']) : null;
$type = isset($_POST['type']) ? trim($_POST['type']) : null;
$item = isset($_POST['item']) ? trim($_POST['item']) : null;
$issue_date = isset($_POST['issue_date']) ? trim($_POST['issue_date']) : null;
// 필수 필드 검증
if ($id <= 0) {
echo "<script>alert('잘못된 ID입니다.'); history.back();</script>";
exit;
}
if (empty($biz_no) || empty($company_name) || empty($representative)) {
echo "<script>alert('필수 항목을 모두 입력해주세요.'); history.back();</script>";
exit;
}
// 사업자번호 정규화 (하이픈 제거)
$biz_no_clean = preg_replace('/[^0-9]/', '', $biz_no);
if (strlen($biz_no_clean) !== 10) {
echo "<script>alert('사업자번호는 10자리여야 합니다.'); history.back();</script>";
exit;
}
// 사업자번호 체크섬 검증
function validateBusinessNumber($num) {
if (strlen($num) !== 10) return false;
$checksum = [1, 3, 7, 1, 3, 7, 1, 3, 5];
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += intval($num[$i]) * $checksum[$i];
}
$sum += floor((intval($num[8]) * 5) / 10);
$lastDigit = (10 - ($sum % 10)) % 10;
return $lastDigit === intval($num[9]);
}
if (!validateBusinessNumber($biz_no_clean)) {
echo "<script>alert('올바른 사업자등록번호가 아닙니다.'); history.back();</script>";
exit;
}
// 하이픈 추가된 형식으로 저장
$biz_no_formatted = substr($biz_no_clean, 0, 3) . '-' . substr($biz_no_clean, 3, 2) . '-' . substr($biz_no_clean, 5);
// 날짜 형식 정규화
$open_date = !empty($open_date) ? $open_date : null;
$issue_date = !empty($issue_date) ? $issue_date : null;
// 빈 문자열을 NULL로 변환
$address = !empty($address) ? $address : null;
$type = !empty($type) ? $type : null;
$item = !empty($item) ? $item : null;
try {
$pdo = db_connect();
// 데이터 존재 확인
$check_sql = "SELECT id FROM biz_cert WHERE id = :id";
$check_stmt = $pdo->prepare($check_sql);
$check_stmt->bindValue(':id', $id, PDO::PARAM_INT);
$check_stmt->execute();
if (!$check_stmt->fetch()) {
echo "<script>alert('해당 데이터를 찾을 수 없습니다.'); location.href='list.php';</script>";
exit;
}
// 업데이트
$sql = "UPDATE biz_cert SET
biz_no = :biz_no,
company_name = :company_name,
representative = :representative,
open_date = :open_date,
address = :address,
type = :type,
item = :item,
issue_date = :issue_date
WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':biz_no', $biz_no_formatted, PDO::PARAM_STR);
$stmt->bindValue(':company_name', $company_name, PDO::PARAM_STR);
$stmt->bindValue(':representative', $representative, PDO::PARAM_STR);
$stmt->bindValue(':open_date', $open_date, $open_date ? PDO::PARAM_STR : PDO::PARAM_NULL);
$stmt->bindValue(':address', $address, $address ? PDO::PARAM_STR : PDO::PARAM_NULL);
$stmt->bindValue(':type', $type, $type ? PDO::PARAM_STR : PDO::PARAM_NULL);
$stmt->bindValue(':item', $item, $item ? PDO::PARAM_STR : PDO::PARAM_NULL);
$stmt->bindValue(':issue_date', $issue_date, $issue_date ? PDO::PARAM_STR : PDO::PARAM_NULL);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
echo "<script>alert('수정되었습니다.'); location.href='list.php';</script>";
} catch (Exception $e) {
echo "<script>alert('수정 중 오류가 발생했습니다: " . addslashes($e->getMessage()) . "'); history.back();</script>";
}