here image updated on database but not in directory - codeigniter

here controller page, here image name gets inserted into the database but the image does not go to the corresponding directory
if(isset($_POST['submit']))
{
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png|jpeg|pdf|mp4';
$this->load->library('upload', $config);
$this->upload->initialize($config);
$data = array
(
'student_name' => $this->input->post('dname'),
'student_email' => $this->input->post('demail'),
'student_mobile' => $this->input->post('dmobile'),
'student_address' => $this->input->post('daddress'),
'picture' => $_FILES['picture']['name']
);
}
$insertuserdata=$this->Inserts_model->form_insert($data);
here view page
<form action="<?php echo site_url('Insert_ctrl/index/'); ?>"
method="post" enctype="multipart/form-data">
<label>NAME</label>
<input type="text" name="dname" required onkeyup="textt(this)"
id="name"><br>
<label>email</label>
<label>Picture</label>
<input class="form-control" type="file" name="picture" /><br>
<input type="submit" name="submit" value ="submit">
</form>

You should try like this
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png|jpeg|pdf|mp4';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if(!$this->upload->do_upload('picture'))
{
$error = array('error' => $this->upload->display_errors());
print_r($error);
}
else{
$data = array('upload_data' => $this->upload->data());
print_r($data);
}

Related

[Codeigniter]Multiple upload cant insert to database and not uploading to directory

How to upload multiple images with Codeigniter 4.x ?
I tried to loop the do_upload function in my model but it's not working, and I tried another code that I got from GitHub but still, none of it works.
This is my view:
<div class="section-body">
<h2 class="section-title">Entry Group Passanger</h2>
<div class="row">
<div class="col-md-12">
<form action="<?= base_url('passanger/addgroup') ?>" method="POST" enctype="multipart/form-data">
<?php for($i=1;$i<=$pax['pax'];$i++) : ?>
<h5>Passanger ke-<?= $i ?></h5>
<div class="form-row">
<div class="col-md-6">
<label for="fullname">Fullname</label>
<input type="text" class="form-control" name="name[]">
<?= form_error('name', '<small class="text-danger pl-3">', '</small>'); ?>
</div>
<div class="col-md-6">
<label for="gender">Gender</label>
<select class="form-control select2-input" name="gender">
<option>-- Select Gender --</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
<option value="Other">Other</option>
</select>
<?= form_error('gender', '<small class="text-danger pl-3">', '</small>'); ?>
</div>
</div>
<div class="form-row">
<div class="col-md-12 mb-4 mt-2">
<label for="">Upload Passport</label>
<input type="file" name="upload_passport[]" id="input-file-now" class="dropify" />
</div>
</div>
this is my model :
public function addGroup()
{
$user = $this->db->get_where('user', ['username' => $this->session->userdata('username')])->row_array();
$pax = $this->getPaxById();
date_default_timezone_set('Asia/Jakarta');
$upload_image = $_FILES['upload_passport[]']['name'];
if ($upload_image) {
$config['upload_path'] = './assets/img/uploads/passport';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$this->load->library('upload', $config);
for($i=0;$i<$pax['pax'];$i++) {
if ($this->upload->do_upload('upload_passport[$i]')) {
$new_image = $this->upload->data('file_name');
} else {
echo $this->upload->display_errors();
}
}
}
$name = $this->input->post("name[]");
$gender = $this->input->post("gender[]");
$birthdate = $this->input->post("birthdate[]");
$no_passport = $this->input->post("no_passport[]");
$expire_passport = $this->input->post("expire_passport[]");
$destination = $this->input->post("destination[]");
$date = $this->input->post("date[]");
$dp1 = "0";
$dp2 = "0";
$lunas = "0";
$type = "Group";
$status = "Not Complete";
$permission = "0";
$upload_passport = $new_image;
$upload_dp1 = "default.png";
$upload_dp2 = "default.png";
$date_created = date('d/m/Y H:i:s');
$data = [];
$jumlah = $pax['pax'];
for($x=0;$x<$jumlah;$x++) {
array_push($data, [
'name'=>$this->input->post("name[$x]"),
'id_user'=> $user['id_user'],
'gender'=>$this->input->post("gender[$x]"),
'birthdate'=>$this->input->post("birthdate[$x]"),
'no_passport'=> $this->input->post("no_passport[$x]"),
'expire_passport'=> $this->input->post("expire_passport[$x]"),
'destination'=> $this->input->post("destination[$x]"),
'date'=> $this->input->post("date[$x]"),
'dp1'=> $dp1,
'dp2'=> $dp2,
'lunas'=> $lunas,
'pax'=> $pax['pax'],
'type'=> $type,
'status'=> $status,
'permission'=> $permission,
'upload_passport'=> $new_image,
'upload_dp1'=> $upload_dp1,
'upload_dp2'=> $upload_dp2,
'date_created'=> $date_created
]);
var_dump($data); die;
}
$this->db->insert_batch("passanger", $data);
}
What I want to get is:
array('','','upload_image'), array('','','upload_image')
When insert it to database but when I do it the upload just gets output null and it's not even uploaded to my uploads directory. I would really appreciate it if you help me, I've been stuck on this for 3 days. Thank you.
for ($i=0; $i < sizeof($_FILES['image']['name']) ; $i++) {
$_FILES['file']['name'] = $_FILES['image']['name'][$i];
$_FILES['file']['type'] = $_FILES['image']['type'][$i];
$_FILES['file']['tmp_name'] = $_FILES['image']['tmp_name'[$i];
$_FILES['file']['error'] = $_FILES['image']['error'][$i];
$_FILES['file']['size'] = $_FILES['image']['size'][$i];
$config['upload_path'] = PRODUCT_IMAGE_UPLOAD_PATH;
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['encrypt_name'] = TRUE;
$this->load->library('upload', $config);
if ($this->upload->do_upload('file')){
$images[] = $this->upload->data('file_name');
}else {
echo $this->upload->display_errors();
}
}
Try this in Codeigniter 4
in your controller add this
$image_model = new App\Models\Images(); // Your model name that is load your model
if($imagefiles = $this->request->getFiles())
{
foreach($imagefiles['uploadImages'] as $img)
{
if ($img->isValid() && ! $img->hasMoved())
{
$image_name = $img->getRandomName(); // This is applicable if you want to change the name of the images
if($image_model->save_images($image_name))
{
$img->move(WRITEPATH.'uploads/images/ads', $image_name); // WRITEPATH.'uploads/images/ads' is the part you wish to save you file to
}
}
}
}
In your Model e.g Image model i have a method call save_images()as this
use Codeigniter\Model
class Images extends Model{
public function save_images($image = '')
{
// We set the column 'name' to be allow for data entry into the db. note this is mandatory for now.
// hope it will change in feature. 'name' is the column in database table where you will save the image name
// this command the CI4 db to select only the image column in the database table
$this->allowedFields = ['name'];
return $this->db->table('images')->insert(['name' => $image]);
// echo $sql = $this->db->getLastQuery();
}
}
Then in your html file input, do this
<form action="" method="post" enctype="multipart/form-data">
<div class="form-group">
<input type="file" name="uploadImages[]" multiple>
</div>
</form>
I hope this will work for you

CodeIgniter 3 upload image just reloading the page

I am trying to make an upload form but when I submit it, it just refreshes the form, does not even go back to the designated route and no message is shown. Here is my add() function:
public function add()
{
if ($this->input->post()) {
$data['upload_path'] = './uploads/';
$data['allowed_types'] = 'jpg|png|gif';
$data['max_size'] = '500';
$data['max_width'] = '1024';
$data['max_height'] = '768';
$this->load->library('upload', $data);
if ($this->upload->do_upload('imagem')) {
$image_data = $this->upload->data();
$this->session->set_flashdata('message', 'Imagem \'' . $image_data['file_name'] . '\' adicionada');
} else {
$this->session->set_flashdata('message', 'Erro: ' . $this->upload->display_errors());
}
redirect('/admin/banners', 'refresh');
}
$data['page'] = $this->config->item('admin_template_dir_admin') . '/banners/add';
$data['module'] = 'admin';
$this->load->view($this->_container, $data);
}
The form:
<form action="/admin/banners/adicionar" method="POST" enctype="multipart/form-data">
<div class="form-group">
<small>Imagens de até 1024x768</small>
</div>
<div class="form-group">
<label for="selecionar_imagem">Selecionar Imagem</label>
<input type="file" name="imagem" required/>
</div>
<hr/>
<div class="form-group">
<button class="btn btn-primary pull-right">Adicionar</button>
</div>
</form>
Am I missing something?
I made it. It seems I did have to modify the way I was doing the things. I had to create a separated method upload(), instead of doing that if condition inside of the same method I was rendering the view.
public function add()
{
$data['page'] = $this->config->item('admin_template_dir_admin') . '/banners/add';
$data['module'] = 'admin';
$this->load->view($this->_container, $data);
}
public function upload()
{
$this->load->library('upload', array(
'upload_path' => './uploads/',
'allowed_types' => 'jpg',
'max_size' => '5000',
'overwrite' => true
));
if ($this->upload->do_upload('imagem')) {
$this->session->set_flashdata('message', 'Imagem de Banner adicionada');
} else {
$this->session->set_flashdata('message', 'Erro: ' . $this->upload->display_errors());
}
redirect('/admin/banners', 'refresh');
}
And then in the form, modify the method to /admin/banners/upload.

Not displaying error when using upload multi file in codeigniter 2.0

I'm very new in codeigniter. I have a problem when upload multi file in codeigniter.
My upload form can upload multi files, resize and save them to database, everything is Ok, only one thing is not ok : not display error. Example: maximum file is 2MB, i choose file 3MB, it's not display message "The file you are attempting to upload is larger than the permitted size." The same error when i click button upload but not choose a file. The view will display like a image as link. (i'm not enought reputation to post images)
https://drive.google.com/file/d/0B2zpQIbKaLa6Z2Z6LXFrNXlVRUk/view?usp=sharing
This is my Controller:upload.php
private function _upload_files($field='userfile'){
$files = array();
foreach( $_FILES[$field] as $key => $all )
foreach( $all as $i => $val )
$files[$i][$key] = $val;
$files_uploaded = array();
for ($i=0; $i < count($files); $i++) {
$_FILES[$field] = $files[$i];
if ($this->upload->do_upload($field))
$files_uploaded[$i] = $this->upload->data($files);
else
//$files_uploaded[$i] = null;
$files_uploaded[$i] = $this->upload->display_errors();
}
return $files_uploaded;
}
public function do_upload(){
$data['error']="";
$this->_data['loadPage']="upload/upload_view";
$this->load->model('Mcategorie');
$this->_data["categories"] = $this->Mcategorie->listAllCate();
$this->load->model('Malbum');
$this->_data['albums']=$this->Malbum->listAllAlbum1();
$user_folder = './uploads/'.$this->session->userdata('username');
$thumb_folder = './uploads/'.$this->session->userdata('username').'/thumbnail/';
if(!is_dir($user_folder)){
mkdir($user_folder, 0777);
}
if(is_dir($user_folder)){
if(!is_dir($thumb_folder))
mkdir($thumb_folder,0777);
}
if($this->input->post("ok")){
$config['upload_path'] = $user_folder;
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '2048';
$config['max_width'] = '';
$config['max_height'] = '';
$config['overwrite'] = FALSE;
$config['remove_spaces'] = TRUE;
$this->load->library("upload",$config);
$this->load->library("image_lib");
if ($_FILES['image_list']) {
$images_upload= $this->_upload_files('image_list');
//echo "<pre>";
//print_r($images_upload);exit;
foreach($images_upload as $data){
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/'.$this->session->userdata('username').'/'.$data['file_name'];
$config['create_thumb'] = TRUE;
$config['new_image'] = './uploads/'.$this->session->userdata('username').'/thumbnail/'.$data['file_name'];
$config['maintain_ratio'] = FALSE;
$config['width'] = 400;
$config['height'] = 300;
$this->image_lib->initialize($config);
$this->image_lib->resize();
$file = array(
'name' => $data['raw_name'].$data['file_ext'],
'thumb_name' => 'thumb_'.$data['raw_name'].$data['file_ext'],
'date' => date("Y-m-d"),
'userid' => $this->session->userdata('userid'),
'username' => $this->session->userdata('username'),
'description' => $this->input->post("description"),
'roleid' => $this->session->userdata("roleid"),
'public' => $this->input->post("kiet"),
'albumid' => $this->input->post("album"),
'categoryid' => $this->input->post("cat"),
);
$this->Mupload->insert_images($file);
}
redirect(base_url()."default/user/profile","refresh");
}
}
$this->load->view ( $this->_data['path'], $this->_data);
}
This is my view: upload_view.php
<div class="upload container col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="panel panel-info">
<div class="panel-heading"><strong>Upload Files</strong> <small>Sao Bac Dau Photo Sharing</small></div>
<div class="panel-body">
<!-- Standar Form -->
<form action="<?php echo base_url()."default/upload/do_upload"?>" method="post" enctype="multipart/form-data">
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6">
<label> Chọn file ảnh cần upload (jpg, jpeg, gif, png) : </label>
<div class="error col-xs-12 col-sm-12 col-md-12 col-lg-12 clear-css" style="color:#FF0081; font-weight: bold">
<?php if(isset($error)){echo $error; }?>
</div>
<div class="input-group">
<span class="input-group-btn" >
<span class="btn btn-primary btn-file">
Browse … <input type="file" multiple id="image_list" name="image_list[]" accept="image/*" >
</span>
</span>
<input type="text" class="form-control" readonly>
</div>
<input type="submit" name="ok" class="btn btn-md btn-primary" value="Upload Photo" >
</div>
</form>
</div>
</div>
What should i do to display error ? Sorry if my english is so bad. thank in advance for your help.
You will store error in $files_uploaded[$i] = $this->upload->display_errors(); but not use of this to display error so you need to fetch error from this array and display it on view.
Please see below code.
<?php
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
}
?>

Uploading multiple file using codeigniter

I got a problem with multiple upload file using codeigniter. I've tried many method before but still no success.
Here is my code.
View
<?php echo form_open_multipart('staff/upload_files', array('id' => 'form_checkbox')); ?>
Inside table:
<tr>
<th width="20%">Select File :</th>
<td>
<input type="file" name="userfile[]" value="" /> <span class="green">[Max File Upload: 2MB]</span><br>
<input type="file" name="userfile[]" value="" /> <span class="green">[Max File Upload: 2MB]</span><br>
<input type="file" name="userfile[]" value="" /> <span class="green">[Max File Upload: 2MB]</span>
</td>
</tr>
Controller
function upload_files() {
$data['studentid'] = $studentid;
if ($this->input->post('submit')) {
$config['upload_path'] = './upload/announcement/collegecode/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '2048';
$config['max_width'] = '0';
$config['max_height'] = '0';
$config['overwrite'] = FALSE;
$this->load->library('upload', $config);
if (!$this->upload->do_upload()) {
$this->session->set_flashdata('msg', 'error: ' . $this->upload->display_errors());
} else {
$this->session->set_flashdata('msg', 'success:Successfully Upload Student Photo');
}
}
$this->template->load('template', 'staff/announcement', $data);
}
I've also tried this method, but no file was uploaded.
$config['upload_path'] = './upload/announcement/collegecode/';
$path=$config['upload_path'];
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '2048';
$config['max_width'] = '1920';
$config['max_height'] = '1280';
$this->load->library('upload');
foreach ($_FILES as $key => $value)
{
if (!empty($key['userfile']))
{
$this->upload->initialize($config);
if (!$this->upload->do_upload($key))
{
$errors = $this->upload->display_errors();
flashMsg($errors);
}
else
{
// Code After Files Upload Success GOES HERE
}
}
}

How can i insert data to mysql database with image name which will be auto upload image without submit and instant display

My code is below
View
<form id="form1" name="form1" method="post" enctype="multipart/form-data" action="<?php echo base_url();?>index.php/setup_con/add_user_info">
Picture <input name="userfile" type="file" />
Name <input name="name" type="text" />
<input name="" type="submit" />
</form>
Controller
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '800';
$config['max_width'] = '184';
$config['max_height'] = '142;
$this->load->library('upload', $config);
if (!$this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
echo $error;
}
else
{
$data = array('upload_data' => $this->upload->data());
$img = $data ['upload_data']['file_name'];
$data = $this->setup_model->add_user_info($img);
}
Model
$name = $this->input->post('name');
$img = $img
$data = array (
'img' =>$img,
'name' =>$name
);
$this->db->insert('user',$data);
Normally i can do it
Basically ,i want to do at first auto image upload without submit(may be via ajax) and
instantly display then i will submit then insert data to user table with image name and name.
Please help me how can i solve this problem
Sorry if I have misread your question, but this sounds like a really long way of asking how to preview an image before upload. Here is a way of doing that before you do any upload, you can then do your actual image upload along with your database stuff all together on submit.
HTML
<img id="preview_img" src="" />
<input id='img_upload' type="file" name="userfile" />
JQUERY
$('body').on("change", "#img_upload", function(event) {
if (this.files && this.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$('#preview_img').attr('src', e.target.result);
}
reader.readAsDataURL(this.files[0]);
}
});

Resources