From 9f605f214e71f0ba0f9aafb6cdd0499335de9113 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 16 Feb 2026 05:50:45 +0000 Subject: [PATCH] Autosave: 20260216-055045 --- admin/ai_control.php | 1 + admin/backend_settings.php | 1 + admin/binary.php | 1 + admin/contract.php | 1 + admin/customer_service.php | 167 ++++++++ admin/exchange.php | 1 + admin/finance.php | 1 + admin/frontend_settings.php | 1 + admin/index.php | 146 +++++++ admin/layout.php | 151 +++++++ admin/mining.php | 1 + admin/profile.php | 1 + admin/spot.php | 1 + admin/stats.php | 1 + admin/users.php | 1 + api/chat.php | 53 +++ assets/css/index.css | 20 + assets/css/terminal.css | 469 +++++++++++++-------- assets/pasted-20260216-030754-d864743b.png | Bin 0 -> 8020 bytes assets/pasted-20260216-045542-0f5ccd02.png | Bin 0 -> 21646 bytes assets/pasted-20260216-053957-3eccecf6.png | Bin 0 -> 14903 bytes auth/login.php | 74 ++-- auth/register.php | 57 +-- create_admin.php | 16 + includes/footer.php | 117 +++++ includes/header.php | 138 +++++- includes/lang.php | 121 +++++- includes/terminal_layout.php | 403 +++++++++++++----- index.php | 163 +++---- market.php | 67 ++- mining.php | 195 +++++---- profile.php | 144 +++++-- swap.php | 138 ++++-- 33 files changed, 2039 insertions(+), 612 deletions(-) create mode 100644 admin/ai_control.php create mode 100644 admin/backend_settings.php create mode 100644 admin/binary.php create mode 100644 admin/contract.php create mode 100644 admin/customer_service.php create mode 100644 admin/exchange.php create mode 100644 admin/finance.php create mode 100644 admin/frontend_settings.php create mode 100644 admin/index.php create mode 100644 admin/layout.php create mode 100644 admin/mining.php create mode 100644 admin/profile.php create mode 100644 admin/spot.php create mode 100644 admin/stats.php create mode 100644 admin/users.php create mode 100644 api/chat.php create mode 100644 assets/pasted-20260216-030754-d864743b.png create mode 100644 assets/pasted-20260216-045542-0f5ccd02.png create mode 100644 assets/pasted-20260216-053957-3eccecf6.png create mode 100644 create_admin.php diff --git a/admin/ai_control.php b/admin/ai_control.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/ai_control.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/backend_settings.php b/admin/backend_settings.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/backend_settings.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/binary.php b/admin/binary.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/binary.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/contract.php b/admin/contract.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/contract.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/customer_service.php b/admin/customer_service.php new file mode 100644 index 0000000..dfab399 --- /dev/null +++ b/admin/customer_service.php @@ -0,0 +1,167 @@ + + + + + + Byro Admin | 客服系统 + + + + + + + + + +
+ + +
+
+ +

从左侧选择一个会话开始实时对话

+
+
+ + +
+ + + + diff --git a/admin/exchange.php b/admin/exchange.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/exchange.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/finance.php b/admin/finance.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/finance.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/frontend_settings.php b/admin/frontend_settings.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/frontend_settings.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..00cc054 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,146 @@ + + +
+
+
+
+
+
总用户数
+
1,234
+
+
+ +
+
+
+ 12% 较上月 +
+
+
+
+
+
+
+
总充值 (USDT)
+
542,000
+
+
+ +
+
+
+ 5.4% 较昨日 +
+
+
+
+
+
+
+
今日成交额
+
1.2M
+
+
+ +
+
+
+ 2.1% 较昨日 +
+
+
+
+
+
+
+
待审核提现
+
15
+
+
+ +
+
+
+ 需要尽快处理 +
+
+
+
+ +
+
+
+
+
最新用户注册
+ +
+ + + + + + + + + + + + + prepare("SELECT * FROM users ORDER BY created_at DESC LIMIT 5"); + $stmt->execute(); + while ($user = $stmt->fetch()): + ?> + + + + + + + + + + +
UID账号信用分注册时间状态操作
正常 + +
+
+
+
+
+
系统通知
+
+
+
+ 系统升级成功 + 1小时前 +
+

版本 2.1.0 已发布,优化了交易引擎性能。

+
+
+
+ 数据库备份 + 5小时前 +
+

每日自动备份已完成,状态正常。

+
+
+
+ 新提现申请 + 8小时前 +
+

用户 UID:618120456 申请提现 500 USDT。

+
+
+
+
+
+ + diff --git a/admin/layout.php b/admin/layout.php new file mode 100644 index 0000000..15cce5b --- /dev/null +++ b/admin/layout.php @@ -0,0 +1,151 @@ +prepare("SELECT * FROM users WHERE id = ?"); + $stmt->execute([$_SESSION['user_id']]); + $user = $stmt->fetch(); +} + +if (!$user || $user['username'] !== 'admin') { + header('Location: /auth/login.php'); + exit; +} + +function renderAdminPage($content, $title = '后台管理') { + ?> + + + + + + <?= $title ?> - Byro Admin + + + + + +
+ + +
+ +
+
+
+
+
+
欢迎您, 管理员
+ 返回首页 + 登出 +
+
+ +
+ +
+ + + diff --git a/admin/mining.php b/admin/mining.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/mining.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/profile.php b/admin/profile.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/profile.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/spot.php b/admin/spot.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/spot.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/stats.php b/admin/stats.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/stats.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/admin/users.php b/admin/users.php new file mode 100644 index 0000000..dbd3df4 --- /dev/null +++ b/admin/users.php @@ -0,0 +1 @@ +

正在开发中...

此模块即将上线,敬请期待。

diff --git a/api/chat.php b/api/chat.php new file mode 100644 index 0000000..4e49a99 --- /dev/null +++ b/api/chat.php @@ -0,0 +1,53 @@ + false])); + + $user_id = $_SESSION['user_id'] ?? 0; + $sender = 'user'; + $ip = $_SERVER['REMOTE_ADDR']; + + $stmt = db()->prepare("INSERT INTO messages (user_id, sender, message, ip_address) VALUES (?, ?, ?, ?)"); + $stmt->execute([$user_id, $sender, $message, $ip]); + echo json_encode(['success' => true]); + exit; +} + +if ($action === 'get_messages') { + $user_id = $_SESSION['user_id'] ?? 0; + // For simplicity, we get all messages for this user session or UID + // If not logged in, we could use session_id or IP, but let's stick to user_id or all recent for the session + $stmt = db()->prepare("SELECT * FROM messages WHERE user_id = ? OR (user_id = 0 AND ip_address = ?) ORDER BY created_at ASC"); + $stmt->execute([$user_id, $_SERVER['REMOTE_ADDR']]); + $messages = $stmt->fetchAll(); + echo json_encode($messages); + exit; +} + +if ($action === 'admin_send') { + $message = $_POST['message'] ?? ''; + $user_id = $_POST['user_id'] ?? 0; + $target_ip = $_POST['ip_address'] ?? ''; + + if (!$message) exit(json_encode(['success' => false])); + + $admin_id = $_SESSION['user_id'] ?? 1; // Default to admin + $sender = 'admin'; + + $stmt = db()->prepare("INSERT INTO messages (user_id, admin_id, sender, message, ip_address) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$user_id, $admin_id, $sender, $message, $target_ip]); + echo json_encode(['success' => true]); + exit; +} + +if ($action === 'admin_get_all') { + // Get distinct users/IPs who have messaged + $stmt = db()->query("SELECT m.*, u.username, u.uid FROM messages m LEFT JOIN users u ON m.user_id = u.id WHERE m.id IN (SELECT MAX(id) FROM messages GROUP BY user_id, ip_address) ORDER BY created_at DESC"); + echo json_encode($stmt->fetchAll()); + exit; +} diff --git a/assets/css/index.css b/assets/css/index.css index 579b17a..77b6fa8 100644 --- a/assets/css/index.css +++ b/assets/css/index.css @@ -21,12 +21,32 @@ body { color: var(--text-muted) !important; } +.text-light { + color: #fff !important; +} + +.fs-3, .fs-5, h1, h2, h3, h4 { + color: #ffffff; +} + .card { background-color: var(--card-bg); border: 1px solid var(--border-color); border-radius: 12px; } +/* Contrast optimization */ +.alert { + background: rgba(239, 83, 80, 0.1); + color: #ef5350; + border: 1px solid rgba(239, 83, 80, 0.2); +} + +.bg-black { + background-color: #000000 !important; +} + + /* Hero Carousel Optimization */ .carousel-item { transition: transform 0.6s ease-in-out; diff --git a/assets/css/terminal.css b/assets/css/terminal.css index 8fd874f..cd84221 100644 --- a/assets/css/terminal.css +++ b/assets/css/terminal.css @@ -7,27 +7,228 @@ --term-primary: #0062ff; --term-success: #26a69a; --term-danger: #ef5350; - --header-height: 50px; - --sidebar-width: 260px; - --orderbook-width: 280px; + --header-height: 60px; + --sidebar-width: 280px; + --orderbook-width: 300px; } .terminal-container { display: flex; flex-direction: column; - height: calc(100vh - 70px); + height: 100vh; background: var(--term-bg); color: var(--term-text); overflow: hidden; } -.terminal-top-nav { - height: var(--header-height); +.sidebar-tabs { + display: flex; + height: 60px; + border-bottom: 1px solid var(--term-border); background: var(--term-surface); +} + +.sidebar-tabs .terminal-tab { + flex: 1; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: 13px; + border-right: 1px solid var(--term-border); + color: var(--term-muted); + text-decoration: none; + font-weight: 600; + transition: all 0.2s; +} + +.sidebar-tabs .terminal-tab:hover { + color: var(--term-text); + background: rgba(255,255,255,0.03); +} + +.sidebar-tabs .terminal-tab.active { + background: var(--term-bg); + color: var(--term-primary); + border-bottom: 2px solid var(--term-primary); +} + +.sidebar-tabs .terminal-tab:last-child { + border-right: none; +} + +.sidebar-search { + padding: 10px 12px; + border-bottom: 1px solid var(--term-border); + height: 60px; + display: flex; + align-items: center; + background: var(--term-surface); +} + +.sidebar-search input { + background: #0b0e11; + border: 1px solid var(--term-border); + color: #fff; + width: 100%; + height: 38px; + padding: 0 12px; + border-radius: 4px; + font-size: 12px; + outline: none; + transition: all 0.2s; +} + +.content-header { + height: 50px; border-bottom: 1px solid var(--term-border); display: flex; align-items: center; - padding: 0; + padding: 0 15px; + gap: 20px; + background: var(--term-surface); +} + +.terminal-sidebar { + width: var(--sidebar-width); + border-right: 1px solid var(--term-border); + display: flex; + flex-direction: column; + background: var(--term-surface); +} + +.terminal-right-sidebar { + width: var(--orderbook-width); + border-left: 1px solid var(--term-border); + background: var(--term-surface); +} + + +.sidebar-search input { + background: #0b0e11; + border: 1px solid var(--term-border); + color: #fff; + width: 100%; + padding: 8px 15px; + border-radius: 8px; + font-size: 13px; + outline: none; + transition: border-color 0.2s; +} + +.sidebar-search input:focus { + border-color: var(--term-primary); +} + +/* Order Book Beautification */ +.order-book { + display: flex; + flex-direction: column; + height: 100%; + font-family: 'Roboto Mono', 'Noto Sans SC', monospace; + background: #0b0e11; +} + +.ob-header { + display: flex; + justify-content: space-between; + padding: 12px 15px; + font-size: 11px; + color: #848e9c; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid var(--term-border); +} + +.ob-list { + flex: 1; + display: flex; + flex-direction: column; +} + +.ob-row { + display: flex; + justify-content: space-between; + padding: 2px 15px; + font-size: 12px; + position: relative; + cursor: pointer; +} + +.ob-mid-price { + padding: 10px 15px; + text-align: left; + background: rgba(0,0,0,0.4); + border-top: 1px solid var(--term-border); + border-bottom: 1px solid var(--term-border); +} + +.ob-mid-price .val { + font-size: 18px; + font-weight: 700; + display: block; +} + +.ob-row:hover { + background: rgba(255,255,255,0.05); +} + +.ob-row .price { font-weight: 600; z-index: 2; } +.asks .price { color: #f6465d; } +.bids .price { color: #0ecb81; } +.ob-row .amount { color: #eaecef; opacity: 0.9; z-index: 2; } + +.ob-row-bg { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 1; + opacity: 0.1; + transition: width 0.3s ease; +} + +.asks .ob-row-bg { background: #f6465d; } +.bids .ob-row-bg { background: #0ecb81; } + +.ob-mid-price { + padding: 15px; + text-align: left; + background: rgba(0,0,0,0.3); + border-top: 1px solid var(--term-border); + border-bottom: 1px solid var(--term-border); +} + +.ob-mid-price .val { + font-size: 20px; + font-weight: 700; + display: block; +} + + +/* Order Panel Records */ +.order-history table { + border-collapse: separate; + border-spacing: 0; +} + +.order-history th { + font-weight: 600; + text-transform: uppercase; + font-size: 10px; + letter-spacing: 0.5px; + color: var(--term-muted); + padding: 10px; +} + +.order-history td { + padding: 12px 10px; + border-bottom: 1px solid rgba(255,255,255,0.03); +} + +.order-history tr:hover td { + background: rgba(255,255,255,0.02); } .terminal-tab { @@ -71,14 +272,17 @@ .sidebar-search { padding: 12px; border-bottom: 1px solid var(--term-border); + height: 60px; + display: flex; + align-items: center; } .sidebar-search input { background: #2b3139; - border: none; + border: 1px solid var(--term-border); color: #fff; width: 100%; - padding: 8px 12px; + padding: 6px 12px; border-radius: 4px; font-size: 13px; outline: none; @@ -87,227 +291,138 @@ .coin-list-container { flex: 1; overflow-y: auto; + scrollbar-width: none; + -ms-overflow-style: none; +} +.coin-list-container::-webkit-scrollbar { + display: none; } .coin-row { + padding: 10px 15px; display: flex; justify-content: space-between; - padding: 10px 12px; + align-items: center; cursor: pointer; border-bottom: 1px solid rgba(255,255,255,0.02); transition: background 0.2s; } - .coin-row:hover { background: rgba(255,255,255,0.05); } - -.coin-row .coin-info { - display: flex; - align-items: center; - gap: 8px; -} - .coin-row img { - width: 18px; - height: 18px; + width: 20px; + height: 20px; + margin-right: 10px; } - .coin-row .symbol { font-weight: 600; font-size: 13px; } - -.coin-row .price { - font-size: 13px; - text-align: right; - font-family: monospace; -} - .coin-row .change { font-size: 11px; - display: block; + margin-left: 5px; +} +.coin-row .price { + font-size: 13px; + font-weight: 500; } .terminal-content { flex: 1; display: flex; flex-direction: column; - overflow: hidden; - background: var(--term-bg); + border-right: 1px solid var(--term-border); } .content-header { height: 60px; + border-bottom: 1px solid var(--term-border); display: flex; align-items: center; - padding: 0 16px; - border-bottom: 1px solid var(--term-border); - gap: 24px; -} - -.header-pair { - font-size: 20px; - font-weight: 700; -} - -.header-stat { - display: flex; - flex-direction: column; -} - -.header-stat label { - font-size: 11px; - color: var(--term-muted); -} - -.header-stat span { - font-size: 13px; - font-weight: 600; + padding: 0 20px; + gap: 30px; } .kline-container { - flex: 2; + flex: 1; + min-height: 400px; background: #000; - position: relative; - border-bottom: 1px solid var(--term-border); } .trading-panels { - height: 280px; - display: flex; - border-bottom: 1px solid var(--term-border); -} - -.order-form-container { - flex: 1; - padding: 16px; - border-right: 1px solid var(--term-border); -} - -.order-form-tabs { - display: flex; - gap: 16px; - margin-bottom: 16px; -} - -.order-form-tabs button { - background: none; - border: none; - color: var(--term-muted); - font-weight: 600; - font-size: 14px; - padding-bottom: 4px; -} - -.order-form-tabs button.active { - color: var(--term-text); - border-bottom: 2px solid var(--term-primary); -} - -.input-group-custom { - margin-bottom: 12px; -} - -.input-group-custom label { - display: block; - font-size: 11px; - color: var(--term-muted); - margin-bottom: 4px; -} - -.input-wrapper { - background: #2b3139; - border-radius: 4px; - display: flex; - align-items: center; - padding: 0 10px; -} - -.input-wrapper input { - background: transparent; - border: none; - color: #fff; - width: 100%; - padding: 8px 0; - outline: none; - font-size: 14px; -} - -.input-wrapper .suffix { - font-size: 12px; - color: var(--term-muted); + padding: 20px; + background: var(--term-surface); } .order-history { flex: 1; overflow-y: auto; + scrollbar-width: none; +} +.order-history::-webkit-scrollbar { + display: none; } -.terminal-right-sidebar { - width: var(--orderbook-width); - border-left: 1px solid var(--term-border); - display: flex; - flex-direction: column; - background: var(--term-surface); -} - -.order-book { - flex: 1; - display: flex; - flex-direction: column; - font-size: 12px; -} - -.ob-header { - padding: 8px 12px; - display: flex; - justify-content: space-between; - color: var(--term-muted); - border-bottom: 1px solid var(--term-border); -} - -.ob-list { - flex: 1; +/* Binary Order Panel */ +.cycle-grid { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 1px; + background: var(--term-border); + border: 1px solid var(--term-border); + border-radius: 4px; overflow: hidden; } -.ob-row { - display: flex; - justify-content: space-between; - padding: 2px 12px; - position: relative; - z-index: 1; +.cycle-btn { + background: var(--term-bg); + border: none; + color: var(--term-muted); + padding: 12px 5px; + font-size: 11px; + font-weight: 600; + transition: all 0.2s; } -.ob-row .price { width: 40%; } -.ob-row .amount { width: 30%; text-align: right; } -.ob-row .total { width: 30%; text-align: right; } - -.asks .price { color: var(--term-danger); } -.bids .price { color: var(--term-success); } - -.ob-row-bg { - position: absolute; - top: 0; right: 0; bottom: 0; - z-index: -1; - opacity: 0.15; +.cycle-btn:hover { + background: rgba(255,255,255,0.05); + color: var(--term-text); } -.asks .ob-row-bg { background: var(--term-danger); } -.bids .ob-row-bg { background: var(--term-success); } - -.ob-mid-price { - padding: 10px 12px; - background: rgba(255,255,255,0.02); - display: flex; - align-items: center; - gap: 8px; - border-top: 1px solid var(--term-border); - border-bottom: 1px solid var(--term-border); +.cycle-btn.active { + background: var(--term-primary); + color: #fff; } -.ob-mid-price .val { font-size: 18px; font-weight: 700; } +.amount-input-wrapper input { + height: 50px; + font-size: 18px; + font-weight: bold; + text-align: center; + border-radius: 8px; +} + +.section-title { + font-size: 12px; + font-weight: 600; + color: var(--term-muted); + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.quick-amounts .btn { + font-weight: 600; + background: #2b3139; + border: none; +} + +.quick-amounts .btn:hover { + background: #3b424c; +} + +.binary-order-panel { + background: var(--term-surface); + border-radius: 12px; +} -.btn-buy { background: var(--term-success); border: none; color: #fff; width: 100%; padding: 10px; border-radius: 4px; font-weight: 700; margin-top: 10px; } -.btn-sell { background: var(--term-danger); border: none; color: #fff; width: 100%; padding: 10px; border-radius: 4px; font-weight: 700; margin-top: 10px; } diff --git a/assets/pasted-20260216-030754-d864743b.png b/assets/pasted-20260216-030754-d864743b.png new file mode 100644 index 0000000000000000000000000000000000000000..96a99c61177ab6d04258522246e89d9d57afe86b GIT binary patch literal 8020 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 Y*E#xWa8t=qxUx?7jKS&blUD!xf8#@V5dZ)H literal 0 HcmV?d00001 diff --git a/assets/pasted-20260216-053957-3eccecf6.png b/assets/pasted-20260216-053957-3eccecf6.png new file mode 100644 index 0000000000000000000000000000000000000000..c9482736d35facd888125a1f9ce8740e87794d8d GIT binary patch literal 14903 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 if ($user && password_verify($password, $user['password_hash'])) { + if (session_status() === PHP_SESSION_NONE) session_start(); $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + $_SESSION['uid'] = $user['uid']; + $_SESSION['role'] = $user['role']; header('Location: /'); exit; } else { @@ -28,31 +32,53 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { include __DIR__ . '/../includes/header.php'; ?> -
-

- - -
- +
+
+
+
+
+
+
+ + + + + +
+ BYRO +
+

+

Welcome back to Byro Exchange

+
+ + +
+ +
+ + +
+
+ + +
+ +
+ + +
+ + + +
+ 还没有账号? +
+
+
- - -
-
- - -
- -
- - -
- - -
- -
- New to OKX? Create an account
diff --git a/auth/register.php b/auth/register.php index 098d190..437818a 100644 --- a/auth/register.php +++ b/auth/register.php @@ -33,19 +33,26 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } else { try { $hash = password_hash($password, PASSWORD_DEFAULT); - $stmt = db()->prepare("INSERT INTO users (username, email, password_hash) VALUES (?, ?, ?)"); + $uid = '618120' . mt_rand(100000, 999999); + $stmt = db()->prepare("INSERT INTO users (username, email, password_hash, uid, credit_score) VALUES (?, ?, ?, ?, ?)"); $username = strpos($account, '@') === false ? $account : explode('@', $account)[0]; $email = strpos($account, '@') !== false ? $account : $account . '@byro.io'; - $stmt->execute([$username, $email, $hash]); + $stmt->execute([$username, $email, $hash, $uid, 80]); $userId = db()->lastInsertId(); + if (session_status() === PHP_SESSION_NONE) session_start(); + $_SESSION['user_id'] = $userId; + $_SESSION['username'] = $username; + $_SESSION['uid'] = $uid; + $_SESSION['role'] = 'user'; + $_SESSION['credit_score'] = 80; + // Initialize balance - $stmt = db()->prepare("INSERT INTO user_balances (user_id, symbol, available) VALUES (?, 'USDT', 0)"); + $stmt = db()->prepare("INSERT INTO user_balances (user_id, symbol, available) VALUES (?, 'USDT', 1000)"); // Giving some demo USDT $stmt->execute([$userId]); - $_SESSION['user_id'] = $userId; header('Location: /'); exit; } catch (PDOException $e) { @@ -61,52 +68,52 @@ include __DIR__ . '/../includes/header.php';
-
-
-
-
- +
+
+
+
+
- Byro + BYRO
-

-

Create your account to start trading

+

+

Join the most secure digital asset exchange

-
- +
+
- - + +
- +
- - + +
- - + +
- - + +
@@ -116,10 +123,10 @@ include __DIR__ . '/../includes/header.php';
- +
- Already have an account? + 已经有账号?
diff --git a/create_admin.php b/create_admin.php new file mode 100644 index 0000000..b442ed6 --- /dev/null +++ b/create_admin.php @@ -0,0 +1,16 @@ +prepare("INSERT INTO users (username, email, password_hash, uid, role, credit_score) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt->execute([$username, 'admin@byro.io', $hash, $uid, 'admin', 100]); + + echo "Admin user created successfully with password: admin123\n"; +} catch (Exception $e) { + echo "Error or Admin already exists: " . $e->getMessage() . "\n"; +} diff --git a/includes/footer.php b/includes/footer.php index 788cee3..eecf857 100644 --- a/includes/footer.php +++ b/includes/footer.php @@ -69,6 +69,122 @@
+ +
+ +
+
+ + + +
+
+
+
+ Online Support +
+ +
+
+
Welcome to Byro Support! How can we help?
+
+
+
+ + +
+
+
+ + + diff --git a/includes/header.php b/includes/header.php index 751fa3e..872291a 100644 --- a/includes/header.php +++ b/includes/header.php @@ -26,6 +26,7 @@ function getSetting($key, $default = null) { + @@ -214,8 +310,44 @@ function getSetting($key, $default = null) {
- - + + + + +
+ +
+
+ + + + +
+
+ + +
+ prepare("SELECT available FROM user_balances WHERE user_id = ? AND symbol = 'USDT'"); + $stmt->execute([$user['id']]); + $bal = $stmt->fetch(); + ?> +
+ + USDT +
+
+ + +
diff --git a/includes/lang.php b/includes/lang.php index 4a9150b..b86b2de 100644 --- a/includes/lang.php +++ b/includes/lang.php @@ -1,9 +1,9 @@ 'Byro 每日更新全球加密市场动态,包括最新的上币信息、行业动态、深度分析报告,助您掌握财富密码。', 'fees_content' => 'Byro 致力于提供行业极具竞争力的费率标准。现货交易手续费低至 0.1%,根据您的交易量等级,还可以享受更大幅度的费率折扣。', 'app_desc' => '随时随地,尽在掌握。下载 Byro 移动端,体验专业级交易。', + 'real_name' => '实名认证', + 'verified' => '已认证', + 'unverified' => '未认证', + 'credit_score' => '信用分', + 'recharge' => '充值', + 'orders' => '订单记录', + 'account' => '账号 / 邮箱', + 'market_view' => '市场行情', + 'sec_contract' => '秒合约', + 'secure_acc' => '保障账户安全', + 'from' => '从', + 'to' => '到', + 'balance' => '余额', + 'swap_now' => '立即兑换', + 'rate' => '汇率', + 'price_impact' => '价格影响', + 'slippage' => '滑点容差', + 'mining_title' => '专业矿池', + 'mining_desc' => '专业的云挖矿和质押平台。加入数千名用户,通过 Byro 的高效挖矿池赚取被动收入。', + 'est_apy' => '预计年化', + 'min_deposit' => '最低充值', + 'lock_period' => '锁定周期', + 'start_mining' => '开始挖矿', + 'why_mining' => '为什么选择 Byro 挖矿?', + 'adv_hardware' => '先进硬件', + 'adv_hardware_desc' => '我们使用最新的 ASIC 和 GPU 矿机,确保最高利润 and 稳定性。', + 'auto_compound' => '自动复利', + 'auto_compound_desc' => '自动重新投资您的每日奖励,以实现长期收益最大化。', + 'real_time_monitor' => '实时监控', + 'real_time_monitor_desc' => '通过我们直观的控制面板实时跟踪您的算力和收益。', + 'calc_profit' => '计算您的收益', + 'calc_desc' => '输入您的投资金额以估算每日收益。', + 'daily_profit' => '每日收益', + 'monthly_profit' => '每月收益', + 'try_calc' => '尝试挖矿计算器', + 'asset' => '资产', + 'vol_24h' => '24h 成交额', + 'cycle_settlement' => '周期/结算', + 'purchase_amount' => '买入量', + 'available_balance' => '可以金额', + 'expected_profit' => '预期收益', + 'buy_up' => '买涨', + 'buy_down' => '买跌', + 'profit' => '收益', ], 'en' => [ 'home' => 'Home', @@ -149,6 +193,50 @@ $translations = [ 'news_content' => 'Byro updates daily global crypto market dynamics, including the latest listing info, industry trends, and in-depth analysis reports to help you master wealth opportunities.', 'fees_content' => 'Byro is committed to providing industry-competitive fee standards. Spot trading fees as low as 0.1%, with deeper discounts based on your trading volume tier.', 'app_desc' => 'Anytime, anywhere, at your fingertips. Download Byro mobile app for professional trading experience.', + 'real_name' => 'Real-name', + 'verified' => 'Verified', + 'unverified' => 'Unverified', + 'credit_score' => 'Credit Score', + 'recharge' => 'Recharge', + 'orders' => 'Orders', + 'account' => 'Account / Email', + 'market_view' => 'Market View', + 'sec_contract' => 'Second Contract', + 'secure_acc' => 'Secure My Account', + 'from' => 'From', + 'to' => 'To', + 'balance' => 'Balance', + 'swap_now' => 'Swap Now', + 'rate' => 'Rate', + 'price_impact' => 'Price Impact', + 'slippage' => 'Slippage Tolerance', + 'mining_title' => 'Mining Pool', + 'mining_desc' => 'Professional cloud mining and staking platform. Join thousands of users earning passive income with Byro\'s high-efficiency mining pools.', + 'est_apy' => 'Est. APY', + 'min_deposit' => 'Min. Deposit', + 'lock_period' => 'Lock Period', + 'start_mining' => 'Start Mining', + 'why_mining' => 'Why choose Byro Mining?', + 'adv_hardware' => 'Advanced Hardware', + 'adv_hardware_desc' => 'We use the latest ASIC and GPU miners to ensure maximum profitability and stability.', + 'auto_compound' => 'Auto Compounding', + 'auto_compound_desc' => 'Reinvest your daily rewards automatically to maximize your total yield over time.', + 'real_time_monitor' => 'Real-time Monitoring', + 'real_time_monitor_desc' => 'Track your hash rate and earnings in real-time through our intuitive dashboard.', + 'calc_profit' => 'Calculate Your Profit', + 'calc_desc' => 'Enter your investment amount to estimate your daily earnings.', + 'daily_profit' => 'Daily Profit', + 'monthly_profit' => 'Monthly Profit', + 'try_calc' => 'Try Mining Calculator', + 'asset' => 'Asset', + 'vol_24h' => '24h Volume', + 'cycle_settlement' => 'Cycle / Settlement', + 'purchase_amount' => 'Purchase Amount', + 'available_balance' => 'Available Balance', + 'expected_profit' => 'Expected Profit', + 'buy_up' => 'Buy Up', + 'buy_down' => 'Buy Down', + 'profit' => 'Profit', ] ]; @@ -156,3 +244,32 @@ function __($key) { global $translations, $lang; return $translations[$lang][$key] ?? $key; } + +function getCoinIcon($symbol) { + $icon_ids = [ + 'BTC' => '1/small/bitcoin.png', + 'ETH' => '279/small/ethereum.png', + 'USDT' => '325/small/tether.png', + 'BNB' => '825/small/binance-coin-logo.png', + 'SOL' => '4128/small/solana.png', + 'XRP' => '44/small/xrp-symbol-white-128.png', + 'ADA' => '975/small/cardano.png', + 'DOGE' => '5/small/dogecoin.png', + 'DOT' => '12171/small/polkadot.png', + 'MATIC' => '4713/small/matic-network.png', + 'AVAX' => '12559/small/avalanche.png', + 'LINK' => '877/small/chainlink.png', + 'SHIB' => '11939/small/shiba-inu.png', + 'TRX' => '1094/small/tron.png', + 'BCH' => '153/small/bitcoin-cash.png', + 'LTC' => '2/small/litecoin.png', + 'UNI' => '12504/small/uniswap.png', + 'ARB' => '29359/small/arbitrum.png', + 'OP' => '25244/small/optimism.png', + 'APT' => '27355/small/aptos.png', + 'USDC' => '6319/small/usdc.png', + 'PEPE' => '31386/small/pepe.png', + ]; + $id = $icon_ids[strtoupper($symbol)] ?? '1/small/bitcoin.png'; + return "https://assets.coingecko.com/coins/images/" . $id; +} diff --git a/includes/terminal_layout.php b/includes/terminal_layout.php index 5969e06..4cf1f43 100644 --- a/includes/terminal_layout.php +++ b/includes/terminal_layout.php @@ -1,141 +1,287 @@ 'BTC', 'name' => 'Bitcoin', 'id' => '1/small/bitcoin.png', 'price' => '64,234.50', 'change' => '+2.45%'], - ['symbol' => 'ETH', 'name' => 'Ethereum', 'id' => '279/small/ethereum.png', 'price' => '3,456.20', 'change' => '+1.12%'], - ['symbol' => 'BNB', 'name' => 'BNB', 'id' => '825/small/binance-coin-logo.png', 'price' => '598.40', 'change' => '-0.56%'], - ['symbol' => 'SOL', 'name' => 'Solana', 'id' => '4128/small/solana.png', 'price' => '145.20', 'change' => '+5.67%'], - ['symbol' => 'XRP', 'name' => 'Ripple', 'id' => '44/small/xrp-symbol-white-128.png', 'price' => '0.62', 'change' => '-1.23%'], - ['symbol' => 'ADA', 'name' => 'Cardano', 'id' => '975/small/cardano.png', 'price' => '0.58', 'change' => '+0.89%'], - ['symbol' => 'DOGE', 'name' => 'Dogecoin', 'id' => '5/small/dogecoin.png', 'price' => '0.16', 'change' => '+12.4%'], - ['symbol' => 'DOT', 'name' => 'Polkadot', 'id' => '12171/small/polkadot.png', 'price' => '8.45', 'change' => '-2.11%'], - ['symbol' => 'MATIC', 'name' => 'Polygon', 'id' => '4713/small/matic-network.png', 'price' => '0.92', 'change' => '+1.56%'], - ['symbol' => 'LINK', 'name' => 'Chainlink', 'id' => '877/small/chainlink.png', 'price' => '18.40', 'change' => '+3.22%'], + global $lang, $user; + $currentSymbol = $_GET['symbol'] ?? 'BTC'; + $currentSymbol = strtoupper($currentSymbol); + + $full_coins = [ + ['symbol' => 'BTC', 'name' => 'Bitcoin', 'price' => '64,234.50', 'change' => '+2.45%'], + ['symbol' => 'ETH', 'name' => 'Ethereum', 'price' => '3,456.20', 'change' => '+1.12%'], + ['symbol' => 'USDT', 'name' => 'Tether', 'price' => '1.00', 'change' => '+0.01%'], + ['symbol' => 'BNB', 'name' => 'BNB', 'price' => '598.40', 'change' => '-0.56%'], + ['symbol' => 'SOL', 'name' => 'Solana', 'price' => '145.20', 'change' => '+5.67%'], + ['symbol' => 'XRP', 'name' => 'Ripple', 'price' => '0.62', 'change' => '-1.23%'], + ['symbol' => 'ADA', 'name' => 'Cardano', 'price' => '0.58', 'change' => '+0.89%'], + ['symbol' => 'DOGE', 'name' => 'Dogecoin', 'price' => '0.16', 'change' => '+12.4%'], + ['symbol' => 'DOT', 'name' => 'Polkadot', 'price' => '8.45', 'change' => '-2.11%'], + ['symbol' => 'MATIC', 'name' => 'Polygon', 'price' => '0.92', 'change' => '+1.56%'], + ['symbol' => 'LINK', 'name' => 'Chainlink', 'price' => '18.40', 'change' => '+3.22%'], + ['symbol' => 'AVAX', 'name' => 'Avalanche', 'price' => '45.20', 'change' => '+4.12%'], + ['symbol' => 'SHIB', 'name' => 'Shiba Inu', 'price' => '0.000027', 'change' => '-3.45%'], + ['symbol' => 'TRX', 'name' => 'TRON', 'price' => '0.12', 'change' => '+0.56%'], + ['symbol' => 'BCH', 'name' => 'Bitcoin Cash', 'price' => '456.20', 'change' => '+2.12%'], + ['symbol' => 'LTC', 'name' => 'Litecoin', 'price' => '84.50', 'change' => '+1.45%'], + ['symbol' => 'UNI', 'name' => 'Uniswap', 'price' => '7.20', 'change' => '-2.12%'], ]; ?>
- -
- - - -
-
+ +
- -
-
- <?= $c['symbol'] ?> -
- - + +
+
+
+ <?= $c['symbol'] ?> +
+
+
+
+
+
+
-
-
+
- -
-
BTC/USDT
+
/USDT
- 64,234.50 + 64,234.50
- +2.45% + +2.45%
-
+
- 65,120.00 + 65,120.00
-
+
- 63,450.00 + 63,450.00 +
+
+ + 12,456.23
- -
- TRADING VIEW CHART + +
+
+ +
+
-
-
- - + +
+
+
+ + + + +
-
+ +
(USDT)
+
+ +
+ +
+ + + +
+ +
+
1,000.00 USDT
+
0.00 USDT
+
+ +
-
- -
- - USDT -
-
-
- -
- - BTC -
-
- +
-
- -
- - USDT -
-
-
- -
- - BTC -
-
- +
-
-
-
Open Orders
- - - - - - - - - - - - - - -
TimeTypeSidePriceAmountStatus
No records found
+ + + +
+
+
+ + +
+
: 1,000.00 USDT
+
+
+
+
+ +
+ + USDT +
+
+
+ +
+ + +
+
+
+ + + +
+ +
+
+
+ +
+ + USDT +
+
+
+ +
+ + +
+
+
+ + + +
+ +
+
+
+ +
+ + + + +
+
+
当前委托 (Open Orders)
+
结算部位 (Settlement)
+
成交历史 (Trade History)
+
资产 (Assets)
+
+
+ + + + + + + + + + + + + + + + + +
时间交易对类型方向价格数量成交额状态操作
+
@@ -144,11 +290,11 @@ function renderTerminal($activeTab = 'spot') {
Price(USDT) - Amount(BTC) + Amount()
- @@ -164,7 +310,7 @@ function renderTerminal($activeTab = 'spot') { ≈ $64,234.50
-
+ + diff --git a/index.php b/index.php index 23ebef7..de5a8ce 100644 --- a/index.php +++ b/index.php @@ -10,39 +10,42 @@ require_once __DIR__ . '/includes/header.php';