thinkphp中create()方法实现简单的用户注册表单验证功能

10 篇文章 0 订阅

一些说明

使用的tp框架是3.2.2
IDE 为phpstorm
集成环境是 xammp
数据库mysql 管理工具是NAVCAT for mysql
使用了smarty模板引擎

tp_user数据表的结构

数据表的结构

用户注册表单的html代码和页面

代码(包括使用了smarty模板引擎输出错误信息$那一块)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<form action="{$smarty.const.__SELF__}" method="post">
    <table>
        <h3>用户注册</h3>
            <tr><span>用户名:</span><input type="text" name="username" value=""></tr><span style="color: red">{$errorinfo.username|default:""}</span><br>
            <tr><span>密  码:</span><input type="text" name="psw" value=""></tr><span style="color: red">{$errorinfo.psw|default:""}</span><br>
            <tr><span>确认密码:</span><input type="text" name="pswok" value=""></tr><span style="color: red">{$errorinfo.pswok|default:""}</span><br>
            <tr><span>邮  箱:</span><input type="text" name="mail" value=""></tr><span style="color: red">{$errorinfo.mail|default:""}</span><br>
            <tr><span>qq号码:</span><input type="text" name="qq" value=""></tr><span style="color: red">{$errorinfo.qq|default:""}</span><br>
            <tr><span>手机号码:</span><input type="text" name="tel" value=""></tr><span style="color: red">{$errorinfo.tel|default:""}</span><br>
            <span>爱好:</span><span style="color: red">{$errorinfo.hobby|default:""}</span><br>
            <tr><input type="checkbox" name="hobby[]" value="1">吃饭1</tr><br>
            <tr><input type="checkbox" name="hobby[]" value="2">睡觉2</tr><br>
            <tr><input type="checkbox" name="hobby[]" value="3">打摆子3</tr><br>

            <tr><input type="submit" value="提交注册"></tr>
    </table>
</form>

</body>
</html>

页面截图

这里写图片描述

目录结构

这里写图片描述

处理过程

  1. 首先创建一个数据库表的对象
    $m = new \Model\UserModel();
    静态定义方式因为必须定义模型类,所以只能用D函数实例化模型或者上面的形式。
  2. 使用create方法创建数据对象,此时对象是保存在内存中的,并没有实际的写入到数据库中。并且以数组的形式保存。create方法执行的同时会自动触发表单验证和其他一些验证方法。
    $info = $m->create();
  3. 使用静态方式验证:在模型类里面通过$_validate属性定义验证规则
    代码如下:(具体的验证说明可以参考开发手册“模型”目录下的“自动验证”那一部分)
namespace Model;
use Think\Model;
class UserModel extends Model
{
    // 自动验证定义
    //array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)
    protected $patchValidate = true;//打开批处理验证
    protected $_validate = array(
        //对用户名验证,不能为空
        array('username','require',"username is null!"),
        array('username','',"username is exist!",0,'unique',1),
        array('psw','require','psw is null!'),
        array('pswok','require','pswok is null!'),
        array('pswok','psw','psw and pswok  is error!',0,'confirm'),
        array('mail','email','EMAIL is error'),
        //array('qq','require',"qq number  is null!"),
        array('qq','number','qq number  is error',2),
        array('qq','5,12','qq length is error',2,'length'),

        array('hobby','check_hobby',"hobby num must over 2",0,'callback')
    );
    function  check_hobby($arg){
        $len = count($arg);
        if($len<2){
            return false;//会自动输出验证的错误信息
        }
        return true;
    }
}

4 将错误信息显示到前台页面上去
我们通过getError()方法获取到错误信息,再通过assign()方法将错误信息保存起来$this->assign("errorinfo",$m->getError());。在前端通过{$errorinfo.username}来将错误信息输出。<span style="color: red">{$errorinfo.username|default:""}</span>这里使用了default设置默认值,防止无值情况显示错误。

下面是UserController下的register方法的完整代码:

function register(){
        $m = new \Model\UserModel();
        if(!empty($_POST)){
            //dump($_POST);
            $info = $m->create();  //收集$_POST的数据并返回,同时触发表单自动验证etc.
            if($info){
                //dump($info);
                $info['hobby'] = implode(',',$info['hobby']);//将数组信息转换成字符串,这样才可以用来插入到数据库中
                //dump($info);
                if($m->add($info)){
                    $this->redirect("Index/index");
                    //dump($info);
                }
            }else{
                //dump($m->getDbError());
                //dump($m->getError());
                $this->assign("errorinfo",$m->getError());
            }
        }
        $this->display();
    }

最后

自动验证包括静态方式和动态方式。
1. 静态方式:在模型类里面通过$_validate属性定义验证规则。
2. 动态方式:使用模型类的validate方法动态创建自动验证规则
这里只对静态方式简单的使用。更多的可以参考使用手册

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值