This question already has an answer here:
view:
$("#submit").on('click',function(e){
e.preventDefault();
product_name = $("#product_name").val();
category = $("#category").val();
var formData = new FormData();
$.each($("#product_image"), function (i, obj) {
$.each(obj.files, function (j, file) {
formData.append('product_image[' + i + ']', file);
});
});
formData.append('product_name', product_name);
formData.append('category', category);
$.ajax({
type:"POST",
data:formData,
processData: false,
contentType: false,
url:"<?php echo base_url(); ?>admin/products",
success:function(data){
alert(data);
}
});
});
Controller:
public function products()
{
$dataInfo = array();
$files = $_FILES;
$cpt = count($_FILES['product_image']['name']);
for($i=0; $i<$cpt; $i++)
{
$_FILES['product_image']['name']= $files['product_image']['name'][$i];
$_FILES['product_image']['type']= $files['product_image']['type'][$i];
$_FILES['product_image']['tmp_name']= $files['product_image']['tmp_name'][$i];
$_FILES['product_image']['error']= $files['product_image']['error'][$i];
$_FILES['product_image']['size']= $files['product_image']['size'][$i];
$this->upload->initialize($this->set_upload_options());
$this->upload->do_upload();
$dataInfo[] = $this->upload->data();
}
$data = array(
'product_name' => $this->input->post('product_name'),
'category' => $this->input->post('category'),
'product_image' => implode(",",array_column($dataInfo, 'product_image'))
);
$sql = $this->db->insert('add_product',$data);
if($sql == true)
{
echo 'New Product Added';
}
else
{
echo 'Unable to Proceed!';
}
}
private function set_upload_options()
{
$config = array();
$config['upload_path'] = ''.base_url().'resource/product/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['overwrite'] = FALSE;
return $config;
}
I have three input field i.e. product_name,category and product_image
. Now, I wants to move multiple images and insert product_image
name which is separated by comma(,) for example img1.jpg,img2.jpg,img3.jpg
like that. Now, when I alert reponse it show nothing. So, How can I solve ? Please help me.
expected output demo of mysql like
product_name category product_images
============ ======== ==============
men t-shirt MEN img1.jp,img2.jpg,img3.jpg
kids t-shirt kids img1.jp,img2.jpg,img3.jpg
Ok here a complete answer from A to Z of how to upload multiple files using ajax, first of all in the view, you can put as many file inputs as you want but as an array of course like this:
Then your ajax like this, no overhead whatsoever, just a normal submission:
But this code will pass
$_FILES
like this:And that's the problem, so we have to rearrange this array in your controller's method like this:
And this will give you a proper array like this:
Now you can loop through this array and
do_upload
with CodeIgniter, but first lets reinitialize our$_FILES
with the new array and then load upload library with our configs and loop through it like this:And that's it.
Maybe your ajax request is not success at all. I mean there are some errors in the middle process of uploading the image. Try add
error
option on your ajax declaration.Don't forget to enable your php error reporting and also checking the php error log will give you more information