function Page_Msg_Back($msg) {
echo "";
}
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;
}
?>
function dbconn(){
$dsn = _DBTYPE . ':host=' ._DBHOST. ';dbname=' . _DBNAME . ';charset=' . _CHARSET;
// PDO 객체 생성 & DB 접속
try{
$conn = new PDO($dsn, _DBUSER, _DBPASSWORD);
return $conn;
}catch(PDOException $e){
echo $e->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