maaf nih agan-agan semua, ane terpaksa repost topic ni lagi, ane bener-bener need help…
ane mau import data absensi nih critanya gan, nah udah googling n banyak yg pakai PhpExcelReader.
problem ane tuh waktu submit file itu seakan-akan udah terupload, padahal ndak ada proses sama sekali. dan juga g ada pesan error yang tampil
di controller ane bikin function kyk tutorial yg ane dpet dr googling
public function actionImportExcel()
{
error_reporting(E_ALL ^ E_NOTICE);
$model=new ATTENDANCE;
if(isset($_POST['ATTENDANCE']))
{
Yii::import('ext.phpexcelreader.JPhpExcelReader');
$model->attributes=$_POST['ATTENDANCE'];
if(strlen(trim(CUploadedFile::getInstance(model,'filee'))) >0)
{
$import=CUploadedFile::getInstance($model,'filee');
//$path=Yii::app()->getBasePath().'/../import/absen.xls';
$import->saveAs(Yii::app()->basePath.'/../import/');
$data = new JPhpExcelReader(Yii::app()->basePath.'/../import/');
$att_emp_id = array();
$att_emp_name = array();
$att_date = array();
$att_clock_in = array();
$att_clock_out = array();
for ($j=1; $j <= $data->sheets[0]['nuimRows']; $j++)
{
$att_emp_id[$j]=$data->sheets[0]['cells'][$j][1];
$att_emp_name[$j]=$data->sheets[0]['cells'][$j][2];
$att_date[$j]=$data->sheets[0]['cells'][$j][3];
$att_clock_in[$j]=$data->sheets[0]['cells'][$j][4];
$att_clock_out[$j]=$data->sheets[0]['cells'][$j][5];
}
$niki = $data->rowcount(0);
for($i = 2; $i<=$niki; $i++)
{
$model = new ATTENDANCE;
$model->ATT_EMP_ID = $att_emp_id[$i];
$model->ATT_EMP_NAME = $att_emp_name[$i];
$model->ATT_DATE = $att_date[$i];
$model->ATT_CLOCK_IN = $att_clock_in[$i];
$model->ATT_CLOCK_OUT = $att_clock_out[$i];
$valid = $model->validate();
if($valid)
{
$model->save();
Yii::app()->user->setFlash('success', 'Data <strong>berhasil</strong> di unggah. Terima kasih');
}
else
{
Yii::app()->user->setFlash('error', '<strong>Beberapa data sudah ada dalam database.</strong> Silahkan periksa kembali.');
}
}
$this->redirect(array('admin'));
}
else
{
Yii::app()->user->setFlash('error', 'Data <strong>gagal</strong> di unggah. Silahkan periksa file anda.');
}
}
$this->render('ImportExcel',array(
'model'=>$model,
));
}
untuk di form nya ane bikin gini :
<?php if(!$model->isNewRecord) { ?>
<div class="well">
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'=>'attendance-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="help-block">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row-fluid">
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_EMP_ID',array('class'=>'span15','maxlength'=>20)); ?>
</div>
<div class="span3">
<?php echo $form->textFieldRow($model,'ATT_EMP_NAME',array('class'=>'span10','maxlength'=>30)); ?>
</div>
</div>
<?php //echo $form->textFieldRow($model,'ATT_DATE',array('class'=>'span5')); ?>
<?php echo $form->labelEx($model,'ATT_DATE'); ?>
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker',array(
'attribute'=>'ATT_DATE',
'model'=>$model,
// additional javascript options for the date picker plugin
'options'=>array(
'mode'=>'focus',
'showAnim'=>'bounce',
'flat'=>true,
'dateFormat'=>'dd-mm-yy',
'changeMonth'=>true,
'changeYear'=>true,
'yearRange'=>'1900:2099',
'showButtonPanel'=>true,
),
'htmlOptions'=>array(
'style'=>'height:20px; width:150px; text-align:center;',
),
));
?>
<div class="row-fluid">
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_STAND_CLOCK_IN',array('class'=>'span8', 'maxlength'=>6)); ?>
</div>
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_CLOCK_IN',array('class'=>'span8','maxlength'=>6)); ?>
</div>
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_STAND_CLOCK_OUT',array('class'=>'span8','maxlength'=>6)); ?>
</div>
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_CLOCK_OUT',array('class'=>'span8','maxlength'=>6)); ?>
</div>
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_LATE_STAT',array('class'=>'span8','maxlength'=>15)); ?>
</div>
<div class="span2">
<?php echo $form->textFieldRow($model,'ATT_PERMIT_ID',array('class'=>'span8',)); ?>
</div>
</div>
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType'=>'submit',
'type'=>'primary',
'label'=>$model->isNewRecord ? 'Tambahkan' : 'Simpan',
)); ?>
</div>
<?php $this->endWidget(); ?>
</div><?php } ?>
<br>
<h3> Import Dari Excel</h3>
<div class="well">
<?php if($model->isNewRecord) { ?>
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'=>'attendance-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>
<?php echo $form->fileFieldRow($model,'filee',array('class'=>'span3')); ?>
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType'=>'submit',
'icon'=>'white upload',
'type'=>'primary',
'label'=>'UPLOAD',
)); ?>
</div>
<?php $this->endWidget(); ?>
<?php } ?>
</div>
di form ntu ane aktifin yg untuk upload file doank, untuk formnya aktif kalau kondisi data nya bukan data baru(update)
di modelnya udah ane bikin gini :
class ATTENDANCE extends CActiveRecord
{
public $filee;
....
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('ATT_EMP_ID, ATT_EMP_NAME, ATT_DATE', 'required'),
array('ATT_PERMIT_ID', 'numerical', 'integerOnly'=>true),
array('ATT_EMP_ID', 'length', 'max'=>20),
array('ATT_EMP_NAME', 'length', 'max'=>30),
array('ATT_CLOCK_IN, ATT_CLOCK_OUT, ATT_STAND_CLOCK_IN, ATT_STAND_CLOCK_OUT', 'length', 'max'=>6),
array('ATT_LATE_STAT', 'length', 'max'=>15),
array('filee', 'file', 'types'=>'xls, xlsx'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('ATT_ID, ATT_EMP_ID, ATT_EMP_NAME, ATT_DATE, ATT_CLOCK_IN, ATT_CLOCK_OUT, ATT_LATE_STAT, ATT_STAND_CLOCK_IN, ATT_STAND_CLOCK_OUT, ATT_PERMIT_ID', 'safe', 'on'=>'search'),
);
}
....
}
trimakasih sebelumnya para master.