I Have created a Form which contains 3 input(type["file"])
Student_Image, Father_Image, Mother_Image
I want to Upload Images in a folder, and Name Images According to me, and also save that image name into database.
you must add more than 1 image at time if your controller should be like this
public function upload_image($table_id){
$this->data['table_id'] = $table_id;
$this->data['data'] = $this->your_model->get($table_id);
if($this->input->post()) {
$upload_image = true;
$upload_path = FCPATH.'/uploads/upload_image';
$uploadedImageName = array();
for ($i=1;$i<=5;$i++){
$field_name ='image'.$i;
$temp_file_names = $this->file[$field_name]['name'];
if(isset($temp_file_names) && $temp_file_names!=''){
$file_name = time().'_'.$this->randomString(10).'.'.$this->getFileExtension($temp_file_names);
if(!$this->uploadImage($upload_path,$file_name,$field_name)){
$this->session->set_flashdata('error', $this->file_error);
} else {
$uploadedImageName[] = $this->file_data['file_name'];
}
} else {
$uploadedImageName[] = $this->input->post('old_image'.$i);
}
}
$update_data = array('Student_Image'=>json_encode($uploadedImageName));
if(!$this->your_model->updateimage($table_id,$update_data)){
$this->session->set_flashdata('error', 'Record couldn\'n updated. Please try again.');
} else {
$this->session->set_flashdata('success', 'Update successfully.');
redirect('/upload_image/'.$table_id);
}
}
$this->load->view('/upload_image',$this->data);
}
and
model
public function updateimage($table_id,$data){
$sql ="update tablename set ";
$update_data = array();
if(empty($data)){
return false;
}
public function get($table_id){
$sql ="select * from tablename where table_id = ?";
$rs = $this->db->query($sql,array($table_id));
$record = $rs->result();
return (array)$record[0];
}
$config['upload_path'] = 'uploads/images/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '2000';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
$data = [];
$errors = [];
foreach ($this->input->post('files') as $file_name)
{
if ($this->upload->do_upload($file_name))
{
$data[$file_name] = $this->upload->data();
}
else
{
$errors[$file_name] = $this->upload->display_errors();
}
}
Use below function
function upload_image()
{
$img1 = $this->_upload_image('Student_Image','YOUR_FOLDER_PATH','jpg|png|jpeg|gif',3000);
if($img1['status']){$filename1 = $img1['filename'];}
$img2 = $this->_upload_image('Father_Image','YOUR_FOLDER_PATH','jpg|png|jpeg|gif',3000);
if($img2['status']){$filename2 = $img2['filename'];}
$img3 = $this->_upload_image('Mother_Image','YOUR_FOLDER_PATH','jpg|png|jpeg|gif',3000);
if($img3['status']){$filename3 = $img3['filename'];}
}
function _upload_image($userfile,$image_path,$allowed,$max_size)
{
if($_FILES[$userfile]['name']!='')
{
if(!is_dir($image_path))
{
mkdir($image_path);
}
$config['upload_path'] = $image_path;
$config['allowed_types'] = $allowed;
$config['max_size'] = $max_size;
$img=$_FILES[$userfile]['name'];
$random_digit=rand(00,99999); //here you can change file name
$ext = strtolower(substr($img, strpos($img,'.'), strlen($img)-1));
$file_name=$random_digit.$ext;
$config['file_name'] = $file_name;
$this->ci->load->library('upload', $config);
if($this->ci->upload->do_upload($userfile))
{
return array('status'=>TRUE,'filename'=>$this->ci->upload->file_name);
}
else {return array('status'=>FALSE,'error'=>$this->ci->upload->display_errors('<span>','</span>'));}
}
}
you can try like this
$errors= array();
foreach($_FILES['gallery']['tmp_name'] as $key => $tmp_name ){
$file_name = $key.$_FILES['gallery']['name'][$key];
$file_size =$_FILES['gallery']['size'][$key];
$file_tmp =$_FILES['gallery']['tmp_name'][$key];
$file_type=$_FILES['gallery']['type'][$key];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
$desired_dir="assets/images/products/";
$array=array('pid'=>$insert_id,'imagepath'=>$desired_dir.$file_name);
if(empty($errors)==true){
if(is_dir($desired_dir)==false){
mkdir("$desired_dir", 0700); // Create directory if it does not exist
}
if(is_dir("$desired_dir/".$file_name)==false){
move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
}else{ // rename the file if another one exist
$new_dir="$desired_dir/".$file_name.time();
rename($file_tmp,$new_dir) ;
}
$this->db->insert('mx_products_images',$array);
}
}
<?php echo form_open_multipart('upload_controller/do_upload');?>
<div class="profilethumb">
<h4>Student's Image</h4>
<input type="file" name="S_image" id="image" class="btn btn-primary">
</div><!--profilethumb-->
<div class="profilethumb">
<h4>Father's Image</h4>
<br><input type="file" name="F_image" class="btn-primary"><br>
</div><!--profilethumb-->
<div class="profilethumb">
<h4>Mother's Image</h4>
<br><input type="file" name="M_image" class="btn-primary"><br>
</div><!--profilethumb-->
<div class="profilethumb">
<h4>Local Guardian Image</h4>
<br><input type="file" name="LG_image" class="btn-primary"><br>
</div><!--profilethumb-->
<input type="submit" value="submit detail" class="btn-primary" />
<?php echo "</form>"?>
This is my From details.. upload images into upload folder and save images name into S_Info Table into database.
Related
This is my controller file Login.php here I am fetching post data from the form which contains data of a vendor's profile there is to input for images one is profile pic other is company logo and rest data about name services etc.
When I upload a new pic it works fine, but if I try to update the profile by changing only company name then after clicking update button the previously uploaded profile pic disappears and the file name is also removed from the database.
<?php
public function profile() {
$login_email = $this->session->userdata('email_id');
$this->load->model('Vendormodel');
$vendor = $this->input->post();
print_r($vendor);
$ppic['profile_pic'] = $this->Vendormodel->get_pic($login_email);
$cpic['company_pic'] = $this->Vendormodel->get_cpic($login_email);
$service_id = $this->input->post('service');
unset($vendor['service']);
$loc_id = $this->input->post('locations');
unset($vendor['locations']);
$id1 = $this->Vendormodel->get_vendor_id($login_email);
if (isset($loc_id))
foreach ($loc_id as $lid) {
$post1[] = $this->Vendormodel->get_location($lid);
}
if (isset($loc_id))
foreach ($post1 as $loc) {
$this->Vendormodel->add_vendor_locations($id1, $loc);
}
$this->Vendormodel->add_vendor_profile($login_email, $vendor);
print_r($vendor);
if (isset($service_id))
foreach ($service_id as $id) {
$post[] = $this->Vendormodel->get_services($id);
}
if (isset($service_id))
foreach ($post as $service) {
$this->Vendormodel->add_vendor_services($id1, $service);
}
if ($_FILES) {
$vendor['company_pic'] = $_FILES['company_pic']['name'];
$vendor['profile_pic'] = $_FILES['profile_pic']['name'];
$ppic['profile_pic'] = $_FILES['profile_pic']['name'];
$cpic['company_pic'] = $_FILES['company_pic']['name'];
$this->Vendormodel->update_pic($ppic['profile_pic'], $login_email);
$this->Vendormodel->update_cpic($cpic['company_pic'], $login_email);
}
print_r($ppic);
$config['upload_path'] = './vendors_pic/';
$config['allowed_types'] = 'jpg|jif|png|jpeg';
$config['overwrite'] = false;
$this->load->library('upload', $config);
$field = 'profile_pic';
if ($this->upload->do_upload($field)) {
$temp = $this->upload->data();
$pic = $temp['file_name'];
} else {
$this->session->set_flashdata('message', "error uploading profile pic");
}
$config['upload_path'] = './vendors_pic/';
$config['allowed_types'] = 'jpg|jif|png|jpeg';
$config['overwrite'] = false;
$this->load->library('upload', $config);
$field1 = 'company_pic';
if ($this->upload->do_upload($field1)) {
$temp1 = $this->upload->data();
$pic1 = $temp1['file_name'];
} else {
$this->session->set_flashdata('message', "error uploading company pic");
}
$vendordash['det'] = $this->Vendormodel->vendor_details($login_email);
$this->session->set_userdata('name', $vendordash['det']->first_name);
$vendordash['services'] = $this->Vendormodel->vendor_services($id1);
$vendordash['locations'] = $this->Vendormodel->vendor_locations($id1);
$this->load->view('vendor/pro_header', $ppic);
$this->load->view('vendor/vendor_dashboard', $vendordash);
}
?>
I am creating a form with 20+ fields to submit the details of the employee's. In the form the employee has to fill their details and upload their document. There are five fields for documents namely (photo,idcard,licence,cv,attest) so the name of each uploaded document has to be stored in a particular field . If i upload all the files in sequence then it is working fine but how to insert the name of a file to their designated field if the employee only inserts one or two files.
Hope i am making sense.
controller
public function register()
{
//form validation
if($this->form_validation->run() === False){
$this->load->view('form');
}
else{
//uploading files
$number_of_files = sizeof(array_filter($_FILES['file']['tmp_name']));
$files = $_FILES['file'];
$errors = array();
for($i=0;$i<$number_of_files;$i++)
{
if($_FILES['file']['error'][$i] != 0)
{
$error[$i] = array('error' => 'Couldn\'t upload file '.$_FILES['file']['name'][$i]);
$this->load->view('form',$error);
}
}
//create a new directory for each new user
$dir = $this->input->post('fname').'_'.$this->input->post('country');
if( is_dir(FCPATH . 'uploads/'.$dir) === false )
{
mkdir(FCPATH . 'uploads/'.$dir);
}
$this->load->library('upload');
$config['upload_path'] = FCPATH . 'uploads/'.$dir;
$config['allowed_types'] = 'gif|jpg|png|docx';
for ($i = 0; $i < $number_of_files; $i++) {
$_FILES['file']['name'] = $files['name'][$i];
$_FILES['file']['type'] = $files['type'][$i];
$_FILES['file']['tmp_name'] = $files['tmp_name'][$i];
$_FILES['file']['error'] = $files['error'][$i];
$_FILES['file']['size'] = $files['size'][$i];
$this->upload->initialize($config);
// we retrieve the number of files that were uploaded
if ($this->upload->do_upload('file'))
{
$data['uploads'][$i] = $this->upload->data();
}
else
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('form',$error);
}
}
//assign names of uploaded files to insert in database
if($data){
foreach($data as $value){
$photo = FCPATH . 'uploads/'.$dir.$value[0]['file_name'];
$idProof = FCPATH . 'uploads/'.$dir.$value[1]['file_name'];
$cv = FCPATH . 'uploads/'.$dir.$value[2]['file_name'];
$license = FCPATH . 'uploads/'.$dir.$value[3]['file_name'];
$attest = FCPATH . 'uploads/'.$dir.$value[4]['file_name'];
}
}
$this->form_model->insert_users($photo,$idProof,$cv,$license,$attest);
redirect('form/registered');
}
}
model
public function insert_users($photo,$idProof,$cv,$license,$attest){
$data = array(
//other fields...
'other' => $this->input->post('other'),
'photo' => $photo,
'idProof' => $idProof,
'cv' => $cv,
'license' => $license,
'attest' => $attest
);
return $this->db->insert('employee',$data);
}
View
<input type='file' name='file[]' onchange="readURL(this);" />
<input type='file' name='file[]' onchange="readURL(this);" />
<input type='file' name='file[]' onchange="readURL(this);" />
<input type='file' name='file[]' onchange="readURL(this);" />
<input type='file' name='file[]' onchange="readURL(this);" />
I want to upload some files. I use codeigniter:
Html:
<input type="file" name="file1" />
<input type="file" name="file2" />
php:
$config['upload_path'] = './upload/';
$path = $config['upload_path'];
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['encrypt_name'] = 'TRUE';
$this->load->library('upload', $config);
foreach ($_FILES as $key => $value) {
if (!empty($value['tmp_name']) && $value['size'] > 0) {
if (!$this->upload->do_upload($key)) {
// some errors
} else {
// Code After Files Upload Success GOES HERE
$data_name = $this->upload->data();
echo $data_name['file_name'];
}
}
}
When I want to echo file name, I get 1.jpg and 2.jpg. But I want to have them separately and insert them into database.
How can I do this? Thank you :)
Add the the value from $data_name['file_name'] into an array and after your foreach loop do a insert_batch.
something like:
$filename_arr = array();
foreach ($_FILES as $key => $value) {
if (!empty($value['tmp_name']) && $value['size'] > 0) {
if (!$this->upload->do_upload($key)) {
// some errors
} else {
// Code After Files Upload Success GOES HERE
$data_name = $this->upload->data();
$filename_arr[] = $data_name['file_name'];
}
}
}
$this->db->insert_batch('mytable', $filename_arr);
I am trying to upload the file in codeigniter, but it not uploading, not even if or else are executing, not returning any error, only gives it the output
string(9) "image/png"
here is my code
controller:
$this->load->library('upload');
if($_FILES['categoryIcon']['tmp_name'])
{
$ext=end(explode(".",$_FILES['categoryIcon']['name']));
$filename=date('Ymdhis').rand().".".$ext;
$config['upload_path']=dirname($_SERVER["SCRIPT_FILENAME"])."/assets/images/categories/";
$config['upload_url']=base_url()."assets/images/categories/";
$config['file_name']=$filename;
$config['max_width'] = '2048';
$config['max_height'] = '2048';
$config['allowed_types'] = '*';
$this->upload->initialize($config);
if($this->upload->do_upload('categoryIcon'))
{
$data['categoryIcon']=$filename;
//$response=$this->ecommerce_model->add_new_category($data);
echo "uploaded";
}
else{
echo $this->upload->display_errors();
echo "not uploaded";
}
}
view page
<form action="" method="post" enctype="multipart/form-data" class="practice_form"> <input type="file" name="categoryIcon" id="image" class="form-control" accept="image/*"><input type="submit" value="Save Category" class="btn btn-primary"/>
I have a upload file where you could could do is <input type="file=" name="categoryIcon[]" multiple="multiple"/> and should pick it up you can change do_upload what ever you want.
Also change
This $config['upload_path'] = dirname($_SERVER["SCRIPT_FILENAME"])."/assets/images/categories/";
To This $config['upload_path'] = "./assets/images/categories/"; If your upload folder in on main directory you do not need dirname refer user guide http://www.codeigniter.com/user_guide/libraries/file_uploading.html
echo file data
'$file_info = $this->upload->data();'
'echo $file_info['file_name'];'
Just a example works for multiple codeigniter uploads.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Upload extends CI_Controller {
function index()
{
$this->get_list();
}
public function get_list() {
$this->load->view('upload_success');
}
function do_upload() {
$this->load->library('form_validation');
// You need to set a form set rules
//$this->form_validation->set_rules('name', 'Banner Name', 'required');
if ($this->form_validation->run()) {
$files = $_FILES;
$file_loop = count($_FILES['categoryIcon']['name']);
for($i= 0; $i < $file_loop; $i++) {
$_FILES['categoryIcon']['name'] = $files['categoryIcon']['name'][$i];
$_FILES['categoryIcon']['type'] = $files['categoryIcon']['type'][$i];
$_FILES['categoryIcon']['tmp_name'] = $files['categoryIcon']['tmp_name'][$i];
$_FILES['categoryIcon']['error'] = $files['categoryIcon']['error'][$i];
$_FILES['categoryIcon']['size'] = $files['categoryIcon']['size'][$i];
$this->upload->initialize($this->file_config());
if (!$this->upload->do_upload()) {
$this->get_form();
} else {
$filename = $files['categoryIcon']['name'][$i];
$this->get_list();
}
} else {
$this->get_form();
}
}
public function get_form() {
$data['error'] = $this->upload->display_errors('<div class="alert alert-info">', '</div>');
$this->load->view('upload_form', $data);
}
private function file_config() {
$config = array();
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['overwrite'] = TRUE;
return $config;
}
}
I have a form with four fileds like contactemail,contactname,category,comments as of now now i have to add image and doc input in a form,using form i have inserted data to db,how to upload image and doc in codeignatior on form submit
images need to upload in image folder and doc in docs folder
Here is my controller
public function form() {
$this->load->helper('form');
$data = $this->login_model->form();
//loading views
load-view-header
load view page
load-view-footer
}
here my model function
public function form() {
$contactemail = $this->input->post('contactemail');
$contactname = $this->input->post('contactname');
$category = $this->input->post('category');
$comments = $this->input->post('comments');
$data = array(
'contactemail' => $email,
'contactname' => $name,
'category' => $category,
'comments' => $comments
);
$this->db->insert('contact', $data);
return $data;
}
Here is an example. This was put together quickly and is completely untested...at best there may be errors and at worst memory has failed me and I totally missed something but may be a useful example. Let me know if it helps?
View:
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<!-- your other form fields for email, name, category, comments can go here-->
<input type="file" name="image" size="20" />
<input type="file" name="doc" size="20" />
<br /><br />
<input type="submit" value="Submit" />
</form>
Controller:
function form()
{
$this->load->helper(array('form', 'url'));
$config['upload_path'] = './images/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
$data['error'] = "";
//it would be good to be using the form validation class but here is a quick and dirty check for the submit
if (isset($_POST['submit']))
{
if ( ! $this->upload->do_upload('image'))
{
$data['error'] = $this->upload->display_errors();
}
else
{
$image_upload_data = $this->upload->data();
}
unset($config);
$config['upload_path'] = './docs/';
$config['allowed_types'] = 'doc|docx|txt';
$config['max_size'] = '2048';
$this->upload->initialize($config);
if ( ! $this->upload->do_upload('doc'))
{
$data['error'] .= "<br />".$this->upload->display_errors();
}
else
{
$doc_upload_data = $this->upload->data();
}
if(!empty($data['error']))
{
$this->load->view('form', $data);
}
else
{
$contactemail = $this->input->post('contactemail');
$contactname = $this->input->post('contactname');
$category = $this->input->post('category');
$comments = $this->input->post('comments');
$doc_file = $doc_upload_data['full_path'];
$image_file = $image_upload_data['full_path'];
$form_data = array(
'contactemail' => $email,
'contactname' => $name,
'category' => $category,
'comments' => $comments,
'doc_file' => $doc_file
);
$image_data['image_name'] = $image_file;
$this->login_model->form($form_data,$image_data);
$this->load->view('upload_success', $data);
}
}
else
{
$this->load->view('form', $data);
}
}
Model
public function form($form_data,$image_data) {
$this->db->insert('contact', $image_data);
$image_data['d_fk'] = $this->db->insert_id();
$this->db->insert('images', $image_data);
}