GNU/skin/board/outline_target/write_update.skin.php
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
## 날짜/시간
$date_custom = isset($_POST['wr_date_custom']) ? trim($_POST['wr_date_custom']) : '';
$time_custom = isset($_POST['wr_time_custom']) ? trim($_POST['wr_time_custom']) : '';

if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $date_custom)) {
    $date_custom = date('Y-m-d');
}

if (!preg_match('/^\d{2}:\d{2}(:\d{2})?$/', $time_custom)) {
    $time_custom = date('H:i:s');
} else if (strlen($time_custom) === 5) {
    $time_custom .= ':00';
}

$wr_datetime = "{$date_custom} {$time_custom}";
sql_query(" update $write_table set wr_datetime = '$wr_datetime' where wr_id = '$wr_id' ");
//-----------------------------------------------
## 비트코인 시세 집계 날짜
if ($jy_btc) {
    $btc_datetime = "{$btc_ymd} {$btc_his}";
    sql_query(" update $write_table set btc_datetime = '$btc_datetime' where wr_id = '$wr_id' ");
} else {
    sql_query(" update $write_table set btc_datetime = '' where wr_id = '$wr_id' ");
}
//-----------------------------------------------

$x2_korean_name = isset($_POST['x2_korean_name']) ? sql_escape_string(trim($_POST['x2_korean_name'])) : '';
$x2_run = isset($_POST['x2_run']) ? '1' : '0';
$x2_ca2 = isset($_POST['x2_ca2']) ? sql_escape_string(trim($_POST['x2_ca2'])) : '';
$x2_ca3 = isset($_POST['x2_ca3']) ? sql_escape_string(trim($_POST['x2_ca3'])) : '';
$x2_ver = isset($_POST['x2_ver']) ? sql_escape_string(trim($_POST['x2_ver'])) : '';
$x2_tag = isset($_POST['x2_tag']) ? sql_escape_string(trim($_POST['x2_tag'])) : (isset($_POST['wr_1']) ? sql_escape_string(trim($_POST['wr_1'])) : '');
$x2_base_amount = isset($_POST['x2_base_amount']) ? sql_escape_string(trim($_POST['x2_base_amount'])) : '';
$x2_target_amount = isset($_POST['x2_target_amount']) ? sql_escape_string(trim($_POST['x2_target_amount'])) : '';
$x2_target_type = isset($_POST['x2_target_type']) ? sql_escape_string(trim($_POST['x2_target_type'])) : '';
$x2_current_asset = isset($_POST['x2_current_asset']) ? sql_escape_string(trim($_POST['x2_current_asset'])) : '';
$x2_profit_amount = isset($_POST['x2_profit_amount']) ? sql_escape_string(trim($_POST['x2_profit_amount'])) : '';
$x2_profit_rate = isset($_POST['x2_profit_rate']) ? sql_escape_string(trim($_POST['x2_profit_rate'])) : '';
$x2_reach_rate = isset($_POST['x2_reach_rate']) ? sql_escape_string(trim($_POST['x2_reach_rate'])) : '';
$x2_datetime = isset($_POST['x2_datetime']) ? trim($_POST['x2_datetime']) : '';
$x2_unit_base = isset($_POST['x2_unit_base']) ? sql_escape_string(trim($_POST['x2_unit_base'])) : '';
$x2_unit_add = isset($_POST['x2_unit_add']) ? sql_escape_string(trim($_POST['x2_unit_add'])) : '';
$x2_unit_max = isset($_POST['x2_unit_max']) ? sql_escape_string(trim($_POST['x2_unit_max'])) : '';
$x2_base_increase_rate = isset($_POST['x2_base_increase_rate']) ? sql_escape_string(trim($_POST['x2_base_increase_rate'])) : '';
$x2_max_increase_rate = isset($_POST['x2_max_increase_rate']) ? sql_escape_string(trim($_POST['x2_max_increase_rate'])) : '';
$x2_trade_item = isset($_POST['x2_trade_item']) ? sql_escape_string(trim($_POST['x2_trade_item'])) : '';
$x2_text = isset($_POST['x2_text']) ? sql_escape_string(trim($_POST['x2_text'])) : '';
$x2_top = isset($_POST['x2_top']) ? '1' : '0';
$x2_label = isset($_POST['x2_label']) ? '1' : '0';
$x2_core = isset($_POST['x2_core']) ? '1' : '0';
$x2_memo_button = isset($_POST['x2_memo_button']) ? '1' : '0';
$x2_memo_clean = isset($_POST['x2_memo_clean']) ? '1' : '0';
$x2_memo = isset($_POST['x2_memo']) ? sql_escape_string(trim($_POST['x2_memo'])) : '';

if ($x2_run === '1') {
    if ($x2_datetime === '') {
        $x2_datetime = date('Y-m-d H:i:s');
    } else {
        $x2_datetime = str_replace('T', ' ', $x2_datetime);
        if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $x2_datetime)) {
            $x2_datetime .= ':00';
        }
        if (!preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $x2_datetime)) {
            $x2_datetime = date('Y-m-d H:i:s');
        }
    }

    $x2_datetime = sql_escape_string($x2_datetime);
} else {
    $x2_datetime = '';
    $x2_current_asset = '';
    $x2_profit_amount = '';
    $x2_profit_rate = '';
    $x2_reach_rate = '';
}

sql_query(" update $write_table set x2_run = '$x2_run' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_datetime = '$x2_datetime' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_ca2 = '$x2_ca2' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_ca3 = '$x2_ca3' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_tag = '$x2_tag' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_ver = '$x2_ver' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_korean_name = '$x2_korean_name' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_base_amount = '$x2_base_amount' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_target_amount = '$x2_target_amount' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_current_asset = '$x2_current_asset' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_profit_amount = '$x2_profit_amount' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_profit_rate = '$x2_profit_rate' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_reach_rate = '$x2_reach_rate' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_target_type = '$x2_target_type' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_unit_base = '$x2_unit_base' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_unit_add = '$x2_unit_add' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_unit_max = '$x2_unit_max' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_base_increase_rate = '$x2_base_increase_rate' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_max_increase_rate = '$x2_max_increase_rate' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_trade_item = '$x2_trade_item' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_text = '$x2_text' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_top = '$x2_top' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_label = '$x2_label' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_core = '$x2_core' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_memo_button = '$x2_memo_button' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_memo_clean = '$x2_memo_clean' where wr_id = '$wr_id' ");
sql_query(" update $write_table set x2_memo = '$x2_memo' where wr_id = '$wr_id' ");







// 1. 오빠가 입력한 코인명 (순정 이름)
$origin_coin = isset($wr_subject) ? trim($wr_subject) : '';

if ($origin_coin) {
    // 2. [목표 설정] 오빠 명령(x2_run)에 따라 최종 이름표 결정
    // 켜져 있으면(1) -> 순정 ("BTC")
    // 꺼져 있으면 -> 낙인 ("OFF_BTC")
    $is_active = (isset($_POST['x2_run']) && $_POST['x2_run'] == '1');
    $final_market = $is_active ? $origin_coin : 'OFF_' . $origin_coin;

    // 3. [구멍 탐색] 순정이든 낙인이든 일단 이 코인 행이 있는지 찾음
    // "야, 너 BTC든 OFF_BTC든 뭐라도 있냐?"
    global $db_upbit; // extend 연결 소환

    if (isset($db_upbit) && $db_upbit) {
        try {
            // 검색 조건: 순정 이름 OR 낙인 이름 둘 중 하나라도 있는지 확인
            $check_sql = "SELECT id, symbol FROM stats_direction_01_bybit WHERE symbol IN (:clean, :off)";
            $stmt = $db_upbit->prepare($check_sql);
            $stmt->execute([
                ':clean' => $origin_coin, 
                ':off' => 'OFF_' . $origin_coin
            ]);
            
            $row = $stmt->fetch();

            if ($row) {
                // ★ [UPDATE] 이미 있는 년이다! -> 이름표만 바꿔 달아줌
                // 기존 값이랑 다를 때만 업데이트 (쓸데없는 짓 안 하게)
                if ($row['symbol'] != $final_market) {
                    $update_sql = "UPDATE stats_direction_01_bybit SET symbol = :new_market, collected_at = NOW() WHERE id = :id";
                    $stmt_up = $db_upbit->prepare($update_sql);
                    $stmt_up->execute([
                        ':new_market' => $final_market,
                        ':id' => $row['id']
                    ]);
                }
            } else {
                // ★ [INSERT] 아예 없는 년이다! -> 순차적으로 낮은 번호로 들어가게 함
                // 현재 테이블에서 비어있는 가장 작은 ID 값을 찾음 (1번부터 체크)
                $find_id_sql = "SELECT MIN(unused.id) AS next_id
                                FROM (
                                    SELECT 1 AS id
                                    UNION ALL
                                    SELECT id + 1 FROM stats_direction_01_bybit
                                ) AS unused
                                WHERE id NOT IN (SELECT id FROM stats_direction_01_bybit)";
                $id_res = $db_upbit->query($find_id_sql);
                $next_id_row = $id_res->fetch();
                $next_id = $next_id_row['next_id'] ? $next_id_row['next_id'] : 1;

                $insert_sql = "INSERT INTO stats_direction_01_bybit (id, symbol, collected_at) VALUES (:next_id, :new_market, NOW())";
                $stmt_in = $db_upbit->prepare($insert_sql);
                $stmt_in->execute([
                    ':next_id' => $next_id,
                    ':new_market' => $final_market
                ]);
            }

            // [추가] daemon_bybit_Ticker 테이블 korean_name 컬럼 업데이트
            if (isset($_POST['x2_korean_name'])) {
                $k_name = trim($_POST['x2_korean_name']);
                $up_ticker = "UPDATE daemon_bybit_Ticker SET korean_name = :k_name WHERE symbol = :symbol";
                $stmt_tk = $db_upbit->prepare($up_ticker);
                $stmt_tk->execute([':k_name'=>$k_name, ':symbol'=>$origin_coin]);
                $stmt_tk->execute([':k_name'=>$k_name, ':symbol'=>'OFF_'.$origin_coin]);
            }

        } catch (PDOException $e) {
            // 에러 무시
        }
    }
}
?>