北京过客 2011-04-23 10:40:40 21815次浏览 22条回复 0 0 0

注册表单怎么样验证两次输入的密码是否一致?

做了个注册表单,想让它自己验证两次输入的密码是否一样

请问题model和view里各要怎么写呢

  • 回复于 2011-04-23 10:43 举报

    可以 去看看blog这本书 有讲

  • 回复于 2011-04-23 10:46 举报
    class RegForm extends CFormModel
    {
      public $password;
      public $password2;
      public function rules()
      {
        return array(
          array('password', 'compare', 'compareAttribute'=>'password2'),
        );
      }
    
    /**
    * Declares attribute labels.
    */
    public function attributeLabels()
    {
      return array(
        'password' => '注册密码',
        'password2' => '再次输入密码',
      );
    }
    }
    
    
    表单里改
    
  • 回复于 2011-04-23 10:46 举报

    嗯,北京过客说的没错!我也是这样写的。

    2 条回复
    回复于 2018-03-23 09:15 回复

    这样写前台使用ajax通过getError方法 / $model->getErrors('password2')[0] / 为何还是能获取到---确认密码必须等于“密码”---这个返回值,这个方法不应该是错误之后才把错误信息放数组里吗

    回复于 2018-03-23 12:07 回复

    知道了,ajax只发送了password2,没有把password一起发送过去,所以才会出现这个问题

  • 回复于 2011-04-23 10:55 举报

    先在model里定义一个public repeatPassword然后在rules里定义规则

    array('password', 'compare', 'compareAttribute'=>'repeatPassword', 'on'=>'register'),
    view:
    <div class="row">
    <?php echo $form->labelEx($model,'password'); ?>
    <?php echo $form->passwordField($model,'password',array('size'=>60,'maxlength'=>256)); ?>
    <?php echo $form->error($model,'password'); ?>
    </div>
    <div class="row">
    <?php echo $form->label($model,'repeatPassword'); ?>
    <?php echo $form->passwordField($model,'repeatPassword',array('size'=>60,'maxlength'=>256)); ?>
    <?php echo $form->error($model,'repeatPassword'); ?>
    </div>
    
  • 回复于 2011-04-23 10:57 举报

    最后action里

    $user=new User('register')
    
  • 回复于 2011-04-23 11:03 举报

    落叶V5

  • 回复于 2011-04-23 11:47 举报

    我一提交注册表单怎么就出来:

    array(1) { ["password"]=> array(1) { [0]=> string(23) "密码 必须被重复." } }
    
  • 回复于 2011-04-23 11:52 举报

    你是不是在哪里有输出?

  • 回复于 2011-04-23 15:06 举报

    我设置了一个一出错就输出,结果就出来这个了。

  • 回复于 2011-04-24 12:07 举报

    可以在RULES里的message选项填加就行了

  • 回复于 2011-08-02 14:47 举报

    学习了,呵呵

  • 回复于 2011-08-04 20:59 举报

    过客同志,这里不应该用FormModel,应该用ActiveRecord

  • 回复于 2012-02-08 21:57 举报

    应该是这样才对。

    array('confirmPassword', 'compare', 'compareAttribute'=>'password','on'=>'register'),
    
  • 回复于 2012-02-17 16:03 举报

    use compare vlidator

  • 回复于 2012-02-17 16:44 举报
    public function rules()
    {
      return array(
      array('confirmPassword', 'compare', 'compareAttribute'=>'password','on'=>'register','message'=>'密码不一致'),
      );
    }
    
  • 回复于 2012-09-13 11:23 举报

    真牛人!!佩服佩服。

  • 回复于 2012-09-13 15:56 举报

    学习了,落叶v5

  • 回复于 2013-01-17 22:11 举报

    有个问题阿:
    M ActiveRecord

    array('confirmPassword', 'compare', 'compareAttribute'=>'password','on'=>'register','message'=>'密码不一致'),
    

    V

    <?php echo CHtml::textField('pay_repeat'); ?>
    

    这里的重复密码不需要放进数据库,

    <?php echo $form->textField($model,'pay_repeat'); ?>
    

    会报错

    CFormModel
    加,也验证不了,有什么好方法吗?

  • 回复于 2013-01-21 04:46 举报

    希望牛人继续研究,分享

  • 回复于 2016-11-24 10:17 举报

    rules还要加一行
    ['password2', 'required']

您需要登录后才可以回复。登录 | 立即注册