alert(\"$msg\"); history.back(); "; } function Page_Msg($msg) { echo ""; } function Page_Url($url) { echo ""; } function Page_Msg_Url($msg, $url) { echo ""; } function replace_in_se($string){ if ($string){ $string = str_replace("sp_","",$string); $string = str_replace("xp_","",$string); $string = str_replace("","",$string); $string = str_replace("'","\'",$string); } return $string; } function replace_out_se($string){ if ($string){ $string = str_replace("\'","'",$string); $string = str_replace("\\\'","'",$string); $string=stripslashes($string); } return $string; } function replace_out($string){ if ($string){ $string = str_replace("\'","'",$string); $string = str_replace("\\\'","'",$string); $string=nl2br($string); $string=stripslashes($string); } return $string; } // 세션변수값 지정 function set_session($session_name, $value) { $_SESSION["$session_name"] = $value; } // 세션변수값 얻음 function get_session($session_name) { return $_SESSION[$session_name]; } //페이지 이동시 기본 변수 function getAdmParams($FPOST){ $ad_params = ""; return $ad_params; } //년도로 나이계산 function getAge($birth_year_month_day){ $birth_year = substr($birth_year_month_day, 0, 4); $current_year = date('Y'); $age = $current_year - $birth_year; return $age; } //숫자로 요일 계산 function getDayTxt($day_txt) { $dayOfWeek = ["일", "월", "화", "수", "목", "금", "토"]; $parts = explode("_", $day_txt); $days = []; foreach ($parts as $part) { $dayIndex = intval($part); if ($dayIndex >= 0 && $dayIndex <= 6) { // 인덱스 0부터 6까지가 일요일부터 토요일 $days[] = $dayOfWeek[$dayIndex]; } } if (count($days) > 0) { $daysList = implode(', ', $days); return $daysList; } } ////////////////////////////////////////////// // 공통코드 불러오는 함수 // getCodeCom('apply_cms_amt') // 2017-12-02 By gayoung ////////////////////////////////////////////// function getCodeCom($objCode){ $com_code['coupon_state'] = array('1' => '사용', '2' => '미사용'); $com_code['use_yn'] = array('Y' => 'Y', 'N' => 'N'); $com_code['useYN'] = array('Y' => '사용', 'N' => '미사용'); $com_code['out_YN'] = array('Y' => '출고', 'N' => '미출고'); return $com_code[$objCode]; } ////////////////////////////////////////////// // 라디오버튼 공통 함수 // radioBoxCommon('10', 'ra_age', 'apply_age') // 2017-12-22 By gayoung ////////////////////////////////////////////// function radioBoxCommon($selectVal, $objName, $arrCode){ $noArry = getCodeCom($arrCode); $html_txt = ""; $i = 0; foreach($noArry as $code=>$name){ $chkval = ""; if($selectVal != '' && $selectVal == $code ) $chkval = "checked"; $html_txt .= " "; $i++; } return $html_txt; } //타임스템프(밀리세컨드까지) function FN_get_timestamp(){ list($microtime, $tStamp) = explode(' ',microtime()); $timestamp = $tStamp . substr($microtime, 2, 3); return $timestamp; } //전화번호 하이픈 넣기 function format_phone($phone){ $phone = preg_replace("/[^0-9]/", "", $phone); $length = strlen($phone); switch($length){ case 11 : return preg_replace("/([0-9]{3})([0-9]{4})([0-9]{4})/", "$1-$2-$3", $phone); break; case 10: return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone); break; default : return $phone; break; } } //사업자번호 하이픈 넣기 (10자리: XXX-XX-XXXXX) function format_business_number($number){ if(empty($number)) return ''; $number = preg_replace("/[^0-9]/", "", $number); $length = strlen($number); if($length == 10){ return preg_replace("/([0-9]{3})([0-9]{2})([0-9]{5})/", "$1-$2-$3", $number); } return $number; } //랜덤숫자문자 얻기 function RndomNum($cnt) { $ran= ""; for( $i=0; $i<$cnt; $i++) //7자리만 출력 { if( strlen($ran)<$cnt ) $ran .= rand( 0, 9 ); //숫자 } return $ran; } /* * 랜덤 문자열 생성(인수 : 길이, 타입) * 지정된 타입의 문자열로 지정된 길이의 랜덤 문자열을 반환한다. * 타입 0 : 영문 대소문자(A-Z,a-z), 숫자(0-9) * 타입 1 : 영문 대문자(A-Z), 숫자(0-9) * 타입 2 : 영문 소문자(a-z), 숫자(0-9) * 타입 3 : 영문 대문자(A-Z) * 타입 4 : 영문 소문자(a-z) * 타입 5 : 숫자(0-9) * 디폴트 : false 반환. */ function rand_str($length, $type) { switch($type){ case 0: $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'; break; case 1: $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; break; case 2: $chars = 'abcdefghijklmnopqrstuvwxyz1234567890'; break; case 3: $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 4: $chars = 'abcdefghijklmnopqrstuvwxyz'; break; case 5: $chars = '1234567890'; break; default: return false; } $chars_length = (strlen($chars) - 1); $string = ''; for ($i = 0; $i < $length; $i = strlen($string)){ $string .= $chars[rand(0, $chars_length)]; } return $string; } /** * ECB 모드로 데이터를 암호화합니다. * * @param string $data 암호화할 평문 데이터 * @param string $key 암호화에 사용할 비밀 키 (안전하게 생성된 키여야 함) * @param string $method 암호화 알고리즘 (기본값: aes-256-ecb) * @return string|false 암호화된 데이터 또는 실패 시 false */ function encrypt_data_ecb(string $data, string $key, string $method = 'aes-256-ecb'): string { if (empty($data) || empty($key)) { return ''; } $ciphertext = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA); if ($ciphertext === false) { return ''; // 암호화 실패 } return base64_encode($ciphertext); // base64 인코딩 } /** * ECB 모드로 데이터를 복호화합니다. * * @param string $encrypted 암호화된 데이터 * @param string $key 복호화에 사용할 비밀 키 (암호화 시 사용한 키와 동일해야 함) * @param string $method 암호화 알고리즘 (기본값: aes-256-ecb, 암호화 시 사용한 알고리즘과 동일해야 함) * @return string|false 복호화된 데이터 또는 실패 시 false */ function decrypt_data_ecb($encrypted, string $key, string $method = 'aes-256-ecb'): string { if (empty($encrypted) || empty($key) || $encrypted === null) { return ''; } $encrypted_data = base64_decode($encrypted); $decrypted = openssl_decrypt($encrypted_data, $method, $key, OPENSSL_RAW_DATA); if ($decrypted === false) { return ''; // 복호화 실패 } return $decrypted; } function write_log($message) { $logDir =$_SERVER['DOCUMENT_ROOT'].'/log'; if (!is_dir($logDir)) { mkdir($logDir, 0777, true); chmod($logDir, 0777); } $today = date("Ymd"); $logFile = $logDir . "/log_{$today}.log"; $_ip = $_SERVER['REMOTE_ADDR']; $dateTime = new DateTime(); $timestamp = $dateTime->format('Y-m-d H:i:s.u'); $logContent = "[$timestamp] IP:$_ip | MESSAGE: $message\n"; // 로그 파일에 기록 file_put_contents($logFile, $logContent, FILE_APPEND); // 파일 퍼미션도 설정 (생성 직후) if (!file_exists($logFile)) { touch($logFile); } chmod($logFile, 0666); // rw-rw-rw- } /** * 이미지 파일 존재 여부를 체크하고 기본 이미지를 반환하는 함수 * * @param string $image_path 이미지 파일 경로 (upload 폴더 기준) * @param string $default_image 기본 이미지 경로 (기본값: '/assets/common/img/default_profile.png') * @param string $upload_dir 업로드 디렉토리 경로 (기본값: '/upload/') * @return string 실제 이미지 경로 */ function get_image_path($image_path, $default_image = '/application/assets/common/img/user_no_img.jpg', $upload_dir = '/upload/') { // 이미지 경로가 비어있거나 null인 경우 기본 이미지 반환 if (empty($image_path) || $image_path === null) { return $default_image; } // 업로드 디렉토리 경로가 이미 포함되어 있는지 확인 $full_path = $_SERVER['DOCUMENT_ROOT'] . $upload_dir . $image_path; // 파일이 실제로 존재하는지 확인 if (file_exists($full_path) && is_file($full_path)) { return $upload_dir . $image_path; } // 파일이 존재하지 않으면 기본 이미지 반환 return $default_image; } ?>getMessage(); return; } } function QRY_CNT($tbl,$searchand){ $pdo = dbconn(); $sql = "SELECT COUNT(*) AS CNT FROM $tbl WHERE 1=1 $searchand"; $stmt = $pdo->prepare($sql); $stmt->execute(); $cnt_row = $stmt->fetch(PDO::FETCH_ASSOC); //레코드 수 카운팅 $cnt = $cnt_row['CNT']; return $cnt; } function QRY_MAX($tbl,$searchand,$item){ $pdo = dbconn(); $sql = "SELECT MAX($item) AS MAX FROM $tbl WHERE 1=1 $searchand"; $stmt = $pdo->prepare($sql); $stmt->execute(); $cnt_row = $stmt->fetch(PDO::FETCH_ASSOC); //레코드 수 카운팅 $cnt = $cnt_row['MAX']; return $cnt; } function QRY_VIEW($tbl,$searchand){ $pdo = dbconn(); $sql = "select * from $tbl where 1 = 1 $searchand"; $stmt = $pdo->prepare($sql); $stmt->execute(); $row = $stmt->fetch(); return $row; } function getDetailData($tbl,$searchand){ $pdo = dbconn(); $sql = "select * from $tbl where 1 = 1 $searchand"; $stmt = $pdo->prepare($sql); $stmt->execute(); $cnt = $stmt->rowCount(); $arrRow = $stmt->fetch(PDO::FETCH_OBJ); //Object type return array($cnt, $arrRow); } function QRY_VIEW_echo($tbl,$searchand){ $pdo = dbconn(); $sql = "select * from $tbl where 1 = 1 $searchand"; $stmt = $pdo->prepare($sql); $stmt->execute(); $row = $stmt->fetch(); return $row; } function getQueryItem($table, $where, $getId){ $pdo = dbconn(); $sql = "select * from $table where 1 = 1 $where limit 0, 1"; $stmt = $pdo->prepare($sql); $stmt->execute(); $row = $stmt->fetch(); $cnt = $stmt->rowCount(); $rowVal = ""; if($cnt > 0){ $rowVal = $row[$getId]; } return $rowVal; } /** * 특정 컬럼의 값을 배열로 반환하는 함수 * * @param string $table 테이블명 * @param string $where WHERE 조건 * @param string $getId 조회할 컬럼명 * @param string $separator 구분자 (기본값: ',') * @return string 콤마로 구분된 문자열 또는 빈 문자열 * * 사용 예시: * $class_seq = getQueryItemArray('m_classinfo', " and teacher_seq='123'", 'class_seq'); * // 결과: "1,2,3" (콤마로 구분된 문자열) */ function getQueryItemArray($table, $where, $getId, $separator = ','){ $pdo = dbconn(); $sql = "select $getId from $table where 1 = 1 $where"; $stmt = $pdo->prepare($sql); $stmt->execute(); $rsData = $stmt->fetchAll(PDO::FETCH_ASSOC); $result = ''; if($rsData && is_array($rsData)){ $values = array(); // 테이블 별칭이 포함된 경우 (예: "SD.student_seq") 실제 컬럼명만 추출 $column_key = $getId; if(strpos($getId, '.') !== false){ $column_key = substr($getId, strrpos($getId, '.') + 1); } foreach($rsData as $row){ // NULL이 아니고 빈 문자열이 아닌 값만 추가 if(isset($row[$column_key]) && $row[$column_key] !== null && $row[$column_key] !== ''){ $values[] = $row[$column_key]; } } $result = implode($separator, $values); } return $result; } function getQueryItemWant($table, $where, $getId){ $pdo = dbconn(); $sql = "select $getId as want from $table where 1 = 1 $where "; $stmt = $pdo->prepare($sql); $stmt->execute(); $row = $stmt->fetch(); $cnt = $stmt->rowCount(); $rowVal = ""; if($cnt > 0){ $rowVal = $row["want"]; } return $rowVal; } function comQueryResult($sql){ $pdo = dbconn(); $stmt = $pdo->prepare($sql); $stmt->execute(); $rsData = $stmt->fetchAll(); return $rsData; } function comQueryResultArray($sql,$array){ $pdo = dbconn(); try { $stmt = $pdo->prepare($sql); $stmt->execute($array); $rsData = $stmt->fetchAll(PDO::FETCH_ASSOC); return $rsData; } catch (Exception $e) { // 오류 로그 기록 error_log("comQueryResultArray Error: " . $e->getMessage() . " SQL: " . $sql); return array(); } } // COUNT 쿼리 전용 함수 - 단일 숫자 값 반환 function comQueryCount($sql, $array = array()){ $pdo = dbconn(); try { $stmt = $pdo->prepare($sql); if (!empty($array)) { $stmt->execute($array); } else { $stmt->execute(); } $result = $stmt->fetch(PDO::FETCH_ASSOC); // COUNT(*) 결과의 첫 번째 컬럼 값 반환 return (int)array_values($result)[0]; } catch (Exception $e) { // 오류 로그 기록 error_log("comQueryCount Error: " . $e->getMessage() . " SQL: " . $sql); return 0; } } function comArrayList($sql){ $pdo = dbconn(); try { $stmt = $pdo->prepare($sql); $stmt->execute(); $cnt = $stmt->rowCount(); $arrRow = $stmt->fetchall(PDO::FETCH_OBJ); //Object type return array($cnt, $arrRow); } catch (Exception $e) { //$this->SaveSqlLog('Error Data Select', $e->getMessage()); } } /** * 공통 배열 리스트 조회 함수 (페이징 지원) * * @param string $columns 조회할 컬럼명 (기본값: "*") * @param string $table_name 테이블명 * @param string $where_condition WHERE 조건 (기본값: "") * @param string $order_by ORDER BY 절 (기본값: "") * @param int $page 현재 페이지 번호 (기본값: 1) * @param int $list_cnt 한 페이지당 레코드 수 (기본값: _BOARD_CNT) * @return array [총 레코드 수, 데이터 배열, 페이징 객체] * * 사용 예시: * // 기존 방식 (페이징 없음) * $result = comArrayList("SELECT * FROM users WHERE status='Y'"); * $cnt = $result[0]; * $data = $result[1]; * * // 새로운 방식 (페이징 포함) * $result = comArrayList("*", "users", "status='Y'", "reg_dtm DESC", $page, 10); * $cnt = $result[0]; * $data = $result[1]; * $paging = $result[2]; * * // 페이징 정보 사용 * if ($paging) { * echo "현재 페이지: " . $paging->page; * echo "총 페이지: " . $paging->total_page; * echo "이전 페이지: " . $paging->prev_page; * echo "다음 페이지: " . $paging->next_page; * } */ function comArrayPagingList($columns = "*", $table_name = "", $where_condition = "", $order_by = "", $page = 1, $list_cnt = ""){ $pdo = dbconn(); try { // 전체 레코드 수 조회 (페이징 계산용) $total_cnt = 0; $paging = null; if ($page != "all" && $table_name) { // WHERE 조건 구성 $where_clause = $where_condition ? " WHERE 1=1 {$where_condition}" : ""; // 전체 레코드 수 조회 $count_sql = "SELECT COUNT(*) as cnt FROM {$table_name}{$where_clause}"; $count_stmt = $pdo->prepare($count_sql); $count_stmt->execute(); $count_result = $count_stmt->fetch(PDO::FETCH_ASSOC); $total_cnt = $count_result['cnt']; // 페이징 정보 계산 $paging = calculatePagingInfo($page, $total_cnt, $list_cnt); // 데이터 조회용 SQL 구성 $order_clause = $order_by ? " ORDER BY {$order_by}" : ""; $limit_clause = " LIMIT {$paging->limit_idx}, {$paging->page_set}"; $data_sql = "SELECT {$columns} FROM {$table_name}{$where_clause}{$order_clause}{$limit_clause}"; //echo $data_sql; } else { // 페이징 없이 전체 데이터 조회 $where_clause = $where_condition ? " WHERE 1=1 {$where_condition}" : ""; $order_clause = $order_by ? " ORDER BY {$order_by}" : ""; $data_sql = "SELECT {$columns} FROM {$table_name}{$where_clause}{$order_clause}"; } //echo $data_sql; // 실제 데이터 조회 $stmt = $pdo->prepare($data_sql); $stmt->execute(); $cnt = $stmt->rowCount(); $arrRow = $stmt->fetchall(PDO::FETCH_OBJ); //Object type // 페이징이 없는 경우 전체 레코드 수를 cnt로 사용 if ($total_cnt == 0) { $total_cnt = $cnt; } return array($total_cnt, $arrRow, $paging); } catch (Exception $e) { //$this->SaveSqlLog('Error Data Select', $e->getMessage()); } } /** * 페이징 정보를 계산하는 함수 * @param int $page 현재 페이지 번호 * @param int $cnt 전체 레코드 수 * @param int $list_cnt 한 페이지당 레코드 수 * @return object 페이징 정보 객체 */ function calculatePagingInfo($page, $cnt, $list_cnt = "") { // 기본값 설정 if ($page === 0 || $page === "0") $page = 1; if (!$list_cnt) $list_cnt = _BOARD_CNT; $block_set = _PAGE_SET; // 한 블록당 페이지 수 // 페이징 계산 $total_page = ceil($cnt / $list_cnt); // 총 페이지 수 $total_block = ceil($total_page / $block_set); // 총 블록 수 $current_block = ceil($page / $block_set); // 현재 블록 // 페이징 객체 생성 $paging = new stdClass(); $paging->page = $page; $paging->page_set = $list_cnt; $paging->block_set = $block_set; $paging->total_page = $total_page; $paging->total_block = $total_block; $paging->limit_idx = ($page - 1) * $list_cnt; // 페이지 범위 계산 $paging->first_page = (($current_block - 1) * $block_set) + 1; // 첫 번째 페이지 번호 $paging->last_page = min($total_page, $current_block * $block_set); // 마지막 페이지 번호 // 이전/다음 페이지 $paging->prev_page = $page - 1; // 이전 페이지 $paging->next_page = $page + 1; // 다음 페이지 // 이전/다음 블록 $paging->prev_block = $current_block - 1; // 이전 블록 $paging->next_block = $current_block + 1; // 다음 블록 // 블록 페이지 번호 $paging->prev_block_page = $paging->prev_block * $block_set; // 이전 블록 페이지 번호 $paging->next_block_page = $paging->next_block * $block_set - ($block_set - 1); // 다음 블록 페이지 번호 return $paging; } /** * 페이징이 포함된 리스트 조회 헬퍼 함수 (기존 호환성 유지) * @param string $table_name 테이블명 * @param string $where_condition WHERE 조건 * @param string $order_by ORDER BY 절 * @param int $page 현재 페이지 * @param int $list_cnt 한 페이지당 레코드 수 * @return array [총 레코드 수, 데이터 배열, 페이징 객체] */ function getPagedList($table_name, $where_condition = "", $order_by = "", $page = 1, $list_cnt = "") { // comArrayList 함수를 사용하여 일관성 유지 return comArrayList("*", $table_name, $where_condition, $order_by, $page, $list_cnt); } function QRY_TMP_IDX($tableName){ $max = QRY_MAX("tempIdx"," and tableName='".$tableName."'","tempIdx"); // 레코드가 없으면 0부터 시작, 있으면 기존 값 사용 if (empty($max) || $max === null) { $max = 0; } $max++; // PDO를 직접 사용하여 UPDATE 시도 $pdo = dbconn(); $updateSql = "UPDATE tempIdx SET tempIdx = ? WHERE tableName = ?"; $updateStmt = $pdo->prepare($updateSql); $updateStmt->execute([$max, $tableName]); // UPDATE가 실패하면 (레코드가 없으면) INSERT if ($updateStmt->rowCount() == 0) { $insertSql = "INSERT INTO tempIdx (tableName, tempIdx) VALUES (?, ?)"; $insertStmt = $pdo->prepare($insertSql); $insertStmt->execute([$tableName, $max]); } return $max; } function updateBoardHit($idx){ $max = QRY_MAX("board"," and idx='".$idx."'","hit"); $max++; $sql = "UPDATE board SET hit = $max WHERE idx = '$idx'"; comQueryResult($sql); return $max; } /********************************************** 호출방법 :: $order_query = selectRow("all",$page," sc_ord asc"); *******************************************/ function selectRow($cnt,$page,$ord){ $startno = ($page-1) * $cnt; if($cnt!="all"){ $limit = "LIMIT $startno,$cnt "; } $sql = " order by $ord $limit"; return $sql; } function QRY_TOTALPAGE($cnt,$recordcnt){ $total_page = (int)($cnt%$recordcnt); if ($total_page != 0){ $totalpage = (int)($cnt/$recordcnt)+1; } else { $totalpage = (int)($cnt/$recordcnt); } return $totalpage; } /* code 공통코드 싱글 선택 라디오버튼 생성 함수 $selectVal : 실제 선택 된 값 $checkName : 라디오버튼 name (아이디값은 name1, name2 로 생성) $code_gubun : code_gubun 컬럼의 구분값 Author : 2023-03-18 By KGY 사용예시 >>>>>>>>>>>>>>>>>>>>>>>>>> (S)
Fatal error: Uncaught Error: Call to undefined function radioSingleList() in /var/www/moduga/application/libs/sql.php:411 Stack trace: #0 /var/www/moduga/index.php(15): require_once() #1 {main} thrown in /var/www/moduga/application/libs/sql.php on line 411