0
votes

I created form to upload files , also model to validate types . If I upload php file or any file will upload in successful way , but in model i added files type just "jpg,gif, png,pdf,rar,zip,doc,docx"

How to fix it ?

view :

.......
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'Cfiles-form',
   /*
        'enableAjaxValidation'=>true,
        'enableClientValidation'=>true,
        'clientOptions'=>array('validateOnSubmit'=>true), //This is very important
       */
       'clientOptions'=>array('validateOnSubmit'=>true), //This is very important
       'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>

<?php
/// difine Section model 
$models=new Courses;
?>
<?php echo $form->errorSummary($model,'يرجى تعديل الأخطاء التالية'); ?>
<table>
<h3> إضافة ملفات الدورات</h3>
<tr>
    <td>
        <div class="row">
        <?php echo $form->labelEx($model,'title'); ?>
        <?php echo $form->textField($model,'title',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'title'); ?>
    </div>

    </td>
</tr>
<tr>
    <td>
            <div class="row">
        <?php echo $form->labelEx($model,'desc'); ?>
        <?php echo $form->textField($model,'desc',array('size'=>60,'maxlength'=>600)); ?>
        <?php echo $form->error($model,'desc'); ?>
    </div>
    </td>
</tr>
<tr>
    <td>
    <div class="row">
        <?php echo $form->labelEx($model,'file'); ?>
        <?php echo $form->fileField($model,'file'); ?>
        الملفات المسموحة : jpg,gif, png,pdf,rar,zip,doc,docx
        <?php echo $form->error($model,'file'); ?>
    </div>
    </td>
</tr>
.......

Model:

....
public function rules(){
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('title, desc,  privacy', 'required','message'=>'يرجى ملئ حقل {attribute}  '),
            array('privacy', 'numerical', 'integerOnly'=>true),
            array('title', 'length', 'max'=>255),
            array('desc', 'length', 'max'=>600),

             array('file', 'file', 'types'=>'jpg,gif, png,pdf,rar,zip,doc,docx','allowEmpty'=>true, 'on'=>'update'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('f_id, title, desc, file, privacy', 'safe', 'on'=>'search'),
        );
    }
.....

Controller :

public function actionCreate()
    {
        $model=new Cfiles;

        $models= new Courses;

        // Uncomment the following line if AJAX validation is needed
    $this->performAjaxValidation($model);

        if(isset($_POST['Cfiles'])){
            $model->attributes=$_POST['Cfiles'];
            $valdiate=$model->validate();

         /////// upload image functions 
         $rnd = rand(0,999984375);  // generate random number between 0-9999
         $model->attributes=$_POST['Cfiles']['file'];
         $uploadedFile=CUploadedFile::getInstance($model,'file');
        if(!empty($uploadedFile)){
            $ext=$uploadedFile->getExtensionName();
            $fileName = "samilox$rnd.{$ext}";  // random number + file name
            }

             ////////// end 

            if($model->save()){
                    if(!empty($uploadedFile))  // check if uploaded file is set or not
                {
                 $uploadedFile->saveAs(Yii::app()->basePath.'/../cfillaf/'.$fileName);  // upload image to server 
                  $model->file = $fileName;

                  $model->save(false);
               }   

              echo " Work ";
              $this->redirect(array('cfiles/admin'));
       }
                else{

          echo " error";

                $this->redirect(array('cfiles/admin'));
                }
        }

         $this->layout='adminsidebar';
         if(Yii::app()->request->getIsAjaxRequest())
          echo $this->renderPartial('_form',array('model'=>$model),true,true);//This will bring out the view along with its script.

                else $this->render('create',array(
                        'model'=>$model,
                ));

        }

Thanks in advance

2
you have added the rule for update scenario, but you are showing code for the create method, that could be the problem - bool.dev

2 Answers

1
votes

remove 'on'=>'update' in model file rules function to get rid of ur problem.

array('file', 'file', 'types'=>'jpg,gif, png,pdf,rar,zip,doc,docx','allowEmpty'=>true, 'on'=>'update'),

0
votes

Thanks Bool.dev

Yes I forgot to add validate on insert scenario

Code :

array('file', 'file', 'types'=>'jpg,gif, png,pdf,rar,zip,doc,docx','allowEmpty'=>false, 'on'=>'insert'),