php - Yii2 save image to database as base64 -


i trying save image base64 database. when submit form getting image null. couldn't understand what's wrong.

view:

<div class="content">                 <?php $form = activeform::begin([                     'id' => 'products-add-form',                     'action' => ['products/product-add-form'],                     'method' => 'post',                     'options' => [                         'class' => 'products-tbl-style',                         'enctype' => 'multipart/form-data',                     ]                 ]); ?>                 <?= $form->field($model, 'productname'); ?>                 <?= $form->field($model, 'cost'); ?>                 <?= $form->field($model, 'available')->dropdownlist(['y' => 'yes', 'n' => 'no']); ?>                 <?= $form->field($model, 'image')->fileinput(['class'=>'btn btn-primary']); ?>                 <?= html::submitbutton('save', ['class'=>'btn btn-success products-save-btn']); ?>                 <?php activeform::end(); ?>             </div> 

controller:

if($model->load(yii::$app->request->post())){     $file = uploadedfile::getinstance($model,'image');     var_dump($file->name);     var_dump($file);     var_dump($_files); } 

model:

public function rules()     {         return [             [['productname', 'cost', 'available', 'image'], 'required'],             [['cost'], 'number'],             [['available'], 'string', 'max' => 1],             [['image'], 'string'],             [['productname'], 'string', 'max' => 100]         ];     } 

here jquery code, submitting form data via ajax, cause problem?

js:

$("form#products-add-form").on('beforesubmit', function(e){     var form = $(this);     $.post(         form.attr('action'),         form.serialize()         )         .done(function(result){             if(result == 1){                 form.trigger("reset");                 $.pjax.reload({container:'#products-table'});                 $.notify({                     icon: "pe-7s-check",                     message: "new product added"                  },{                     type: type[2],                     timer: 10,                     placement: {                         from: 'top',                         align: 'right'                     }                 });              }             else {                 alert(result);             }         }).fail(function(){         console.log("server error");     });     return false; }); 

to send files via ajax shoud use formdata. construct formdata object contains data existing <form>, specify form element when creating formdata object:

$("form#products-add-form").on('beforesubmit', function(e){     $.post(         form.attr('action'),         new formdata(this) /* form object */     )     /* other code here */ }); 

upd: ts mentioned should processdata set false. it's impossible set $.post, need use $.ajax


Comments

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -