From b0e6ac9cd8b32acd8a9b80631b21a72201259254 Mon Sep 17 00:00:00 2001 From: Yongquan Date: Sun, 1 Nov 2026 19:26:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=AE=E4=BB=B6=20tab=20=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=A1=86=E4=B8=8D=E5=86=8D=E9=A2=84=E5=A1=AB=E5=87=BA=E5=8E=82?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E5=80=BC=20(#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈:「邮件通知这个页面里的那些输入框,当我鼠标点完之后,还是没有把里面的内容删除。」 上一轮(#3)只处理了 prefix 和邮件标题两个字段,**漏了 smtp 整段**。 根因同前:config.example.php 的 smtp 段有全套出厂示例值, fb_cfg() 合并后表单把它们当"已填内容"显示,用户点进去得先删一遍。 ## 本次处理 全部改用 fb_form_val():数据库里没设过 = 未自定义 = 显示空,示例只留 placeholder。 | 字段 | 出厂值 | 现在 | |---|---|---| | smtp.host | smtp.example.com | 空,placeholder 给真实可用的 smtp.qiye.aliyun.com | | smtp.user | noreply@example.com | 空 | | smtp.from | noreply@example.com | 空,placeholder「留空则同登录账号」 | | smtp.from_name | 轻反馈 | 空,placeholder 显示当前站点名 | | smtp.port | 465 | 空,placeholder 465 | | smtp.timeout | 15 | 空,placeholder 15 | | notify.cooldown_seconds | 300 | 空,placeholder 300 | ## 顺带修两个真问题 1. **留空不能存 0**:端口/超时/冷却原先 `(int)$post()`,留空会变成 0, 0 端口根本连不上、0 超时立刻断。改成留空即删键,回落 config 默认值。 2. **cooldown 出厂值是 300 不是 60**:我一开始按 60 判,导致 300≠60 被当成 "用户设过"而回显。核对 config.example.php:80 后改正。 ⚠️ 注意 cooldown 的 0 是合法值(表示不限制),所以用「空串」区分"没填", 不能用 0 判断,否则用户真想设 0 会被当成默认。 ## 验证 邮件预填专项 33/33: - 7 个字段 value 全空,示例在 placeholder - 无任何出厂示例值被预填 - 真实值保存后逐项回显(含 0 这个边界) - 留空后回显空 + 数据库键被删 + 生效值回落 465/15/300 - 填 0 被正确保留 回归全绿:全新安装 33/33、安装向导 60/60、老基线 25/25、邮件 tab 专项 37/37。 --- admin.php | 59 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/admin.php b/admin.php index 4816f53..106bd40 100644 --- a/admin.php +++ b/admin.php @@ -357,16 +357,27 @@ function fb_admin_save_settings() { $sp = (string)(isset($_POST['smtp_pass']) ? $_POST['smtp_pass'] : ''); if (trim($sp) !== '') { fb_set_setting('smtp.pass', $sp); } - $smtpPort = (int)$post('smtp.port', 465); - if ($smtpPort <= 0 || $smtpPort > 65535) { $smtpPort = 465; } - fb_set_setting('smtp.port', $smtpPort); + // 端口留空 = 用默认 465。删键回落,不要存成 0(0 端口根本连不上) + $portRaw = trim((string)$post('smtp.port', '')); + if ($portRaw === '') { + fb_unset_setting('smtp.port'); + } else { + $smtpPort = (int)$portRaw; + if ($smtpPort <= 0 || $smtpPort > 65535) { $smtpPort = 465; } + fb_set_setting('smtp.port', $smtpPort); + } $sec = strtolower(trim((string)$post('smtp.secure', 'ssl'))); if (!in_array($sec, ['ssl', 'tls', ''], true)) { $sec = 'ssl'; } fb_set_setting('smtp.secure', $sec); - $smtpTo = (int)$post('smtp.timeout', 15); - fb_set_setting('smtp.timeout', max(5, min(60, $smtpTo))); + // 超时留空 = 用默认 15 + $tmoRaw = trim((string)$post('smtp.timeout', '')); + if ($tmoRaw === '') { + fb_unset_setting('smtp.timeout'); + } else { + fb_set_setting('smtp.timeout', max(5, min(60, (int)$tmoRaw))); + } fb_set_setting('smtp.verify_ssl', (int)(bool)$post('smtp.verify_ssl')); // 没填 from 时用 user 兜底(绝大多数 SMTP 要求两者一致) @@ -387,8 +398,14 @@ function fb_admin_save_settings() { fb_set_setting('notify.enabled', (int)(bool)$post('notify.enabled')); fb_set_setting('notify.on_every_reply', (int)(bool)$post('notify.on_every_reply')); fb_set_setting('notify.admin_new_thread', (int)(bool)$post('notify.admin_new_thread')); - $cd = (int)$post('notify.cooldown_seconds', 60); - fb_set_setting('notify.cooldown_seconds', max(0, min(86400, $cd))); + // 冷却秒数留空 = 用默认 300(config 里的出厂值)。注意 0 是合法值(表示不限制), + // 所以要用「空串」而不是「0」来区分"没填"和"填了 0" + $cdRaw = trim((string)$post('notify.cooldown_seconds', '')); + if ($cdRaw === '') { + fb_unset_setting('notify.cooldown_seconds'); + } else { + fb_set_setting('notify.cooldown_seconds', max(0, min(86400, (int)$cdRaw))); + } fb_set_setting('moderation.enabled', $post('moderation.enabled') ? 1 : 0); @@ -937,12 +954,19 @@ fb_layout_head('管理后台', ['robots' => 'noindex,nofollow']);

邮件通知

'noindex,nofollow']);