Add Sukses Tapi Update Gagal

Mohon masukan dari master2 yang dah biasa

Controler :




<?php


/**

 * SiteController is the default controller to handle user requests.

 */

class PakageController extends Controller

{

	public $layout='column1';

	

	private $_model;

	

	public function filters()

	{

		return array(

			'accessControl',

		);

	}

	

	/**

	 * Specifies the access control rules.

	 * This method is used by the 'accessControl' filter.

	 * @return array access control rules

	 */

	public function accessRules()

	{

		return array(

			array('allow', // allow authenticated users to access all actions

				'users'=>array('@'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}

	

	/**

	 * Displays a particular model.

	 */

	public function actionView()

	{

		$model=$this->loadModel();


		$this->render('view',array(

			'model'=>$model,

		));

	}

	

	/**

	 * Creates a new model.

	 * If creation is successful, the browser will be redirected to the 'view' page.

	 */

	public function actionCreate()

	{

		$model=new Pakage;

		/**

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

		{

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

			if($model->save())

				$this->redirect(array('index'));

		}


		$this->render('create',array(

			'model'=>$model,

		));

		

		*/

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if (Yii::app()->request->isAjaxRequest)

        {

            echo CJSON::encode(array(

                'status'=>'failure',

                'divcreate'=>$this->renderPartial('_form', array('model'=>$model), true)

				));

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

        }

        else

		{

			$this->render('create',array(

				'model'=>$model

			));

		}

	}

	

	/**

	 * Updates a particular model.

	 * If update is successful, the browser will be redirected to the 'view' page.

	 */

	 public function actionUpdate()

	 {

		/* old code

		$model=$this->loadModel();

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

		{

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

			if($model->save())

				$this->redirect(array('index'));

		}

		$this->render('update',array(

			'model'=>$model,

		));

		

		*/

		$id=$_POST['id'];

		$model=$this->loadModel($id[0]);

		

		if (Yii::app()->request->isAjaxRequest)

        {

            echo CJSON::encode(array(

                'status'=>'failure',

				'id'=>$model->id,

				'pakage_cd'=>$model->pakage_cd,

				'pakage_nm'=>$model->pakage_nm,

				'active'=>$model->active,

                'divcreate'=>$this->renderPartial('_form', array('model'=>$model), true)

				));

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

        }

        else

		{

			$this->render('update',array(

				'model'=>$model

			));

		}


		$this->render('update',array(

			'model'=>$model

		));

	 }

	 

	/**

	 * Manages all models.

	 */

	public function actionIndex()

	{

		$model=new Pakage;

		if(isset($_GET['Pakage']))

			$model->attributes=$_GET['Pakage'];

		$this->render('index', array(

			'model'=>$model,

		));

	}

	

	/**

	*

	*

	*/

	public function actionWrite()

	{

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

		{

			$dataku = new Pakage;

			$model=new Pakage;

			

			$dataku->attributes=$_POST['Pakage'];

			

			if ( (int)$dataku->attributes['id'] > 0)

			{

				$model=$this->loadModel($id[0]);

				$model->pakage_cd=$dataku->attributes['pakage_cd'];

				$model->pakage_nm=$dataku->attributes['pakage_nm'];

				$model->active=$dataku->attributes['active'];

			}

			

			else

			{

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

			} 

			try

			{

				if($model->save())

				{

					if (Yii::app()->request->isAjaxRequest)

					{

						echo CJSON::encode(array(

						  'status'=>'success',

						  'divcreate'=>"Data saved"

						));

					}

					else

					{

						Yii::app()->user->setflash($id, array('title' => 'Success', 'content' => 'Data Saved') );

						$this->redirect(array('index'));

					}

				}

			}

			catch (Exception $e)

			{

				$errormessage=$model->getErrors();

				

				if ($errormessage == '')

				{

					$errormessage=$e->getMessage();

				}

				

				if (Yii::app()->request->isAjaxRequest)

				{

				  echo CJSON::encode(array(

					'status'=>'failure',

					'div'=>$errormessage

				  ));

				}

			}

		}

	}

	

	/**

	 * Deletes a particular model.

	 * If deletion is successful, the browser will be redirected to the 'index' page.

	 */

	 public function actionDelete()

	 {

		if(Yii::app()->request->isPostRequest)

		{

			$this->loadModel()->delete();

			

			if(!isset($_GET['ajax']))

				$this->redirect(array('index'));

		}

		else

			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

	 }

	 

	 /**

	 * Returns the data model based on the primary key given in the GET variable.

	 * If the data model is not found, an HTTP exception will be raised.

	 */

	 public function loadModel($id)

	 {

		/* old code

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

		{

			if(isset($_GET['id']))

				$this->_model=Pakage::model()->findByPk($_GET['id']);

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

				throw new CHttpException(404,'The requested page does not exist.');

		}

		return $this->_model;

		*/

		

		$model=Pakage::model()->findByPk((int)$id);

		if($model===null)

			throw new CHttpException(404,'The requested page does not exist.');

		return $model;

	 }

}



Berikut adalah Halaman Index :




<?php

/*

$this->breadcrumbs=array(

	'pakage',

); */

?>

<!--h1>Manage pakage</h1-->

<script type="text/javascript">

// here is the magic

function adddata()

{

    <?php echo CHtml::ajax(array(

			'url'=>array('pakage/create'),

            'data'=> "js:$(this).serialize()",

            'type'=>'post',

            'dataType'=>'json',

            'success'=>"function(data)

            {

                if (data.status == 'failure')

                {

                    $('#pakageDialog div.divcreate').html(data.div);

					$('#yt0').val('Create');

					$('#Pakage_id').val(data.id);

					$('#Pakage_pakage_cd').val(data.pakage_cd);

					$('#Pakage_pakage_nm').val(data.pakage_nm);

                          // Here is the trick: on submit-> once again this function!

                    $('#pakageDialog div.divcreate form').submit(adddata);

                }

                else

                {

                    $('#pakageDialog div.divcreate').html(data.div);

                    setTimeout(\"$('#pakageDialog').dialog('close') \",3000);

                }

            } ",

            ))?>;

    return false;

}

</script>

<script type="text/javascript">

function editdata()

{

    <?php

	echo CHtml::ajax(array(

			'url'=>array('pakage/update'),

            'data'=> array('id'=>'js:$.fn.yiiGridView.getSelection("pakage-grid")'),

            'type'=>'post',

            'dataType'=>'json',

            'success'=>"function(data)

            {

                if (data.status == 'failure')

                {

                    $('#pakageDialog div.divcreate').html(data.div);

					$('#yt0').val('Save');

					$('#Pakage_id').val(data.id);

					$('#Pakage_pakage_cd').val(data.pakage_cd);

					$('#Pakage_pakage_nm').val(data.pakage_nm);

					$('#Pakage_active').val(data.active);

					if (data.active == '1')

					{

					  $('#active').checked='checked';

					}

                          // Here is the trick: on submit-> once again this function!

                    $('#pakageDialog div.divcreate form').submit(editdata);

                }

                else

                {

                    $('#pakageDialog div.divcreate').html(data.div);

                    setTimeout(\"$('#pakageDialog').dialog('close') \",3000);

                }

            } ",

            ))?>;

    return false;

}

</script>

<script type="text/javascript">

function deletedata()

{

    <?php

	echo CHtml::ajax(array(

			'url'=>array('pakage/delete'),

            'data'=> array('id'=>'js:$.fn.yiiGridView.getSelection("pakage-grid")'),

            'type'=>'post',

            'dataType'=>'json',

            'success'=>"function(data)

            {

			

            } ",

            ))?>;

	$.fn.yiiGridView.update('pakage-grid');

    return false;

}

</script>

<script type="text/javascript">

function refreshdata()

{

    $.fn.yiiGridView.update('pakage-grid');

    return false;

}

</script>


<h1>Manage pakage</h1>

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(

	'id'=>'pakageDialog',

	'options'=>array(

		'title'=>'pakage',

		'autoOpen'=>false,

		'modal'=>true,

		'width'=>600,

        'height'=>275,

	),

));

?>

<div class="divcreate"></div>

<?php

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

$this->endWidget('zii.widgets.jui.CJuiDialog');

?>


<?php 

	$imgAdd = CHtml::image(Yii::app()->request->baseUrl.('/images/add.gif'));

	$imgEdit = CHtml::image(Yii::app()->request->baseUrl.('/images/edit.gif'));

	$imgDelete = CHtml::image(Yii::app()->request->baseUrl.('/images/delete.gif'));

	

	echo CHtml::link($imgAdd, '#', array(

			'style'=>'cursor: pointer; text-decoration: underline;',

			'title'=>'Add Data',

			'onclick'=>'{adddata(); $("#pakageDialog").dialog("open"); $.fn.yiiGridView.update("absrule-grid");}',

			));

	

	echo CHtml::link($imgEdit, '#', array(

			'style'=>'cursor: pointer; text-decoration: underline;',

			'title'=>'Edit Data',

			'onclick'=>'{editdata(); $("#pakageDialog").dialog("open"); $.fn.yiiGridView.update("absrule-grid");}',

			));

	echo CHtml::link($imgDelete, '#', array(

			'style'=>'cursor: pointer; text-decoration: underline;',

			'title'=>'Delete Data',

			'onclick'=>'{deletedata(); $("#pakageDialog").dialog("open"); $.fn.yiiGridView.update("absrule-grid");}',

			));

?>

<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'pakage-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'selectableRows'=>2,

	'columns'=>array(

		array(

			'class'=>'CCheckBoxColumn',

			'id'=>'id',

		),

		array(

			'name'=>'pakage_cd',

			'type'=>'raw',

			'value'=>'CHtml::encode($data->pakage_cd)'

		),

		array(

			'name'=>'pakage_nm',

			'type'=>'raw',

			'value'=>'CHtml::encode($data->pakage_nm)'

		),

		array(

			'class'=>'CButtonColumn',

			'header'=>'Action',

			'template' => '{update}{delete}',

		),

		array(

			'class'=>'CCheckBoxColumn',

			'name'=>'active',

			'selectableRows'=>'0',

			'header'=>'Active',

			'checked'=>'$data->active'

		),

		

	),

)); ?>




Sedangkan di _form :




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'pakage-form',

	'enableAjaxValidation'=>false,

)); ?>

	<p class="note">Isian dengan <span class="required">*</span> harap diisi.</p>


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

	

	<div class="row">

		<?php echo $form->hiddenField($model,'id'); ?>

		

		<?php echo $form->labelEx($model,'pakage_cd'); ?>

		<?php echo $form->textField($model,'pakage_cd',array('size'=>10,'maxlength'=>10)); ?>

		<?php echo $form->error($model,'pakage_cd'); ?>

	</div>

	

	<div class="row">

		<?php echo $form->labelEx($model,'pakage_nm'); ?>

		<?php echo $form->textField($model,'pakage_nm',array('size'=>60,'maxlength'=>128)); ?>

		<?php echo $form->error($model,'pakage_nm'); ?>

	</div>

	

	<div class="row">

		<?php echo $form->labelEx($model,'active'); ?>

		<?php echo $form->checkBox($model,'active'); ?>

		<?php echo $form->error($model,'active'); ?>

	</div>

	

	<div class="row buttons">

		<?php 

		//echo CHtml::submitButton($model->isNewRecord ? 'Simpan' : 'Save'); 

		

		echo CHtml::ajaxSubmitButton('Save',

			array('pakage/write'),

			array('success'=>'function(data){

					var x = eval("(" + data + ")");

					document.getElementById("messagediv").innerHTML = data;

					if (x.status == "success")

					{

						$.fn.yiiGridView.update("pakage-grid");

						$("#pakageDialog").dialog("close");

						document.getElementById("messagediv").innerHTML = "";

					}

				}')); 

		?>

	</div>


<?php $this->endWidget(); ?>

	<div id="messagediv"></div>

</div><!-- form -->



Permasalahannya pada Saat ActionWrite, ketika saat Add Data maka kan menghasilkan Recor baru, tetapi jika saat Update data maka yang terjadi adalah menambah data, mohon koreksi di actionwrite gan… agar Saat Update tidak MENAMBAH DATA baru…




public function actionWrite()

	{

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

	  {

		$oldpass=$_POST['passhide'];

		$dataku->attributes=$_POST['Useraccess'];

		if ((int)$dataku->attributes['useraccessid'] > 0)

		{

		  $model=$this->loadModel($dataku->attributes['useraccessid']);

		  $model->username = $dataku->attributes['username'];

		  $model->realname = $dataku->attributes['realname'];

		  if ($model->password != $oldpass)

		  {

			$model->password = $model->hashPassword($model->password, $model->salt);

		  }

		  else

		  {

			$model->password = $oldpass;

		  }

		  $model->email = $dataku->attributes['email'];

		  $model->recordstatus = $dataku->attributes['recordstatus'];

		}

		else

		{

		  $model = new Useraccess();

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

		  $model->salt=$model->generateSalt();

		  $model->password=$model->hashPassword($model->password, $model->salt);

		}

		try

		{

		  if($model->save())

		  {

			if (Yii::app()->request->isAjaxRequest)

			  {

				echo CJSON::encode(array(

				  'status'=>'success',

				  'div'=>"Data saved"

				));

			  }

			  else

			  {

				Yii::app()->user->setflash($id, array('title' => 'Success', 'content' => 'Data Saved') );

				$this->redirect(array('index'));

			  }

		  }

		}

		catch (Exception $e)

		{

			  $errormessage=$model->getErrors();

			  if ($errormessage == '')

			  {

				$errormessage=$e->getMessage();

			  }

		  if (Yii::app()->request->isAjaxRequest)

			{

			  echo CJSON::encode(array(

				'status'=>'failure',

                'div'=>$errormessage

              ));

            }

		}

	  }

	}



udah solved blum gan???

q dari kemaren utak-atik update via gridview lom jadi2 c…

hiks…

tau cara passing id dari gridview ke juidialog ga????




public function actionWrite()

        {

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

          {

                $oldpass=$_POST['passhide'];

                $dataku->attributes=$_POST['Useraccess']; // ini $dataku kapan declarasi sebagai objectnya??

                if ((int)$dataku->attributes['useraccessid'] > 0)

                {

                  $model=$this->loadModel($dataku->attributes['useraccessid']);

                  $model->username = $dataku->attributes['username'];

                  $model->realname = $dataku->attributes['realname'];

                  if ($model->password != $oldpass)

                  {

                        $model->password = $model->hashPassword($model->password, $model->salt);

                  }

                  else

                  {

                        $model->password = $oldpass;

                  }

                  $model->email = $dataku->attributes['email'];

                  $model->recordstatus = $dataku->attributes['recordstatus'];

                }

                else

                {

                  $model = new Useraccess();

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

                  $model->salt=$model->generateSalt();

                  $model->password=$model->hashPassword($model->password, $model->salt);

                }

                try

                {

                  if($model->save())

                  {

                        if (Yii::app()->request->isAjaxRequest)

                          {

                                echo CJSON::encode(array(

                                  'status'=>'success',

                                  'div'=>"Data saved"

                                ));

                          }

                          else

                          {

                                Yii::app()->user->setflash($id, array('title' => 'Success', 'content' => 'Data Saved') );

                                $this->redirect(array('index'));

                          }

                  }

                }

                catch (Exception $e)

                {

                          $errormessage=$model->getErrors();

                          if ($errormessage == '')

                          {

                                $errormessage=$e->getMessage();

                          }

                  if (Yii::app()->request->isAjaxRequest)

                        {

                          echo CJSON::encode(array(

                                'status'=>'failure',

                'div'=>$errormessage

              ));

            }

                }

          }

        }