Why It Did Not Echo The Error Message

Hi I am still newbie on this,I just want to ask some help how can i display the error "invalid username and password" in my Login form if the login authentication is failed ?

I have user table created. with 3 columns,id,username and password.

UserIdentity.php




<?php


/**

 * UserIdentity represents the data needed to identity a user.

 * It contains the authentication method that checks if the provided

 * data can identity the user.

 */

class UserIdentity extends CUserIdentity

{

	/**

	 * Authenticates a user.

	 * The example implementation makes sure if the username and password

	 * are both 'demo'.

	 * In practical applications, this should be changed to authenticate

	 * against some persistent user identity storage (e.g. database).

	 * @return boolean whether authentication succeeds.

	 */

	public function authenticate()

	{

		/*$users=array(

			// username => password

			'demo'=>'demo',

			'admin'=>'admin',

		);*/


        $userrecord = user::model()->findByAttributes(array('username'=>$this->username));





		if(!isset($users[$this->username]))

			$this->errorCode=self::ERROR_USERNAME_INVALID;

		elseif($users[$this->username]!==md5($this->password))

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else

			$this->errorCode=self::ERROR_NONE;

		return !$this->errorCode;

	}

}



MysiteController.php




<?php


class MysiteController extends Controller

{

   public $defaultAction = 'myindex';




    public function actionMyindex()

	{

		$this->renderPartial('myindex');

	}





    /**

     * Displays the login page

     */

    public function actionLogin()

    {

        $model=new MyLoginForm;


        // if it is ajax validation request

        if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')

        {

            echo CActiveForm::validate($model);

            Yii::app()->end();

        }


        // collect user input data

        if(isset($_POST['LoginForm']))//This Line here I am confuse LoginForm is that name of the form ?like this //name="LoginForm"

        {

        

            $model->attributes=$_POST['LoginForm'];

            // validate user input and redirect to the previous page if valid

            if($model->validate() && $model->login())

                $this->redirect('<?php echo Yii::app()->request->baseUrl; ?>/index.php?r=mysite/mynewpage');

        }

        // display the login form


        $this->renderPartial('myindex',array('model'=>$model));

    }





    public function actionMyNewpage(){

        $this->renderPartial('mynewpage');

    }




	// Uncomment the following methods and override them if needed

	/*

	public function filters()

	{

		// return the filter configuration for this controller, e.g.:

		return array(

			'inlineFilterName',

			array(

				'class'=>'path.to.FilterClass',

				'propertyName'=>'propertyValue',

			),

		);

	}


	public function actions()

	{

		// return external action classes, e.g.:

		return array(

			'action1'=>'path.to.ActionClass',

			'action2'=>array(

				'class'=>'path.to.AnotherActionClass',

				'propertyName'=>'propertyValue',

			),

		);

	}

	*/

}




Model=> MyLoginForm.php




  <?php


/**

 * LoginForm class.

 * LoginForm is the data structure for keeping

 * user login form data. It is used by the 'login' action of 'SiteController'.

 */

class MyLoginForm extends CFormModel

{

	public $username;

	public $password;

	public $rememberMe;


	private $_identity;


	/**

	 * Declares the validation rules.

	 * The rules state that username and password are required,

	 * and password needs to be authenticated.

	 */

	public function rules()

	{

		return array(

			// username and password are required

			array('username, password', 'required'),

			// rememberMe needs to be a boolean

			//array('rememberMe', 'boolean'),

			// password needs to be authenticated

			array('password', 'authenticate'),

		);

	}


	/**

	 * Declares attribute labels.

	 */

	public function attributeLabels()

	{

		return array(

			'rememberMe'=>'Remember me next time',

		);

	}


	/**

	 * Authenticates the password.

	 * This is the 'authenticate' validator as declared in rules().

	 */

	public function authenticate($attribute,$params)

	{

		if(!$this->hasErrors())

		{

			$this->_identity=new UserIdentity($this->username,$this->password);

			if(!$this->_identity->authenticate())

				$this->addError('password','Incorrect username or password.');

		}

	}


	/**

	 * Logs in the user using the given username and password in the model.

	 * @return boolean whether login is successful

	 */

	public function login()

	{

		if($this->_identity===null)

		{

			$this->_identity=new UserIdentity($this->username,$this->password);

			$this->_identity->authenticate();

		}

		if($this->_identity->errorCode===UserIdentity::ERROR_NONE)

		{

			$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days

			Yii::app()->user->login($this->_identity,$duration);

			return true;

		}

		else

			return false;

	}

}






View =>myindex.php




<form role="form" name="LoginForm">

                        <fieldset>

                            <div class="form-group">

                                <input class="form-control" placeholder="Username" name="username" type="text" autofocus>

                            </div>

                            <div class="form-group">

                                <input class="form-control" placeholder="Password" name="password" type="password" value="">

                            </div>

                            <div class="checkbox">

                                <label>

                                    <input name="remember" type="checkbox" value="Remember Me">Remember Me

                                </label>

                            </div>

                            <!-- Change this to a button or input when using this as a form -->

                            <a href="<?php echo Yii::app()->request->baseUrl; ?>/index.php?r=mysite/login" class="btn btn-lg btn-success btn-block">Login</a>

                        </fieldset>

                    </form>




add this in your form /myindex.php where you want the error to appear


<?php echo CHtml::errorSummary($model); ?>

Thank you for the reply…

why is it when I refreshed my myindex.php it shows immediately the error I thought after clicking the login button if there is error will appear or validation failed.

Thank you in advance

write this line in your form widget.


enableAjaxValidation=>true

then add these lines in your action




if(isset($_POST['ajax']) && $_POST['ajax']==='some-form')

		{

			echo CActiveForm::validate($model);

			Yii::app()->end();

		}