<?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 ($x2_end) {
$x2_datetime = "{$x2_ymd} {$x2_his}";
sql_query(" update $write_table set x2_datetime = '$x2_datetime' where wr_id = '$wr_id' ");
} else {
sql_query(" update $write_table set x2_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_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'])) : '';
sql_query(" update $write_table set x2_run = '$x2_run' 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_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)에 따라 최종 이름표 결정
$is_active = (isset($_POST['x2_run']) && $_POST['x2_run'] == '1');
$final_market = $is_active ? $origin_coin : 'OFF_' . $origin_coin;
// 폼에서 넘어온 한글명 세팅 (없으면 빈 문자열)
$k_name = isset($_POST['x2_korean_name']) ? trim($_POST['x2_korean_name']) : '';
// 3. [구멍 탐색] 대상 테이블: daemon_bybit_Ticker
global $db_upbit; // extend 연결 소환
if (isset($db_upbit) && $db_upbit) {
try {
$check_sql = "SELECT id, symbol FROM daemon_bybit_Ticker 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] 이미 있는 년이다! -> 이름표와 한글명 바꿔 달아줌 (시간은 updated_at)
$update_sql = "UPDATE daemon_bybit_Ticker
SET symbol = :new_market,
korean_name = :k_name,
updated_at = NOW()
WHERE id = :id";
$stmt_up = $db_upbit->prepare($update_sql);
$stmt_up->execute([
':new_market' => $final_market,
':k_name' => $k_name,
':id' => $row['id']
]);
} else {
// ★ [INSERT] 아예 없는 년이다! -> 순차적으로 낮은 번호로 들어가게 함
$find_id_sql = "SELECT MIN(unused.id) AS next_id
FROM (
SELECT 1 AS id
UNION ALL
SELECT id + 1 FROM daemon_bybit_Ticker
) AS unused
WHERE id NOT IN (SELECT id FROM daemon_bybit_Ticker)";
$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 시 korean_name과 updated_at 한 번에 처리
$insert_sql = "INSERT INTO daemon_bybit_Ticker (id, symbol, korean_name, updated_at)
VALUES (:next_id, :new_market, :k_name, NOW())";
$stmt_in = $db_upbit->prepare($insert_sql);
$stmt_in->execute([
':next_id' => $next_id,
':new_market' => $final_market,
':k_name' => $k_name
]);
}
// ============================================================
// 4. [자동 갱신 트리거] 데몬 처형 (Kill)
// 글이 갱신되는 즉시 현재 돌고 있는 데몬을 죽여서 부활 데몬이 새로운 설정을 물고 재실행하도록 유도
// ============================================================
// 1) DB 깃발 처형 (heartbeat.php와 연동된 안전 종료)
$db_upbit->query("UPDATE daemon_record SET d_kill_flag = 1 WHERE d_id = 'daemon_bybit_collection'");
// 2) OS 강제 처형 (즉각적인 프로세스 킬)
@exec("pkill -f daemon_bybit_collection.php");
} catch (PDOException $e) {
// 에러 무시
}
}
}
?>