# estimate_compare_head.php 개발자 가이드 ## 📋 개요 `estimate_compare_head.php`는 방화셔터 견적 시스템의 견적 비교 페이지 헤더를 담당하는 핵심 PHP 컴포넌트입니다. 이 파일은 견적 비교 화면의 상단 부분을 구성하며, 견적 정보 조회, 헤더 출력, 금액 비교 테이블 등을 포함합니다. ## 🏗️ 파일 구조 ### 📁 파일 위치 ``` /estimate/common/estimate_compare_head.php ``` ### 📊 파일 정보 - **파일 크기**: 8.1KB (207 lines) - **주요 언어**: PHP + HTML + CSS - **의존성**: Bootstrap, jQuery, MySQL/PDO - **주요 기능**: 견적 정보 조회, 헤더 출력, 금액 비교 ## 🔧 핵심 기능 ### 1. **헤더 및 의존성 로드** ```php <?=$title_message?> ``` ### 2. **견적 정보 조회** ```php $num = isset($_REQUEST['num']) ? $_REQUEST['num'] : ''; $option = isset($_REQUEST['option']) ? $_REQUEST['option'] : ''; // 견적서와 산출서의 다른점을 표현하는 것 require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/estimate/fetch_unitprice.php"); $pdo = db_connect(); try { $sql = "select * from {$DB}.{$tablename} where num = ? "; $stmh = $pdo->prepare($sql); $stmh->bindValue(1, $num, PDO::PARAM_STR); $stmh->execute(); $count = $stmh->rowCount(); if ($count < 1) { print "검색결과가 없습니다.
"; } else { $row = $stmh->fetch(PDO::FETCH_ASSOC); include "_row.php"; } } catch (PDOException $Exception) { print "오류: " . $Exception->getMessage(); } ``` ### 3. **견적 데이터 디코딩** ```php // JSON 문자열을 PHP 배열로 디코딩합니다. if($major_category == '스크린') $decodedEstimateList = json_decode($estimateList, true); else $decodedEstimateList = json_decode($estimateSlatList, true); // 디코딩된 데이터가 배열인지 확인합니다. if (!is_array($decodedEstimateList)) { echo "데이터가 정상적이지 않습니다. 확인바랍니다."; exit; } echo ''; ``` ## 📋 폼 구조 ### 🎯 **숨겨진 입력 필드** ```html
``` ## 🎨 UI 구성 요소 ### 📊 **헤더 네비게이션** ```html
인정제품 견적비교 >
 
``` ### ⚠️ **알림 메시지** ```html
``` ### 💰 **금액 비교 테이블** ```html
최초 자동금액 수정 금액 차액
``` ## 📄 견적서 헤더 ### 🏢 **견적서 기본 정보** ```html
'; else echo ' ' . $title_message_sub . ' '; ?>
작성일자 ' . $title_message . ' 견적번호
``` ### 👥 **업체 정보 테이블** ```html
업체명 (귀하) 공 급 자 상호 ㈜ 경동기업
제품명 등록번호 139-87-00333 대표자
이 경 호  
현장명 사업장주소 경기도 김포시 통진읍 옹정로 45-22
담당자 업 태 제조업 종목 방화셔터, 금속창호
연락처 TEL. 031-983-5130 FAX 02-6911-6315
``` ### 💵 **합계 금액 표시** ```html
합계금액(부가세 별도)
아래와 같이 견적합니다
( ₩ )
``` ## 📊 데이터 변수 ### 🎯 **주요 PHP 변수** - `$num`: 견적 번호 - `$option`: 견적서/산출서 구분 옵션 - `$major_category`: 주요 카테고리 (스크린/철재) - `$title_message`: 제목 메시지 - `$title_message_sub`: 서브 제목 메시지 - `$indate`: 입력 날짜 - `$pjnum`: 프로젝트 번호 - `$secondord`: 발주처명 - `$subTitle`: 제품명 - `$outworkplace`: 현장명 - `$secondordman`: 담당자명 - `$secondordmantel`: 연락처 ### 💰 **금액 관련 변수** - `$EstimateFirstSum`: 최초 자동금액 - `$EstimateUpdatetSum`: 수정 금액 - `$EstimateDiffer`: 차액 - `$estimateList`: 스크린 견적 리스트 (JSON) - `$estimateSlatList`: 철재 견적 리스트 (JSON) - `$detailJson`: 상세 견적 데이터 (JSON) ## 🔧 개발자 사용법 ### 📝 **기본 사용법** ```php // 파일 포함 include_once('/estimate/common/estimate_compare_head.php'); // 견적 번호 설정 $_REQUEST['num'] = '견적번호'; // 옵션 설정 (견적서/산출서) $_REQUEST['option'] = 'option'; // 산출서 모드 ``` ### 🎯 **데이터 조회** ```php // 견적 정보 조회 $sql = "SELECT * FROM {$DB}.{$tablename} WHERE num = ?"; $stmt = $pdo->prepare($sql); $stmt->bindValue(1, $num, PDO::PARAM_STR); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC); ``` ### 📊 **JSON 데이터 처리** ```php // 스크린/철재 구분하여 데이터 디코딩 if($major_category == '스크린') { $decodedEstimateList = json_decode($estimateList, true); } else { $decodedEstimateList = json_decode($estimateSlatList, true); } // JavaScript 변수로 전달 echo ''; ``` ## 🚨 주의사항 ### ⚠️ **필수 의존성** - PHP 7.4+ - MySQL/PDO - Bootstrap 5.x - jQuery 3.x ### 🔒 **보안 고려사항** - SQL 인젝션 방지를 위한 prepared statements 사용 - 입력값 검증 및 이스케이프 처리 - 세션 기반 인증 확인 ### 📱 **성능 최적화** - 데이터베이스 쿼리 최적화 - JSON 데이터 크기 제한 - 불필요한 데이터베이스 호출 최소화 ## 🐛 디버깅 가이드 ### 🔍 **일반적인 문제 해결** #### 1. 견적 정보가 표시되지 않는 경우 ```php // 데이터베이스 연결 확인 if (!$pdo) { echo "데이터베이스 연결 실패"; exit; } // 쿼리 결과 확인 $stmt = $pdo->prepare($sql); $stmt->bindValue(1, $num, PDO::PARAM_STR); $stmt->execute(); $count = $stmt->rowCount(); echo "조회된 행 수: " . $count; if ($count > 0) { $row = $stmt->fetch(PDO::FETCH_ASSOC); var_dump($row); // 결과 확인 } ``` #### 2. JSON 데이터 오류 ```php // JSON 디코딩 오류 확인 $decodedEstimateList = json_decode($estimateList, true); if (json_last_error() !== JSON_ERROR_NONE) { echo "JSON 디코딩 오류: " . json_last_error_msg(); echo "원본 데이터: " . $estimateList; } ``` #### 3. 변수가 정의되지 않은 경우 ```php // 변수 존재 여부 확인 if (!isset($title_message)) { echo "title_message 변수가 정의되지 않았습니다."; } // 기본값 설정 $title_message = $title_message ?? '기본 제목'; $major_category = $major_category ?? '스크린'; ``` ## 📚 관련 파일 ### 🔗 **의존성 파일** - `load_header.php`: 헤더 로드 - `mydb.php`: 데이터베이스 연결 - `fetch_unitprice.php`: 단가 조회 함수 - `_row.php`: 행 데이터 처리 ### 🔗 **연관 파일** - `compare_lastJS.php`: 견적 비교 JavaScript - `compare_price_edit_table.php`: 단가 수정 테이블 - `common_screen.php`: 스크린 테이블 생성 - `common_slat.php`: 철재 테이블 생성 ### 🔗 **CSS 클래스** - `yellowBold`: 노란색 굵은 글씨 - `lightgray`: 연한 회색 배경 - `table-secondary`: 테이블 헤더 배경 ### 🔗 **JavaScript 변수** - `dataList`: 견적 데이터 배열 - `EstimateFirstSum`: 최초 금액 - `EstimateUpdatetSum`: 수정 금액 - `EstimateDiffer`: 차액 ## 🎯 향후 개선 방향 ### 🔄 **코드 리팩토링** - 클래스 기반 구조로 변경 - 설정 파일 분리 - 의존성 주입 패턴 도입 ### 🎨 **UI/UX 개선** - 반응형 디자인 개선 - 다크 모드 지원 - 접근성 향상 ### ⚡ **성능 최적화** - 데이터베이스 쿼리 최적화 - 캐싱 시스템 도입 - 이미지 최적화 ### 🔧 **기능 확장** - 다국어 지원 - 템플릿 시스템 도입 - 실시간 업데이트 ## 📊 견적서 구조 ### 🎯 **견적서 구성 요소** 1. **헤더 정보**: 작성일자, 견적번호, 제목 2. **업체 정보**: 발주처 및 공급자 정보 3. **금액 비교**: 최초/수정/차액 표시 4. **합계 금액**: 한국어/숫자 금액 표시 ### 📈 **데이터 흐름** 1. **견적 번호 입력** → 데이터베이스 조회 2. **견적 정보 로드** → 변수에 할당 3. **JSON 데이터 디코딩** → JavaScript 변수로 전달 4. **헤더 출력** → HTML 렌더링 ### 🔄 **업데이트 프로세스** 1. **최초 견적 생성** → 자동 계산 2. **수정 견적 입력** → 사용자 입력 3. **차액 계산** → 자동 계산 4. **저장 및 확정** → 데이터베이스 저장 --- **📅 문서 버전**: 1.0 **👨‍💻 작성자**: 개발팀 **📝 최종 수정일**: 2024-12-24 **🔗 관련 문서**: [견적 시스템 전체 가이드](./README.md), [common_addrowJS 개발자 가이드](./common_addrowJS_developer_guide.md), [common_screen 개발자 가이드](./common_screen_developer_guide.md), [common_slat 개발자 가이드](./common_slat_developer_guide.md), [compare_lastJS 개발자 가이드](./compare_lastJS_developer_guide.md), [compare_price_edit_table 개발자 가이드](./compare_price_edit_table_developer_guide.md)