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 相关文章推荐
PHP截取中文字符串的问题
Jul 12 PHP
PHP的开合式多级菜单程序
Oct 09 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
PHP重定向的3种方式
Mar 07 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
PHP实用小技巧之调用录像的方法
Dec 05 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
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
Python探索之SocketServer详解
2017/10/28 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
Python 变量的创建过程详解
2019/09/02 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
C#基础面试题
2016/10/17 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
QA工程师岗位职责
2013/11/20 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
西柏坡导游词
2015/02/05 职场文书
数据库连接池
2021/04/06 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL