beginTransaction(); // === 파일 업로드 처리 (insert, copy, modify) === if (in_array($mode, ['insert','copy','modify'], true)) { if (!empty($_FILES['upfile']['tmp_name'][0])) { $uploadDir = $_SERVER['DOCUMENT_ROOT'] . '/guiderail/images/'; $orig = $_FILES['upfile']['name'][0]; $tmp = $_FILES['upfile']['tmp_name'][0]; $ext = pathinfo($orig, PATHINFO_EXTENSION); $base = pathinfo($orig, PATHINFO_FILENAME); $newName = date('Y_m_d_H_i_s') . "_{$base}.{$ext}"; if (!move_uploaded_file($tmp, $uploadDir . $newName)) { throw new Exception('파일 업로드 실패'); } $imgdata = $newName; } elseif (in_array($mode, ['modify','copy'], true)) { // 기존 이미지 유지 $stmt = $pdo->prepare("SELECT imgdata FROM {$DB}.{$tablename} WHERE num = ? LIMIT 1"); $stmt->execute([$num]); $imgdata = $stmt->fetchColumn() ?: ''; } else { $imgdata = ''; } } // === 모드별 DB 처리 === if ($mode === 'modify') { $update_log = date('Y-m-d H:i:s') . " - {$_SESSION['name']} " . ($update_log ?? '') . "\n"; $sql = "UPDATE {$DB}.{$tablename} SET registration_date=?, author=?, remark=?, rail_length=?, rail_width=?, firstitem=?, model_UA=?, check_type=?, model_name=?, finishing_type=?, search_keyword=?, imgdata=?, update_log=? WHERE num=? LIMIT 1"; $st = $pdo->prepare($sql); $st->execute([ $registration_date, $author, $remark, $rail_length, $rail_width, $firstitem, $model_UA, $check_type, $model_name, $finishing_type, $search_keyword, $imgdata, $update_log, $num ]); } elseif (in_array($mode, ['insert','copy'], true)) { $update_log = date('Y-m-d H:i:s') . " - {$_SESSION['name']} " . ($update_log ?? '') . "\n"; $sql = "INSERT INTO {$DB}.{$tablename} ( registration_date, author, remark, rail_length, rail_width, firstitem, model_UA, check_type, model_name, finishing_type, search_keyword, imgdata, update_log ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $st = $pdo->prepare($sql); $st->execute([ $registration_date, $author, $remark, $rail_length, $rail_width, $firstitem, $model_UA, $check_type, $model_name, $finishing_type, $search_keyword, $imgdata, $update_log ]); $num = $pdo->lastInsertId(); } elseif ($mode === 'delete') { $st = $pdo->prepare("UPDATE {$DB}.{$tablename} SET is_deleted=1 WHERE num=? LIMIT 1"); $st->execute([$num]); $pdo->commit(); // 삭제는 rowHtml 없이 즉시 리턴 echo json_encode([ 'success' => true, 'mode' => 'delete', 'num' => $num ], JSON_UNESCAPED_UNICODE); exit; } else { throw new Exception("Unknown mode: {$mode}"); } // === 트랜잭션 커밋 === $pdo->commit(); // === 응답조립 === $response = [ 'success' => true, 'mode' => $mode, 'num' => $num ]; // delete가 아닐 때만 rowHtml 생성 $stmt = $pdo->prepare("SELECT * FROM {$DB}.{$tablename} WHERE num = ? LIMIT 1"); $stmt->execute([$num]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (is_array($row)) { extract($row, EXTR_OVERWRITE); ob_start(); include __DIR__ . '/_rowinput.php'; $response['rowHtml'] = ob_get_clean(); } else { $response['rowHtml'] = ''; } echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; } catch (Exception $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } echo json_encode([ 'success' => false, 'message' => $e->getMessage() ], JSON_UNESCAPED_UNICODE); exit; }