做个用户管理系统(18)——注册功能的实现(三)【20201204】

发表于 2020-12-04 23:38:31
阅读 79

介绍

介绍

福哥今天要带着大家开发TFUMS系统的注册功能的处理程序了。这个处理程序会调用模型user的add方法进行创建用户的操作,模型user的add方法会先检查用户名是否被占用了,如果没有被占用才能进一步完成创建用户的操作,否则会报错。

如果处理程序报错的话,会返回错误码和错误信息。这个错误码需要我们定义好,一般情况下错误码一个是7位或者8位的整型数字,这个数字分为两段,前面一段作为模块的计数区域,后面一段是模块可能的错误信息对应的错误码。

错误码信息

错误码信息福哥给放到了Config.inc.php这个配置文件里面了。因为错误码本身不需要写成程序,只要约定俗成就可以了。所以,福哥使用一个块注释将错误码信息框了起来。

/*
 * Error code and message
 *
 * 1001000 ( member )
 * 1001001 - 错误请求
 * 1001002 - 用户名已经存在
 * 1001003 - 创建用户失败
 *
 */

注册表单处理程序

注册表单处理程序就是api/member/register.inc.php这个接口控制器,它主要负责检查输入数据,完成创建用户的操作。

代码

protected function process(){
    $user = new user($this->tfphp);
    $post = $this->tfphp->getRequest()->post;
    $userName = $post->get("user");
    $userPass = $post->get("pass");
    $confirmUserPass = $post->get("confirmPass");

    if($userName == "" || $userPass != $confirmUserPass){

        return $this->tfphp->getResponse()->responseJSON_CM(200, 1001001, "错误请求");
    }
    $ret = $user->add($userName, $userPass);
    switch ($ret){
        case 1:
            return $this->tfphp->getResponse()->responseJSON_CM(200, 1001002, "用户名已经存在");
            break;
        case 2:
            return $this->tfphp->getResponse()->responseJSON_CM(200, 1001003, "创建用户失败");
            break;
    }
    $newId = $user->getLastUserID();

    return $this->tfphp->getResponse()->responseJSON_CM(200, 0, "OK", array(
        'userid'=>$newId,
    ));
}

注册表单JS程序

福哥还对JS程序进行了一些调整,主要是对接处理程序的逻辑,使JS程序可以正确响应处理程序返回的结果。

代码

$('form').form({
    url: "api/member/register",
    method: "post",
    validations: [
        {type:"empty", name:"user", msg:"请填写用户名"},
        {type:"min", value:2, name:"user", msg:"用户名最少2个字"},
        {type:"max", value:20, name:"user", msg:"用户名最多20个字"},
        {type:"re", value:/^[^\`\~\!\@\#\$\%\^\&\*\(\)\[\]\{\}\-\_\+\|\\\:\;\"\'\<\>\,\.\?\/]/, name:"user", msg:"用户名不能以符号开头"},
        {type:"empty", name:"pass", msg:"请填写密码"},
        {type:"min", value:6, name:"pass", msg:"密码最少6个字"},
        {type:"empty", name:"confirmPass", msg:"请填写确认密码"}
    ],
    onValidationManual: function(form){
        if($(form).find('[name="pass"]').val() != $(form).find('[name="confirmPass"]').val()){
            this.postValidationError(form, "pass", "两次输入的密码不一样");

            return false;
        }
    },
    onSuccess: function (d) {
        if(d.errcode == 0){
            document.location = '<% $TFReq->server->BASE_URI %>';
        }
        else{
            $('form').tips({
                text:d.errmsg
            });
        }
    },
    onError: function (d) {
        $('form').tips({
            text:"服务器响应错误"
        });
    },
    onValidationError: function (form, name, msg) {
        $('form').tips({
            text:msg
        });
        $('form').find('[name="'+ name +'"]').focus();
    }
});

331105db6fe38aea.jpg

讲解

注册表单处理程序

首先通过post拿到表单提交的数据,包括用户名、密码、确认密码。

接着检查表单提交的数据的合法性,如果不合法就报一个“错误请求”即可,因为正常情况下JS程序就会检查这些数据了,所以到处理程序这里还会有不合法情况基本都是黑客所为。

尝试使用模型user的add方法创建指定的用户,因为add方法的结果的多态的,所以使用switch判断结果码并提示错误信息。

如果add方法返回0则表示创建用户成功了,直接返回0即可。

注册表单JS程序

在onSuccess方法里判断,如果结果码为0就表示成功了,跳转页面到首页去。否则就是处理错误了,根据结果码和结果信息显示错误提示信息给用户。

总结

今天福哥带着大家完成了注册功能的最后一步,我们通过模型user的add方法实现了用户注册的功能。这是一个范本功能,也就是说后面做其他表单功能的时候就会简单多了,所谓举一反三就是这个道理了。

不过,注册页面福哥还欠大家一个验证码功能没有实现,这个需要用到PHP的GD库了。

下一课,福哥将带着童鞋们制作表单的图片验证码功能。