tp框架表单验证

之前的表单验证都是用js写的,这里也可以使用tp框架的验证。但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降。 

  自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证。验证的代码要写在模型层即Model里面。

  数据验证有两种方式:

  1. 静态方式:在模型类里面通过$_validate属性定义验证规则。静态方式定义好以后其它地方都可以使用。
  2. 动态方式:使用模型类的validate方法动态创建自动验证规则。动态方式比较灵活,哪里使用就写,其它地方不可以使用。

无论是什么方式,验证规则的定义是统一的规则,定义格式为:

array(//验证规则是一个二维数组,里面是以为数组,每个一维数组是一个验证。括号里面的信息都是需要写的。

array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),//1.验证字段(必须的):需要验证哪个字段;2.验证规则(必须的):使用什么规则验证;3.错误提示(必须的):验证失败后提示的信息;4.验证条件(可选的):用什么条件来验证,是可选的条件;5.附加规则(可选的):附加的一些规则;6.验证时间(可选的):比如往数据库里写的时候验证,修改的时候验证;

array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),

......

);

一、静态验证

1.先在Application\Home\Controller里面写方法

<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller
{
    public function add()
    {
        if(empty($_POST))//如果post数组为空
        {
            $this->show();//显示add.html页面
        }
        else//如果post数组不为空
        {
            $y = D("YongHu");//造YongHu表的对象
            $r = $y->create();//自动收集表单,收集表单的时候自动验证。

            if($r)//验证通过返回true
            {
                $y->add();//验证通过后将收集的表单加到表格里面。
            }
            else//如果验证失败
            {
                die($y->getError());//表示输出错误信息并且退出程序
            }
        }
    }
}

2.在thinkphp\Application\Home\View\Test写上对应的html文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">

</style>
</head>

<body>
    <form action="__ACTION__" method="post">
        <div>用户名:<input type="text" name="uid" /></div>
        <div>密码:<input type="text" name="pwd" /></div>
        <div>确认密码:<input type="text" name="pwd1" /></div>
        <div>姓名:<input type="text" name="name" /></div>
        <div>邮箱:<input type="text" name="email" /></div>
        <div>年龄:<input type="text" name="age" /></div>
        <div><input type="submit" value="提交" /></div>
    </form>
</body>
<script type="text/javascript">

</script>
</html>

3.在thinkphp\Application\Home\Model里面写模型文件,也就是验证的方法。

<?php
namespace Home\Model;
use Think\Model;
class YongHuModel extends Model
{
    protected $tablePrefix = "";//表示表格前缀为空,就是没有前缀。
    protected $trueTableName = "yonghu";//如果不写这句话,会自动去找Yong_Hu这张表,这是默认的表格的命名。这里要写上实际的表格的名字。
    protected $_validate = array(
         array("uid","require","用户名不能为空",0),//对用户名加非空验证。手册里面没有非空的验证,自己写。1.字段名为uid;2.require表示字段必须,写在这里意思就是不能为空;3.提示信息;4.self::EXISTS_VALIDATE 或者0 存在字段就验证(默认),这里写0代表的就是存在字段就去验证。
        array("pwd",‘pwd1‘,"两次输入的密码不一致",0,"confirm"), //验证2此输入的密码是否相同.confirm表示验证表单中的两个字段是否相同,定义的验证规则是一个字段名,所以第二个字段名写第2此输入密码的密码框的name值pwd1
        array("email","email","邮箱格式输入不正确"),//验证邮箱书写是否正确。email是tp框架里面自带的验证方法,代表的是邮箱验证。
        array("name","/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/","身份证号码不正确",0,"regex"),//身份证号验证。regex表示正则表达式,第2项验证规则里面就需要写上身份证号的正则表达式。
        array("age","18,50","年龄不在范围内",0,"between"),//范围验证,用in、between都可以,这里使用between。如果在输入信息的时候出现大于1个错误,会按照这里的顺序输出第一个错误信息。
    );
}

二、动态验证

1.在Application\Home\Controller里面写方法

<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller
{
    public function add()
    {
        if(empty($_POST))//如果post数组为空
        {
            $this->show();//显示add.html页面
        }
        else//如果post数组不为空
        {
            $y = D("YongHu");
            $arr = array(//动态验证就是需要在哪验证就在哪里写验证方法。
                array("uid","require","用户名不能为空",0),//讲验证的方法写在方法里面
            );
            if($y->validate($arr)->create())//这里要先调用validate方法,然后将写的验证方法放到validate里面
            {
                $y->add();
            }
            else
            {
                die($y->getError());
            }
        }
    }
}

2.在thinkphp\Application\Home\View\Test写上对应的html文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">

</style>
</head>

<body>
    <form action="__ACTION__" method="post">
        <div>用户名:<input type="text" name="uid" /></div>
        <div>密码:<input type="text" name="pwd" /></div>
        <div>确认密码:<input type="text" name="pwd1" /></div>
        <div>姓名:<input type="text" name="name" /></div>
        <div>邮箱:<input type="text" name="email" /></div>
        <div>年龄:<input type="text" name="age" /></div>
        <div><input type="submit" value="提交" /></div>
    </form>
</body>
<script type="text/javascript">

</script>
</html>

3.在thinkphp\Application\Home\Model里面写模型文件。

<?php
namespace Home\Model;
use Think\Model;
class YongHuModel extends Model
{
    protected $tablePrefix = "";//表示表格前缀为空,就是没有前缀。
    protected $trueTableName = "yonghu";//如果不写这句话,会自动去找Yong_Hu这张表,这是默认的表格的命名。这里要写上实际的表格的名字。
}

三、Ajax做验证

tp动态验证和静态验证都有一个很大的缺点,那就是在提示错误信息的时候都要跳转到其它页面显示出错误信息。如果需要在当前页面显示出错误信息,就需要用ajax做验证。

1.写显示和ajax处理方法

<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller
{

    public function tianjia()//添加方法,用来显示页面
    {
        $this->show();
    }

    public function test()//ajax处理方法
    {
        $y = D("YongHu");
        $arr = array(//动态验证就是需要在哪验证就在哪里写验证方法。
                array("uid","require","用户名不能为空"),//讲验证的方法写在方法里面
            );
        if($y->validate($arr)->create())//这里要先调用validate方法,然后将写的验证方法放到validate里面
            {
                $this->ajaxReturn("通过验证","eval");
            }
            else
            {
                $this->ajaxReturn($y->getError(),"eval");
            }
    }
}

2.写显示页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script>
<title>无标题文档</title>
<style type="text/css">

</style>
</head>

<body>
        <div>用户名:<input id="uid" type="text" name="uid" /></div>

        <div><input id="btn" type="button" value="验证" /></div>
</body>
<script type="text/javascript">
    $("#btn").click(function(){
            var uid = $("#uid").val();

            $.ajax({
                url:"__CONTROLLER__/test",
                data:{uid:uid},
                type:"POST",
                dataType:"TEXT",
                success: function(data){
                        alert(data);
                    }
                })
        })
</script>

</html>

3.显示页面

时间: 2024-10-22 18:05:12

tp框架表单验证的相关文章

tp框架表单验证 及ajax

之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则.静态方式定义好以后其它地方都可以使用. 动态方式:使用模型类的validate方法动态创建自动验证规

TP框架---表单验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册"自动验证"一章. 一.静态验证 (1)在Home/Controller/路径下新建Index控制器.IndexController IndexController.class.php页面 注意:静态定义方式因为必须定义模型类,所以只能用D函数实例化模型     create方法是对表单提交的POST数据进行自动验证 <

ThinkPHP框架表单验证

对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则. 动态方式:使用模型类的validate方法动态创建自动验证规则. 无

php--yii框架表单验证

在视图层利用表单小部件生成表单时,field只能是数据库中存在的, 例如:use yii\helpers\Html; use yii\widgets\ActiveForm; use yii\captcha\Captcha; 'sign-form', 'options'=>['action'=>'usermessage/signform', 'method'=>'post', 'enctype'=>'multipart/form-data']]); ?> field($mode

laravel框架——表单验证

创建路由 Route::get('test','[email protected]'); Route::post('tosubmit','[email protected]'); 在控制器中编辑代码 class VerController extends Controller { //表单页面 public function index() { return view('from.from'); } //表单提交验证 //这种是用自带的Request进行验证 // public function

Laravel 5框架表单验证代码

在命令行下运行 php artisan 可以看到一个选项 make:request,新建一个form request类.在命令行执行 php artisan make:request CreateArticleRequest 生成的文件在 app/http/requests 目录下.在文件中我们可以看到两个方法: public function authorize() { return false; }   public function rules() { return [  // ]; }

php---tp框架---表单验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册"自动验证"一章. 一.静态验证 (1)在Ceshi/Controller/路径下新建Yanzheng控制器. YanzhengController.class.php页面 注意:静态定义方式因为必须定义模型类,所以只能用D函数实例化模型     create方法是对表单提交的POST数据进行自动验证 <?php na

TP表单验证

[表单验证] javascript jquery 在服务器端通过tp框架实现表单验证 用户名.密码.重复密码.邮箱.qq.手机号码.爱好.学历 具体步骤: 制作表单 表单form数据通过create()方法收集(验证功能要求我们必须通过create()方法收集数据) 自定义数据model模型类实现具体验证规则

[JavaWeb基础] 015.Struts2 表单验证框架

在web开发的过程中,我们经常要用到一些填写表单的操作,我们一般都要在提交表单信息的时候对表单的内容进行验证,struts2给我们提供了简单的实现接口,让我们可以很容易的对表单进行验证.下面讲解下最传统的方法配置表单验证框架,还有更简单明了的就是利用注解,这里就不解释了. 1.首先我们要在要进行配置的Action的同级目录下,新建一个.xml文件,命名格式为:ActionClassName-validation.xml. 例如我的Action类名为:RegisterAction   那么xml名