织梦会员注册判定代码在哪个文件?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 织梦建站 正文
  1. 前端表单提交页面:处理用户输入和基本的客户端验证。
  2. 后端核心处理页面:执行真正的数据验证、入库和判定。

下面我将详细分解这两个部分,并指出关键的代码位置和判定逻辑。

织梦会员注册判定在哪
(图片来源网络,侵删)

前端表单提交页面

这是用户看到并填写注册信息的页面,它的主要作用是收集用户输入,并进行一些基础的、实时的验证(比如密码长度、两次密码是否一致等),以提升用户体验。

核心文件位置

  • 默认路径/member/reg_new.php
  • 模板文件/member/templets/reg_new.htm

关键判定逻辑

当用户在前端填写完信息并点击“注册”按钮后,会触发JavaScript进行验证,这些验证通常位于 reg_new.php 文件中,或者在 reg_new.htm 模板文件里通过 <script> 标签嵌入。

reg_new.php 文件中,你可以找到类似这样的代码段:

// ... 其他代码 ...
if(empty($dopost))
{
    $dopost = '';
}
// 处理注册提交
if($dopost == "reg")
{
    // 1. 获取并过滤POST提交的数据
    $mid = 0;
    $userid = HtmlReplace($userid, 1);
    $uname = HtmlReplace($uname, 1);
    $pwd = preg_replace('# #', '', $pwd);
    $pwd2 = preg_replace('# #', '', $pwd2);
    $email = HtmlReplace($email, 1);
    $safequestion = isset($safequestion) ? HtmlReplace($safequestion, 1) : '';
    $safeanswer = HtmlReplace($safeanswer, 1);
    $sex = isset($sex) ? intval($sex) : 0;
    $birthday = HtmlReplace($birthday, 1);
    // 2. 核心判定逻辑开始
    // a. 检查用户名是否为空
    if(empty($userid))
    {
        ShowMsg('用户名不能为空!', '-1');
        exit();
    }
    // b. 检查密码是否为空
    if(empty($pwd))
    {
        ShowMsg('密码不能为空!', '-1');
        exit();
    }
    // c. 检查两次输入的密码是否一致
    if($pwd != $pwd2)
    {
        ShowMsg('两次输入的密码不一致!', '-1');
        exit();
    }
    // d. 检查用户名是否已被注册(这是一个非常重要的判定!)
    $row = $dsql->GetOne("SELECT * FROM `#@__member` WHERE userid='$userid' OR uname='$uname' ");
    if(is_array($row))
    {
        ShowMsg('您注册的用户名已经存在,请更换一个!', '-1');
        exit();
    }
    // e. 检查Email格式是否正确,以及是否已被注册
    if(!preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$/", $email))
    {
        ShowMsg('Email格式不正确!', '-1');
        exit();
    }
    $row = $dsql->GetOne("SELECT * FROM `#@__member` WHERE email='$email' ");
    if(is_array($row))
    {
        ShowMsg('您注册的Email已经存在,请更换一个!', '-1');
        exit();
    }
    // f. 检查验证码(如果开启了)
    if($safequestion != '')
    {
        if($safeanswer == '')
        {
            ShowMsg('请输入安全问题的答案!', '-1');
            exit();
        }
    }
    else
    {
        if($vdcode != $safequestion)
        {
            ShowMsg('验证码错误!', '-1');
            exit();
        }
    }
    // ... 其他判定,如用户名规则、邮箱规则等 ...
    // 3. 如果所有判定都通过,则调用会员模型进行注册
    $uid = $uid + 1;
    $jointime = time();
    $joinip = GetIP();
    $pwd = md5($pwd);
    // 准备插入数据库的数据
    $inquery = "INSERT INTO `#@__member`(
        `mid`, `mtype`, `userid`, `pwd`, `uname`, `sex`, `email`,
        `scores`, `matt`, `rank`, `money`, `regdate`, `jointime`,
        `joinip`, `logintime`, `loginip`
        ) VALUES (
        '$uid', '个人', '$userid', '$pwd', '$uname', '$sex', '$email',
        '0', '0', '10', '0', '$jointime', '$jointime',
        '$joinip', '0', ''
        );";
    // 执行插入操作
    if($dsql->ExecuteNoneQuery($inquery))
    {
        // 注册成功后的处理,如登录、跳转等
        // ...
    }
    else
    {
        ShowMsg('注册失败,请联系管理员!', '-1');
        exit();
    }
}
// ... 其他代码 ...

小结:前端的 reg_new.php第一道防线,负责执行绝大多数的“判定”操作,

织梦会员注册判定在哪
(图片来源网络,侵删)
  • 数据非空判定。
  • 密码一致性判定。
  • 用户名唯一性判定(查数据库)。
  • Email唯一性判定(查数据库)。
  • 验证码判定。
  • 用户名/Email格式判定。

后端核心处理页面(涉及更复杂的判定)

除了 reg_new.php,织梦还有一个更底层的会员处理类,它封装了会员注册、登录等核心逻辑,如果你在后台开启了“会员需审核”等功能,那么这里的判定就至关重要。

核心文件位置

  • 核心类文件/include/membermodel.class.php

关键判定逻辑

这个 MemberModel 类是所有会员操作的核心,当你调用它的注册方法时,会执行一系列更深层次的判定。

reg_new.php 中,如果开启了更复杂的会员模型,它可能会调用这个类的方法:

// 在 reg_new.php 的某个位置,可能会看到这样的调用
// $member = new MemberModel();
// $result = $member->addUser($data);

membermodel.class.phpaddUser 或类似方法中,你会找到以下判定:

织梦会员注册判定在哪
(图片来源网络,侵删)
  1. 会员模型类型判定

    织梦支持多种会员模型(如普通会员、企业会员等),这里会判定你提交的数据是否符合当前所选会员模型的要求,比如企业会员需要填写公司名称、营业执照等。

  2. 字段有效性判定

    会检查所有必填字段是否都已填写,并且符合字段的定义(如文本长度、数字类型等)。

  3. 扩展字段的判定

    如果注册表单包含了自定义的扩展字段(如手机号、地址等),这里的逻辑会负责验证这些字段的唯一性、格式等。

  4. 会员审核状态判定

    • 这是最重要的一个后台判定,在数据库的 #@__member 表中,有一个 status 字段。
      • status = -1:禁用
      • status = 0:未审核(需要管理员在后台手动审核)
      • status = 1:正常
    • membermodel.class.php 中,系统会根据后台的全局设置(系统设置 -> 会员设置 -> 新注册用户是否需要审核)来决定新注册用户的 status 值。
    • 如果设置为“需要审核”,那么即使前端注册成功,用户也无法立即登录。后端判定会将其 status 设为 0,并可能发送一封通知邮件给管理员。

数据库表中的判定

所有的判定结果都会反映在数据库里,你需要关注以下几个表:

  1. #@__member (主会员表)

    • userid, uname: 用户名,唯一索引,数据库层面会防止重复。
    • email: 邮箱,唯一索引,数据库层面会防止重复。
    • pwd: 密码,存储的是MD5哈希值。
    • status: 核心状态字段,决定会员是否可用。
  2. #@__member_purview (会员权限表)

    新会员注册成功后,系统会自动为该会员创建一条权限记录。

  3. #@__member_space (会员空间表)

    如果开启了会员空间,会为该会员创建一个空间记录。

位置 文件/表 主要判定功能
前端 /member/reg_new.php 数据非空、格式验证
用户名唯一性判定
Email唯一性判定
密码一致性判定
验证码判定
后端核心 /include/membermodel.class.php 会员模型类型判定
扩展字段验证
会员审核状态判定 (status字段)
调用数据库接口执行最终入库
数据库 #@__member 通过唯一索引强制保证用户名和邮箱的唯一性
通过 status 字段控制会员的可用状态

当你要修改注册判定逻辑时:

  • 修改简单的验证规则(如用户名长度、密码强度):直接编辑 /member/reg_new.php
  • 修改核心业务逻辑(如增加新字段验证、修改审核流程):需要编辑 /include/membermodel.class.php
  • 检查为什么用户名重复还能注册:检查 reg_new.php 里的查询逻辑,以及数据库 #@__member 表的 useriduname 字段是否有正确的唯一索引。
-- 展开阅读全文 --
头像
dede自适应影视模板如何快速搭建?
« 上一篇 今天
c语言volatile含义
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]