WHMCS Email Notification模块未保存域名NS至数据库的修复问询
解决WHMCS Email Notification模块不存储域名NS到数据库的问题
核心问题分析
使用Email Notification模块售卖无集成注册商的ccTLD时,模块仅发送NS变更通知但未将NS值写入WHMCS核心数据库(tbldomains表),导致用户在域名详情页看到NS字段为空,引发误解。
解决方案:在email_SaveNameservers函数中添加数据库存储逻辑
WHMCS会自动将域名ID、新NS值等参数传递给email_SaveNameservers函数,只需在该函数中新增代码,将NS值更新到tbldomains表对应的字段即可。
修改后的函数代码示例
function email_SaveNameservers($params) { // 保留模块原有发送通知的代码(比如邮件通知逻辑) // 新增:将NS存储到WHMCS数据库 global $db; // 提取参数中的域名ID和NS值 $domainId = $params['domainid']; $nsData = [ 'ns1' => trim($params['ns1']), 'ns2' => trim($params['ns2']), 'ns3' => isset($params['ns3']) ? trim($params['ns3']) : '', 'ns4' => isset($params['ns4']) ? trim($params['ns4']) : '' ]; // 更新tbldomains表中对应域名的NS记录 $db->update('tbldomains', $nsData, ['id' => $domainId]); // 可选:如果需要为该TLD设置全局默认NS,可添加以下代码(按需启用) // $tld = $params['tld']; // $db->update('tld_nameservers', $nsData, ['tld' => $tld]); }
关键注意事项
- 参数验证:确保
$params数组包含domainid、ns1、ns2等字段(WHMCS调用该函数时会自动传递) - 数据库操作规范:使用WHMCS内置的
$db全局对象执行更新,避免原生SQL语句引发的安全问题(如SQL注入) - 空值处理:对ns3、ns4做空值判断,避免因未提交参数导致数据库字段被写入异常值
- 测试验证:修改后需确认:
- 用户保存NS后,
tbldomains表对应域名的ns1-ns4字段是否正确更新 - 用户在WHMCS前台/后台的域名详情页是否能看到正确的NS信息
- 用户保存NS后,
参考逻辑
该实现对齐WHMCS官方注册商模块的标准逻辑:在处理NS保存请求时,先更新核心数据库记录,再执行通知或第三方同步操作。
内容的提问来源于stack exchange,提问作者Apon Aex
相关产品推荐
相关产品推荐

