Yii Framework Forum: проверка пароля с подтверждением - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

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

#1 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 09 May 2009 - 08:24 AM

Есть форма для регистрации пользователя и  в ней  поля  для  пароля  и  его подтверждения
<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(      
                    ..........................
                    array('psw','compare','compareAttribute'=>'cpsw','on'=>'insert'),
                    .......................
);
}

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

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

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


0

#2 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 09 May 2009 - 11:42 AM

В самой моделе добавьте
public $cpsw;
0

#3 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 09 May 2009 - 11:49 AM

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

Quote

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


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

#4 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 09 May 2009 - 02:26 PM

Quote

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

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



Quote

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


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



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

0

#5 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 10 May 2009 - 01:58 PM

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

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

#6 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 11 May 2009 - 01:39 AM

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

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

#7 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 11 May 2009 - 03:21 AM

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

#8 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 11 May 2009 - 03:25 AM

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

#9 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 11 May 2009 - 04:04 AM

Quote

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

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

Действительно это более красивое  и  оптимальное  решение  но  как  мы  в контролере должны  объявлять $form 
В  представлении  я  форму  <?php echo CHtml::form(); ?>
0

#10 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 11 May 2009 - 04:07 AM

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();
сейчас  попробую
0

#11 User is offline   sergey.leonenko 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 26-March 09

Posted 11 May 2009 - 04:25 AM

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();

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

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users