这个知识点,就可以通过“登录”和“注册”的页面来学习这个知识点了
首先先做一个“登录”功能
一、登录功能(父类)
(1)登录的控制器
在我的控制器文件夹中新建一个登陆控制器
我的路径是这样的:

然后里面要书写正确才可以,其中要有命名空间,还有继承父类的控制器

<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller
{public function denglu(){if(empty($_POST))   //判断传过来的值是不是空的{$this->show();   //空的显示页面}else{}}
}

(2)编写登录的页面 

我的这个页面我放在了

这个登录页面都是写过很多遍了,就不解释了,这里用的还是表单元素

<form action="__ACTION__" method="post"><div>用户名:<input type="text" name="uid" /></div><br /><div>密 码:<input type="password" name="pwd" /></div><input type="submit" value="登录" /></form>

 看下基本的运行页面效果!!注意浏览器的地址栏的书写:http://localhost/tp/index.php/Home/Login/denglu

(3)补充php页面中的否则语句

else
{$u = M("user");  //造表  $uid = $_POST["uid"];  //接收传出过来得用户名$pwd = $_POST["pwd"];  //接收传过来的密码$attr = $u->find($uid);  //查找一条数据if($attr["password"]==$pwd && !empty($pwd))  //判断密码是不是相等还有是不是空的{session("uid",$uid);  //session存住用户名$this->success('登录成功!',U('Home/shouye'));   //跳转页面("提示信息","跳转的页面","时间")}else{$this->error("登录失败!");  }
}

 

运行看下结果:

1)输入账号和密码,密码是错误的时

2)输入账号和密码,密码是正确的时

3)时间已过,跳转到首页面

这样有个bug就是,这个首页即使没有登录也可以查看这个页面,所以我们要加一个条件,来判断这个没有登录时,不能走这个页面,也就是返回登录页面,但是每个方法都要判断就会显得很繁琐,又不能直接修改原控制器文件,所以,可以在他们之间在建一个控制器文件,作为他们的桥梁

(4)搭建的他们之间的桥梁

(4.1)新建的一个控制器类文件

<?php
namespace Home\Controller;
use Think\Controller;
class FuController extends Controller
{//如果一个类要实例化,要使用一个构造方法__construct()public function __construct(){//调用父类的构造:执行父类之后再用自己的parent::__construct(); //判断session是否存在if(!session('?uid')){$this->success('请先登录!',U('Login/denglu'));exit;}  }
}

(4.2)这样之后,将除了Login的控制器外,其他的都要修改成这桥梁控制器类 

 

namespace Home\Controller;
use Home\Controller\FuController;  //使用桥梁的控制器类
class HomeController extends FuController  //继承的就不是原类了,而是写的控制器类文件
{
}

 运行之后查看效果,直接登录首页的页面,会出现下面的页面

                      

二、注册功能(表单验证)

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

其中有两种验证:静态验证和动态验证

(1)静态验证

注意:静态定义方式因为必须定义模型类,所以只能用D函数实例化模型

1.我们可以在IndexController.class.php类文件中新建一个方法

public function zhuce()
{if(empty($_POST)){$this->show();  }  else{//使用后面的验证信息        }
}

  

2.在View文件中新建一个Index文件夹,新建注册的显示页面

注意:如果使用收集表单元素,里面的name要和数据库中的保持一致

<form action="__ACTION__" method="post"><div>用户名:<input type="text" name="uid" /></div><br /><div>密 码:<input type="password" name="pwd" /></div><br /><div>确认密码:<input type="password" name="pwd" /></div><br /><div>姓名:<input type="password" name="amen" /></div><br /><div>性别:<input type="password" name="pwd" /></div><br /><div>年龄:<input type="password" name="pwd" /></div><input type="submit" value="注册" /></form>

 看下运行效果

3.添加表单验证

(1)静态验证

注意:在模型类里面通过$_validate属性定义验证规则。

这里要新建一个模板文件UserModel.class,记得要在Model文件夹中

<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model
{//在表单验证的时候,要用这个定义$_validateprotected $_validate = array(    array('验证字段','验证规则','验证码必须!'),   //这就是验证的条件);
}

 

再写验证的时候要记住一下几点:

(1)验证字段 (必须)

需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的情况下,验证字段是可以随意设置的,例如expire有效期规则是和表单字段无关的。如果定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。

(2)验证规则 (必须)

要进行验证的规则,需要结合附加规则,如果在使用正则验证的附加规则情况下,系统还内置了一些常用正则验证的规则,可以直接作为验证规则使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。

(3)提示信息 (必须)

用于验证失败后的提示信息定义

(4)验证条件 (可选)

包含下面几种情况:

  • self::EXISTS_VALIDATE 或者0 存在字段就验证(默认)
  • self::MUST_VALIDATE 或者1 必须验证
  • self::VALUE_VALIDATE或者2 值不为空的时候验证
(5)附加规则 (可选)

配合验证规则使用,包括下面一些规则:

(6)验证时间(可选)
  • self::MODEL_INSERT或者1新增数据时候验证
  • self::MODEL_UPDATE或者2编辑数据时候验证
  • self::MODEL_BOTH或者3全部情况下验证(默认)

这里的验证时间需要注意,并非只有这三种情况,你可以根据业务需要增加其他的验证时间。

4.我们可以让上面的注册页面再一些时候显示验证信息

  4.1用户名为空时,提示信息

protected $_validate = array(    array('uid','require','用户名不能为空!'),   //判断用户名是不是空的
);

 4.2怎么使用这个验证信息,我们要在IndexController.class.php类文件中编写 

 

public function zhuce()
{if(empty($_POST)){$this->show();  }else{$u = D("user");  //造模型对象$r = $u->create();  //自动验证字段if($r){//$u->add();   //添加到数据库}else{exit($u->getError());  //显示错误信息}}
}

4.3运行可以看下结果

这是静态验证,不能出现在文本框的后面,这样可以用动态验证,其他的条件可以根据注意的那几条自己进行练习

(2)动态验证

注意:使用模型类的validate方法动态创建自动验证规则。

总的来说就是要用ajax来写,给想要显示验证的上添加一个id,便于传值;而且也要引入jQuery文件

<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script>

 主体中的内容

<div>用户名:<input type="text" name="uid" id="uid" /></div>  <!--给个id名-->
<span id="tishi"></span>  <!--显示提示的地方-->

 js的编写

<script type="text/javascript">$("#uid").blur(function(){var uid = $(this).val();$.ajax({url:"__ACTION__",data:{uid:uid},type:"POST",dataType:"TEXT",success: function(data){//这里是验证的返回结果}})})
</script>

 方法中的写法(完整的) 

 

public function yanzheng()
{if(empty($_POST)){$this->show();  }else{//定义验证规则$rules = array(    array('uid','require','用户名不能为空!'),);$u = D("user");if($u->validate($rules)->create()){$this->ajaxReturn("OK","eval");  //如果验证成功返回OK}else{$this->ajaxReturn($u->getError(),"eval");  //如果不成功,就返回提示信息   }}
}

 最后的显示页面中的内容

success: function(data){//验证通过后的结果if(data=="OK"){$("#tishi").html("通过");   //提示信息$("#tishi").css("color","green");   //提示的颜色}else{ $("#tishi").html(data);  //提示的验证信息$("#tishi").css("color","red");    }
}

运行看下提示结果

             

  

 

 

  

 

 

  

转载于:https://www.cnblogs.com/douchenchen/p/7145617.html

ThinkPhp框架:父类及表单验证相关推荐

  1. 掌财社:html5中AmazeUI框架中JS表单验证实战案例展示!

    今天和大家分享个有关于"html5中AmazeUI框架中JS表单验证实战案例展示!"这方面的相关内容知识,让大家对于html5中AmazeUI框架也可以有所了解! 1.需求 做一个 ...

  2. thinkphp表单验证

    thinkphp框架提供了表单验证功能,分为静态验证和动态验证. 一.静态验证: 1.首先我们在Admin的IndexController.class.php下写一个方法yanzheng,然后用cre ...

  3. 框架生成的HTML修改,Django框架form表单验证 修改html标签的样式

    经过前面的学习,我们大致可以知道CharField.EmailField等等以Field结尾的方法,只能帮助我们对用户发来的信息做验证,不能生成html标签.字段本身自己虽然只做验证,但是我们可以通过 ...

  4. Django之Form表单验证组件Tyrion

    Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Tyrion主要有两大重要动能: 表单 ...

  5. EasyUI之表单验证

      当我们开发一个管理类项目的时候,EasyUI是我常用的一个jquery框架,而表单验证显然是我们必须要实现的功能,而使用基于EasyUI的验证功能就比较简便了,本文来介绍下具体的用法 EasyUI ...

  6. TP框架表单验证 【包含ajax方法】

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

  7. Validform表单验证框架详解

    Validform是另外一种表单验证框架,也是基于jQuery框架,用法比较灵活. 这里使用该框架的版本号为: Validform_v5.3.2 官网:http://validform.rjboy.c ...

  8. 学习js,尝试写一个表单验证框架(1)-规划

    斗胆放到首页来,如果不合适的话就删了吧,谢谢 其实这个框架也已经写了一点了,但是越写越乱越没把握,最终决定写成博客的形式,强迫自己慢下步调,一点点仔细地规划,设计,思考,期间也一定会遇到不少问题,还请 ...

  9. 栈 php 验证格式,表单验证 - 《Biny - 高性能轻量级PHP框架》 - 书栈网 · BookStack...

    表单验证 框架提供了一套完整的表单验证解决方案,适用于绝大多数场景. 表单验证支持所有类型的验证以及自定义方法 简单示例:namespaceapp\form; usebiny\lib\Form; /* ...

最新文章

  1. 九度 题目1044:Pre-Post
  2. 并发编程下的性能定律(翻译)
  3. phpcms分页查询
  4. python爬虫为什么xpath路径正确却检索不到内容_中国知网爬虫
  5. Pandas的学习(pandas中删除行以及重排(重建)行索引)
  6. git ssh创建分支_【ssh简单版git-server 1】自建git-server
  7. MATLAB 长度和像素_Matlab中短时傅里叶变换 spectrogram和stft的用法
  8. 关于MacBook Pro 15 usb连接iPhone反复重连的解决办法
  9. laravel报错:MassAssignmentException
  10. C# fmpeg加虹软的人脸识别demo
  11. python制作病毒_python做病毒
  12. 批量语音转文字python
  13. Python xlsx转xls xls文件修复
  14. 占坑:fullpage.js 在edge浏览器上上下移动鼠标(不滚动滚轮)会翻页的问题
  15. 我为你写下悲伤的文字:伤感心情随笔
  16. 二分法查找(dichotomy)--python实现
  17. 知识点2:js(javascript)中检测是否为数组的两种方法【翻转数组案例】
  18. 网络系统高可用是几个9?
  19. 豪宅成交频频,上海楼价再创新高
  20. Linux sed实战(MarkDown版本)

热门文章

  1. 在linux系统下安装jdk
  2. eclipse Jsp 自创建tags问题
  3. 理解《Deblurring Text Images via L0-Regularized Intensity and Gradient Prior》
  4. 54-locate 简明笔记
  5. Swift-EasingAnimation
  6. 236 Lowest Common Ancestor of a Binary Tree
  7. sql 2008 每次打开一个表都要登录_如何实现一个简易的orm
  8. ControllerShutdownRequest分析
  9. (20)Xilinx FPGA型号(FPGA不积跬步101)
  10. (80)FPGA面试题-请画出序列“1101 “检测状态转移图