Задать вопрос
@EVOSandru6

Как в yii правильно сделать actionCreate для модели без связей?

Добрый день!

Такая проблема, делаю регистрацию для пользователей.

Есть модель 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 лишних , не из таблицы свойства и что-то ломается?
  • Вопрос задан
  • 2425 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
@Mavpa
Скорее всего у тебя в базе для PK не стоит auto_increment, а значение по умолчанию '0' дублируется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы