yii用户注册表单验证实例


Posted in PHP onDecember 26, 2015

本文实例讲述了yii用户注册表单验证实现方法。分享给大家供大家参考,具体如下:

视图层:register.php

<?php
//使用小物件生成form元素
$form=$this->beginWidget('CActiveForm');
?>
<!--用户名-->
<?php echo $form->labelEx($model,'username');?>
<?php echo $form->textField($model,'username');?>
<?php echo $form->error($model,'username');?>
<br>
<!--密码-->
<?php echo $form->labelEx($model,'password');?>
<?php echo $form->passwordField($model,'password');?>
<?php echo $form->error($model,'password');?>
<br>
<!--确认密码-->
<?php echo $form->labelEx($model,'password2');?>
<?php echo $form->passwordField($model,'password2');?>
<?php echo $form->error($model,'password2');?>
<br>
<!--邮箱-->
<?php echo $form->labelEx($model,'email');?>
<?php echo $form->textField($model,'email');?>
<?php echo $form->error($model,'email');?>
<br>
<!--性别-->
<?php echo $form->labelEx($model,'sex');?>
<?php echo $form->radioButtonList($model,'sex',array(1=>'男',2=>'女'),array("separator"=>" "));?>
<br>
<!--年级-->
<?php echo $form->labelEx($model,'grade');?>
<?php echo $form->dropDownList($model,'grade',array(0=>"--请选择--",1=>"2010级",2=>"2011级",3=>"2012级"));?>
<?php echo $form->error($model,'grade');?>
<br>
<?php echo $form->labelEx($model,'hobby');?>
<?php echo $form->checkBoxList($model,'hobby',array(1=>"篮球",2=>"足球",3=>"排球"),array("separator"=>" "));?>
<?php echo $form->error($model,'hobby');?>
<!--提交-->
<?php echo CHtml::submitButton('提交');?>
<?php
$this->endWidget();
?>

model层的代码如下:User.php

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
class User extends CActiveRecord{
  //创建一个模型的对象 静态
  public $password2;//非数据库的字段,但是在view中需要用到
  public static function model($className = __CLASS__) {
    return parent::model($className);
  }
  //返回当前数据表的名字
  public function tableName() {
    //parent::tableName();
    return '{{user}}';//这样写可以省略前缀
  }
  //设置标签的显示名字
  public function attributeLabels() {
    return array(
      "username"=>"姓名",
      "password"=>"密码",
      "password2"=>"确认密码",
      "email"=>"邮箱",
      "sex"=>"性别",
      "grade"=>"年级",
      "hobby"=>"爱好",
    );
  }
  //验证表单域
  public function rules() {
    return array(
      array("username","required","message"=>"用户名不能为空"),
      array("password","required","message"=>"密码不能为空"),
      //验证密码和确认密码
      array("password2","compare","compareAttribute"=>"password","message"=>"两次密码不一致"),
      //验证邮箱
      array("email","email","allowEmpty"=>false,"message"=>"邮箱格式不正确"),
      //验证年级
      array("grade","in","range"=>array(1,2,3),"message"=>"请选择年级"),
      //验证爱好,使用自定义规则
      array("hobby","checkHobby"),
    );
  }
  //验证爱好
  function checkHobby(){
    $this->hobby;
    $len= strlen($this->hobby);
    if($len<3){
      $this->addError("hobby","爱好至少为2个以上");
    }
  }
}
?>

control层的代码如下:

//信息添加 添加显示页面和添加处理使用同一个方法
  public function actionAdd(){
    $user=new User();
    if(isset($_POST['User'])){
//      foreach ($_POST['User'] as $k =>$v){
//        $user->$k=$v;
//      }
      if(is_array($_POST['User']['hobby']))
        $_POST['User']['hobby']= implode(",", $_POST['User']['hobby']);
      //print_r($_POST['User']);
      $user->attributes=$_POST['User'];
      if($user->save()){
        echo 'success';
      }else{
        echo 'error';
      }
    }
    $this->renderPartial("new",array("model"=>$user));
}

其中,表单的自动验证,在model层实现,表单元素的名称与数据库中的字段名字一致,可设置错误信息进行提示。

希望本文所述对大家基于yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
PHP分页显示制作详细讲解
Nov 19 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
PHP 错误处理机制
Jul 06 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 PHP
php session 写入数据库
Feb 13 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 PHP
PHP7之Mongodb API使用详解
Dec 26 #PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 #PHP
thinkPHP下ueditor的使用方法详解
Dec 26 #PHP
thinkPHP中分页用法实例分析
Dec 26 #PHP
thinkPHP中验证码的简单使用方法
Dec 26 #PHP
分享50个提高PHP执行效率的技巧
Dec 26 #PHP
PHP获取二维数组中某一列的值集合
Dec 25 #PHP
You might like
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
PHP中实现中文字串截取无乱码的解决方法
2018/05/29 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
js防止表单重复提交实现代码
2012/09/05 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
python getopt 参数处理小示例
2009/06/09 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
Linux面试题LINUX系统类
2015/11/25 面试题
新郎婚宴答谢词
2014/01/19 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
节电标语大全
2014/06/23 职场文书
工伤调解协议书
2016/03/21 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis