Ошибка валидации при регистрации

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vano.mig
Сообщения: 73
Зарегистрирован: 2016.11.21, 10:25

Ошибка валидации при регистрации

Сообщение vano.mig »

Ребята, привет.
такая проблема: делаю регистрацию, при вводе данных в форму все время вылазит ошибка "Введите пароль еще раз" (хотя в массиве POST есть пароль) и в базе данных такая запись:Model not inserted due to validation error.
Двое суток уже не могу разобраться...подскажите!
поля в table users
id
login
password
email
question
answer
hash
active
acssess

вот код
модель

Код: Выделить всё

<?php
namespace app\models;
use yii\base\Model;
use yii\db\ActiveRecord;
use yii\db\Expression;

class RegisterForm extends ActiveRecord {

    public static function tableName() {
        return 'users';
    }

    public $password_repeat;
    public $check;

    public function attributeLabels() {
        return [
            'login' => 'Логин',
            'email' => 'Email',
            'password' => 'Введите пароль',
            'password_repeat' => 'Введите пароль еще раз',
            'question' => 'Секретный вопрос',
            'answer' => 'Ответ на вопрос',
            'check' => 'Я не робот',
        ];
    }

    public function rules() {
        return [
            [['login', 'email', 'password', 'password_repeat', 'question', 'answer', 'check',], required, 'message' =>'Заполните поле'],
            ['email', 'email'],
            [['password'],'string', 'length' => [6,30]],
            [['password_repeat'], 'compare', 'compareAttribute'=>'password', 'message'=>'Пароли не совпадают'],
            [['login','answer'], 'string','length' => [4,30]],
        ];
    }

     public function validation ($res) {
        if ($res != 1) {
                return false;
        }
    }
}
?>
контроллер

Код: Выделить всё

<?php

namespace app\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;
use app\models\Pages;
use app\models\Products;
use app\models\ProductsImage;
use app\models\RegisterForm;

class SiteController extends AppController
{
 public function actionRegistration() {
 
        $model = new RegisterForm();
        $this->setMeta('IKA | Регистрация');
        $res = Yii::$app->request->post();
        if (!empty($res)) {
        $model->validation($res['RegisterForm']['check']);
        
          $passwd = $res['RegisterForm']['password'];
          $model->login = $res['RegisterForm']['login'];
          $model->password = $passwd;
          $model->email = $res['RegisterForm']['email'];
          $model->question = $res['RegisterForm']['question'];
          $model->answer = $res['RegisterForm']['answer'];
          $model->hash = md5($res['RegisterForm']['password']. $res['RegisterForm']['email']. $res['RegisterForm']['login']);
          $model->active = 0;
          $model->acssess = 1;
          echo $model->password_repeat;
          debug($res['RegisterForm']);
          if($model->save()) {
             Yii::$app->session->setFlash('success', 'Поздравляем! Вы успешно зарегистрировались.');
             return $this->refresh();
         } else {
             Yii::$app->session->setFlash('error', 'Ошибка регистрации!');
         }
        }
    return $this->render('registration', compact('model'));
    }
    }
 
вид

Код: Выделить всё

<?php

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model app\models\LoginForm */

//use yii\helpers\Html;
//use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
?>
<div class="container">

<?php if (Yii::$app->session->hasFlash('success')) { ?>
        <div class="alert alert-success alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true"></span>&times</button>
            <?php echo Yii::$app->session->getFlash('success');?>
        </div>
    <?php } elseif (Yii::$app->session->hasFlash('error')) { ?>
    <div class="alert alert-danger alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true"></span>&times</button>
            <?php echo Yii::$app->session->getFlash('error');?>
        </div>
        <?php } ?>
   <?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'login')?>
<?= $form->field($model, 'email')->input('email') ?>
<?= $form->field($model, 'password')->passwordInput()?>
<?= $form->field($model, 'password_repeat')->passwordInput()?>
<?= $form->field($model, 'question')->dropDownList(['prompt' => 'Выберите вопрос', 'Любимое блюдо', 'Имя животного', 'Девичья фамилия матери', 'Любимый вид спорта', 'Марка автомобиля']);?>
<?= $form->field($model, 'answer')?>
<?= $form->field($model, 'check')->checkbox()?>
<?= Html::submitButton('Отправить', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?>
       
</div>
Да и скажите, можно ли в yii2 шифровать не md5 a crypt?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Ошибка валидации при регистрации

Сообщение Onotole »

Читать документацию не пробовали?
А-то получается, зачем Вам фреймворк, если Вы пишете без него =)

По теме. Судя по коду - "Введите пароль еще раз" - это не ошибка, а имя поля
в базе данных такая запись:Model not inserted due to validation error.
Где в базе данных?

Код: Выделить всё

[['login', 'email', 'password', 'password_repeat', 'question', 'answer', 'check',], required, 'message' =>'Заполните поле'], 
прям так и записано? Без кавычек?
vano.mig
Сообщения: 73
Зарегистрирован: 2016.11.21, 10:25

Re: Ошибка валидации при регистрации

Сообщение vano.mig »

читал документацию...что то не могу разобраться...
Введите пароль еще раз - поле, которое при отправке формы подсвечивается красным...
Model not inserted due to validation error. - извините, не уточнил сразу - запись в браузере на странице сайта в yii2 (панель подсказок - Database Queries)
[['login', 'email', 'password', 'password_repeat', 'question', 'answer', 'check',], required, 'message' =>'Заполните поле'], - так и записано...
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Ошибка валидации при регистрации

Сообщение Onotole »

required в кавычки оберните
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Ошибка валидации при регистрации

Сообщение caHek2x »

что вы творите ?)))
load - это чудо ...
что такое validation, зачем вы его придумали ?
$res = Yii::$app->request->post();
а до этого проверить isPost ? (Yii::$app->request->isPost)

для красоты кода если во вьюшке if for и тд ... есть более красивые записи(это не от фреймворка .. это php ...) (ато в скобочках между хтмл черт ногу сломит :-))
<?php if (Yii::$app->session->hasFlash('success')): ?>
<?php endif; ?>

а чтоб узнать ошибку выведите $model->getErrors()
и правильно вам посоветовали поучите для начала ... ато получается взяли автомобиль и сами его толкать пытаетесь ... еще и на ручнике ...
vano.mig
Сообщения: 73
Зарегистрирован: 2016.11.21, 10:25

Re: Ошибка валидации при регистрации

Сообщение vano.mig »

спасибо Вам за помощь, подсказки и наставления! Я только учусь yii2. Буду дальше грызть эту науку))
Ответить