Добрый день!
Такая проблема, делаю регистрацию для пользователей.
Есть модель
User , в ней родные поля из таблицы:
CODE, NAME, PASSWORD, ROLE, EMAIL
Хочу, чтобы при регистрации пользователь дважды вводил пароль, чтобы не ошибиться.
Добавил 2 поля в модель
User:
// каптча
public $verifyCode;
// повторный пароль для регистрации
public $verifyPassword;
В
UserController для captcha написал:
public function actions()
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
);
}
Вроде с этим проблем нет. Форма такая (добавил проверочный пароль и капчу):
$form = $this->beginWidget('CActiveForm', array(
'id' => 'reg-form',
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
),
'htmlOptions'=>array(
'class'=>'form',
'style' => 'padding:10px;'
),
'action' => array('user/registration'), // когда форма показывается и в других контроллерах, не только 'site', то я в каждый из этих контроллеров вставил actionQuick, a здесь указал — array('quick'); почему-то не получается с array('//site/quick')
));?>
<div class="form">
<p class="note"><span class="required">*</span> Поля обязательные для заполнения.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'NAME'); ?>
<?php echo $form->textField($model,'NAME',array('size'=>60,'maxlength'=>100)); ?>
<?php echo $form->error($model,'NAME'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'LOGIN'); ?>
<?php echo $form->textField($model,'LOGIN',array('size'=>60,'maxlength'=>100)); ?>
<?php echo $form->error($model,'LOGIN'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'PASSWORD'); ?>
<?php echo $form->passwordField($model,'PASSWORD',array('size'=>32,'maxlength'=>32)); ?>
<?php echo $form->error($model,'PASSWORD'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'verifyPassword'); ?>
<?php echo $form->passwordField($model,'verifyPassword',array('size'=>32,'maxlength'=>32)); ?>
<?php echo $form->error($model,'verifyPassword'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'EMAIL'); ?>
<?php echo $form->textField($model,'EMAIL',array('size'=>60,'maxlength'=>100)); ?>
<?php echo $form->error($model,'EMAIL'); ?>
</div>
<?php if(CCaptcha::checkRequirements()): ?>
<div class="row">
<?php echo $form->labelEx($model,'verifyCode'); ?>
<div>
<?//php $this->widget('CCaptcha'); ?>
<?php $this->widget('CCaptcha',
array('captchaAction' => '/site/captcha')
);?>
<?php echo $form->textField($model,'verifyCode'); ?>
</div>
<div class="hint">
<!--перевод-->
<?php echo Translated::model()->findByAttributes(array('PARAM' => array('text_from_image')))->getName();?>
</div>
<?php echo $form->error($model,'verifyCode');?>
</div>
<?php endif; ?>
<div class="row buttons">
<?php echo CHtml::submitButton('Зарегистрироваться');
// $model->isNewRecord ?
?>
</div>
</div><!-- form -->
<?php $this->endWidget();?>
action регистрации Такой:
public function actionRegistration()
{
$model = new User();
//$model->scenario = 'registration';
if(isset($_POST['User']))
{
//My::printArr($_POST['User']);
if($model->PASSWORD == $model->verifyPassword){
$model->attributes=$_POST['User'];
if($model->save())
Yii::app()->user->setFlash('success', 'Вы успешно зарегистрировались!');
else
Yii::app()->user->setFlash('error', 'Не удалось зарегистрировать Вас');
}
else{
Yii::app()->user->setFlash('error', 'Пароли не совпадают');
$this->redirect(Yii::app()->request->requestUri);
}
}
$this->redirect(Yii::app()->request->urlReferrer);
}
В момент, когда введены все данные в форму и нажата кнопка зарегистрироваться, выходит такое ругательство:
CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'. The SQL statement executed was: INSERT INTO `m_users` (`EXIST`, `NAME`, `LOGIN`, `PASSWORD`, `ROLE`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4)
Почему
VALUES имеют такие странные значения? Именно
$model->save()
не отрабатывается. Не потому ли, что в модели 2 лишних , не из таблицы свойства и что-то ломается?