当你不强制手机、把手机字段留空时,$phno 就是空字符串 '',SQL 变成:select count(*) from ... where phno=''
而你的会员库里早期大量会员的手机号本来就是空的(因为以前也不强制手机),于是 where phno='' 会统计到所有这些空记录,
$num 很大,$num >= regphonly 必然成立 → 直接报"此手机号码已被注册"。
这就是你"总是"提示的原因,跟用户填什么手机号无关(只要留空就中招)。
解决方案
方案 A(推荐,不改代码) 后台把 regphonly 设为 0(不限制手机号注册数):
路径:帝国CMS后台 → 系统 → 系统设置 → 参数设置 → 切到「会员设置」标签 → 找 "一个手机号最多允许注册帐号数",改为 0。
这样注册流程不再做任何手机唯一性校验,空手机也能正常注册。代价是同一手机号可以无限注册(既然你本来就允许不填手机,这一般无影响)。
方案 B(保留手机限制功能,又允许部分人不填手机) 需要改内核 member_registerfun.php 第 172 行,把条件改成 if($pr['regphonly'] && $phno),即"仅当手机号非空时才做唯一性校验"。