проверка пароля с подтверждением

Есть форма для регистрации пользователя и  в ней  поля  для  пароля  и  его подтверждения

<div class="simple">

<?php echo CHtml::activeLabelEx($userlist,'psw'); ?>

<?php echo CHtml::activePasswordField($userlist,'psw',array('size'=>40,'maxlength'=>40)); ?>

</div>

<div class="simple">

<?php echo CHtml::label('Подтверждение пароля','cpsw'); ?>

<?php echo CHtml::passwordField('cpsw','',array('size'=>40,'maxlength'=>40)); ?>

</div>

Поле psw -  поле  базы  и оно описано в моделе AR

cpsw -  его нет в базе и  данное  поле  ввода  для  того чтобы  проверить пароль перед сохранением.

Поставил  следующее  правило пролверки 

public function rules()

{


	return array(	&nbsp; 			&nbsp; &nbsp; 

                    …

                    array('psw','compare','compareAttribute'=>'cpsw','on'=>'insert'),

                    …

	);


}

При попытке  сохранить получаю ошибку  что поля  cpsw нет в моделе

Как выполнять подобные проверки.

И еще вопрос. Если  редактирую  пользователя и оба поля  для  ввода и подтверждения  пароля не  заполнены хочу  чтобы  пароль остался  старым.

Решение  вижу одну, в методе beforeSave()  из базы  получать значение пароля  присваивать полю psw  и сохранять .

В самой моделе добавьте

public $cpsw;

Кстати можете прочитать статью “Валидация формы средствами Yii” там какраз я писал про валидацию поля пароль=подтверждение пароля.

Quote

И еще вопрос. Если  редактирую  пользователя и оба поля  для  ввода и подтверждения  пароля не  заполнены хочу  чтобы  пароль остался  старым.

В рулес (правилах) вместо 'on=>insert' укажите название сценария для которого должно действовать правило

Quote

link=topic=2057.msg11377#msg11377 date=1241887744]

Кстати можете прочитать статью “Валидация формы средствами Yii” там какраз я писал про валидацию поля пароль=подтверждение пароля.

Quote

И еще вопрос. Если  редактирую  пользователя и оба поля  для  ввода и подтверждения  пароля не  заполнены хочу  чтобы  пароль остался  старым.

Спасибо за все советы, а    'on=>insert' сбила переписка  в форуме ,  писали что есть стандартные сценарии insert  и edit ,  поэтому  и решил  пойти этим путем, еще раз спасибо

В рулес (правилах) вместо 'on=>insert' укажите название сценария для которого должно действовать правило

Все работает - помогло, только вот не могу справиться  со следующей  проблемой

Пользователь зарегистрирован , правим  его параметры - пароль не трогаем , все  должно сохраниться  а  пароль остаться  без  изменений -

Как  ни кручу . все-равно записывает  пустое значение

Проверьте саму форму. Скорее всего элемент посылает пробел вместо пустоты поэтому и затерает значение в базе. (зделайте print_r пост массива и посмотрите приходит с формы)

Если чесно то вариантов реализации самой формы редактирования пользователя - много, и у всех могут быть свои разные косяки. Я сначало вам начал писать тут пост про косяки одного типа но понял что у вас то может быть и по другому. Поэтому киньте сюда ваш экшинс и отображение (которое отвечает за вывод формы редактирования) и я вам сразу подскажу в чем ошибка.

проблему решил  с  помощью триггера,  если  честно сразу как-то упустил  из  виду возможности  самой  базы.

У  меня  пароли  перед  записью  обрабатываются функцией md5() только после  сохраняются  в базе, так  вот я  посмотрел  какое  значение md5('') выдает для  пустого пароля  и  при сохранении  просто проверяю  и  в случае  совпадения  беру  старое  значение (old.psw) Думаю  проще не придумаешь.

Спасибо за советы и помощь.

Так неважно там md5 или не md5. Просто перед сохранением проверять если в пост переменной пустота - тогда просто $form->psw = null; и в базу при сэйве поле psw не поменяется.

Quote

link=topic=2057.msg11497#msg11497 date=1242030358]

Так неважно там md5 или не md5. Просто перед сохранением проверять если в пост переменной пустота - тогда просто $form->psw = null; и в базу при сэйве поле psw не поменяется.

Действительно это более красивое  и  оптимальное  решение  но  как  мы  в контролере должны  объявлять $form 

В  представлении  я  форму  <?php echo CHtml::form(); ?>

Quote

Quote

link=topic=2057.msg11497#msg11497 date=1242030358]

Так неважно там md5 или не md5. Просто перед сохранением проверять если в пост переменной пустота - тогда просто $form->psw = null; и в базу при сэйве поле psw не поменяется.

Действительно это более красивое  и  оптимальное  решение  но  как  мы  в контролере должны  объявлять $form 

В  представлении  я  форму  <?php echo CHtml::form(); ?>

возможно  под $form  подразумевается $form = new AR_Model();

сейчас  попробую

Quote

Quote

Quote

link=topic=2057.msg11497#msg11497 date=1242030358]

Так неважно там md5 или не md5. Просто перед сохранением проверять если в пост переменной пустота - тогда просто $form->psw = null; и в базу при сэйве поле psw не поменяется.

Действительно это более красивое  и  оптимальное  решение  но  как  мы  в контролере должны  объявлять $form 

В  представлении  я  форму  <?php echo CHtml::form(); ?>

возможно  под $form  подразумевается $form = new AR_Model();

сейчас  попробую

не знаю  все что не перепробывал  не  дало требуемого результат - включаю  триггер,  если можно фрагмент кода или напишите как сделать  то что Вы рекомендуете