 <p>First thing to remember is CI does not add <code>$_FILES</code> to the input object. You will need to access those like <code>$_FILES['img1']</code> etc. So these:</p> <pre><code>'img1'=&gt;$this-&gt;input-&gt;post('img1'),//image path is not inserting But all other fields are inserting into db 'img2'=&gt;$this-&gt;input-&gt;post('img2'),//image path is not inserting </code></pre> <p>should be something like:</p> <pre><code>'img1'=&gt;$_FILES['img1']['name'],//image path is not inserting But all other fields are inserting into db 'img2'=&gt;$_FILES['img2']['name'],//image path is not inserting </code></pre> <p>depending on what you expect to be storing in the database. You can rename files, etc through the upload class. I would suggest reading over those <a href="http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html" rel="nofollow">docs.</a></p> <p>Secondly, you don't appear to be calling the actual upload method:</p> <pre><code>$this-&gt;upload-&gt;do_upload() </code></pre> <p>Not sure if you needed this but... If you want multiple configs, you have to redefine the config for multiple files if you want them to have different paths...</p> <pre><code>$config['upload_path'] = 'uploads/'; $config['allowed_types'] = 'gif|jpg|jpeg|png'; $config['max_size'] = '1000'; $config['max_width'] = '1920'; $config['max_height'] = '1280'; $this-&gt;load-&gt;library('upload', $config); $this-&gt;upload-&gt;do_upload("img1"); $config['upload_path'] = 'some_other_dir/'; $config['allowed_types'] = 'gif|jpg|jpeg|png'; $config['max_size'] = '1000'; $config['max_width'] = '1920'; $config['max_height'] = '1280'; $this-&gt;upload-&gt;initialize($config); $this-&gt;upload-&gt;do_upload("img2"); </code></pre> <p>and if you don't want them to have different paths, you can just load in the library as you do in your example and call <code>do_upload()</code> with no params passed.</p> <p>If i missed the point or you need more info let me know and I may update.</p>