Save Form Input Array

Dear all,

I am trying to save data to database through form input array.

This is my controller.


public function actionCreateMulti()

	{

		$model=new HeaderDetail;


		// Uncomment the following line if AJAX validation is needed

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


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

		{

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

			if($model->save())

				$this->redirect(array('view','id'=>$model->id_header_detail));

		}


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

			'model'=>$model,

		));

	}

My model is still general like default generated model.

Below is my view :


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

	'id'=>'header-detail-form',

	'enableAjaxValidation'=>false,

)); ?>

<table>

<tr>

<td>Product Code</td>

<td>Display Order</td>

<td>Description</td>

<td>Particular</td>

<td>Remark</td>

</tr>

<?php

$dataProvider = $model_search->searchDeskripsi();

$list = array();

foreach($dataProvider->getData() as $modeldetail){

		echo "<tr>";

		echo "<td>".$form->textField($model,'product_code[]',array('size'=>16,'maxlength'=>16,'value'=>'14C001001C'))."</td>";

		echo "<td>".$form->textField($model,'deskripsi[]',array('size'=>40,'maxlength'=>40,'value'=>$modeldetail->deskripsi_layout))."</td>";

		echo "<td>".$form->textField($model,'display_order[]',array('value'=>$modeldetail->display_order))."</td>";

		echo "<td>".$form->textField($model,'particular[]',array('size'=>40,'maxlength'=>40))."</td>";

		echo "<td>".$form->textField($model,'remark_header_detail[]',array('size'=>30,'maxlength'=>30))."</td>";

		echo "</tr>";

}

?>

</table>

<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

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



But these codes can’t save data to database.

Any wrong ?

Thank you,

Sigit

Wah, konsep struktur datanya agak keliru pak sigit, anda mesti konstruksi array dengan struktur berikut ini dari view/form:




 array(

  'HeaderDetail'=>array(

  0=>array('product_code'=>'value1A', 'deskripsi'=>'valu2A', dst),

  1=>array('product_code'=>'value1B', 'deskripsi'=>'valu2B', dst),

  2=>array('product_code'=>'value1C', 'deskripsi'=>'valu2C', dst),

  )

  dst

 );



untuk membuat hasil begitu, code di viewnya perlu diganti dikit:




$index=0;

foreach($dataProvider->getData() as $modeldetail){

		echo "<tr>";

		echo "<td>".$form->textField($model,"[$index]product_code",array('size'=>16,'maxlength'=>16,'value'=>'14C001001C'))."</td>";

		echo "<td>".$form->textField($model, "[$index]deskripsi",array('size'=>40,'maxlength'=>40,'value'=>$modeldetail->deskripsi_layout))."</td>";

		echo "<td>".$form->textField($model,'display_order[]',array('value'=>$modeldetail->display_order))."</td>";

		echo "<td>".$form->textField($model,"[$index]particular",array('size'=>40,'maxlength'=>40))."</td>";

		echo "<td>".$form->textField($model,"[$index]remark_header_detail",array('size'=>30,'maxlength'=>30))."</td>";

		echo "</tr>";

$index++;

}

?>



lalu proses simpan di actionnya




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

		{

                    $result=true;

                    foreach ($_POST['HeaderDetail'] as $index=>$row) {

                        $model = new HeaderDetail;

			$model->attributes=$_POST['HeaderDetail'][$index];

                        $result = $result && $model->save();

                    }

			if($result)

				$this->redirect('success/page');

		}