Ошибка валидации формы регистрации (CDbException: 1062 Duplicate entry)

Всем привет!

Сегодня открыл для себя Yii (статьей от автора Kuzya).

версия framework: yii-1.1.0.r1700

остановился на ошибке в момент повторной регистрации пользователя с одинаковым User:




CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: 

Integrity constraint violation: 1062 Duplicate entry '123' for key 2INSERT INTO `Users` 

(`login`, `password`, `email`) VALUES (:yp0, :yp1, :yp2)



в модуле users.php правила:




public function rules()

	{

return array(

// логин и почта должны быть введены

array('login','required','on'=>'register',

     'message'=>Yii::t('common','login_empty')), 

array('email','required','on'=>'register',

     'message'=>Yii::t('common','email_empty')), 

// Они должны быть уникальными

array('login','unique','on'=>'register',

     'message'=>Yii::t('common','login_in_base')),

array('email','unique','on'=>'register',

     'message'=>Yii::t('common','email_in_base!')),

 // Почтовый адрес должен иметь соответствующий формат

array('email','email','on'=>'register',

     'message'=>Yii::t('common','email_no_right_format'))

);

и функция в контроллере sitecontroller.php:




	public function actionRegister()

	{

		$errors = Array(); 		

		

		if (isset($_POST['Users']))

		{

			$users = new Users;

			// Заполняем поля

			$users->login    = $_POST['Users']['login'];

			$users->password = md5($_POST['Users']['password']);

			$users->email    = $_POST['Users']['email'];

			// Проверяем данные

			$users->validate('register');			

			

			// Если ошибки есть

			if( $users->hasErrors() ) 

				{

				// Помещаем их текст в массив $errors

				foreach($users->getErrors() as $field) $errors[] = $field[0];

				}


			// Если массив ошибок пуст 

			if(!count($errors)) 

				{

				// Сохраняем данные

				$users->save();

				// Устанавливаем сообщение

				Yii::app()->user->setFlash("registered",Yii::t("common","registered"));

				// Обновляем страницу

				$this->refresh();

				// Если ошибки есть то показываем форму регистрации и передаём их в шаблон

				}			

			

			

		}

	// показываем форму с передаваемым массивом ошибок

	$this->render('register',Array('errors' => $errors));

	}




и в шаблоне register.php с формой регистрации выводятся ошибки если они есть:




<?if(count($errors)):?>

Ошибки: <br />

<?foreach($errors as $error):?>

&nbsp;&nbsp;<b><?=$error;?></b><br />

<?endforeach;?>

<?endif;?>

<br />



но вот ошибки не выводятся в моем шаблоне, а выводится CDbException.

manual читается…

ну дык у вас выставлено в БД что поля должны быть уникальными. сделайте их не уникальными и добавте автоинкремент id

‘message’=>Yii::t(‘common’,‘email_in_base!’)), - восклицательный знак там и должен быть?

Нашлось решение на скорую руку!!!

в новом фреймворке этот код работает только если удалить третий параметр ‘on’=>‘register’

в правилах/rules.

знак (!) возможно не в тему (код, по татуриалу написал)

локализация сообщений, перечислены в массиве messages:

файл messages/ru_RU/common.php





<?php

return Array(

"hello_guest" => "Здравствуйте уважаемый гость!",

"welcome" => "Почему мы призываем вас завести блог именно у нас? Блог - это то место, где можно делиться мыслями, публиковать статьи, фотографии, общаться с друзьями или просто рассказывать о своей жизни. Создай личный дневник только для друзей или заведи блог на тему, которая тебя интересует. На нашем сайте Вы найдёте новых друзей, сможете бесконечно общаться с ними. ",

"registered"  => "Поздравляем! Вы зарегистрированы!",

"login_empty"   => "Поле логина не должно быть пустым",

"email_empty"   => "Поле почтового адреса не должно быть пустым",

"login_in_base" => "Введёный логин присутсвует среди зарегистрированных пользователей",

"email_in_base" => "Введёный e-mail присутсвует среди зарегистрированных пользователей",

"email_no_right_format" => "Вы ввели не правильный email");

?>



спасибо за отклик, интересно узнать про ‘on’=>‘register’, читаю дальше…

BOLVERIN же прав, и ‘on’=>‘register’ тут не причём, дело в таблице, смотрите структуру

Вопрос.

Для сохранения авторизации необходимо включить


Yii::app()->user->allowAutoLogin = true;

только где ето сделать ?

в конфиге




'components'=>array(

    'user'=>array(

	'allowAutoLogin'=>true,

        ...

    ),



спасибо