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

一些说明

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

tp_user数据表的结构

thinkphp中create()方法实现简单的用户注册表单验证功能_第1张图片

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

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


<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">吃饭1tr><br>
            <tr><input type="checkbox" name="hobby[]" value="2">睡觉2tr><br>
            <tr><input type="checkbox" name="hobby[]" value="3">打摆子3tr><br>

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

body>
html>

页面截图

thinkphp中create()方法实现简单的用户注册表单验证功能_第2张图片

目录结构

thinkphp中create()方法实现简单的用户注册表单验证功能_第3张图片

处理过程

  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}来将错误信息输出。{$errorinfo.username|default:""}这里使用了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方法动态创建自动验证规则
这里只对静态方式简单的使用。更多的可以参考使用手册

你可能感兴趣的:(tp学习,php)