Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Save Image Name And Post Data Into Database

Tags:

codeigniter

I am working on a project where volunteers have to fill in registration form.

I want volunteers to be able to upload a profile image and save image name to database as well as the post data on the same form.

How can I achieve that?

like image 514
Gaurav Tiwari Avatar asked Mar 17 '23 03:03

Gaurav Tiwari


2 Answers

In the success part of upload form could do a if statement like below for update

Update

$user_info = $this->get_user();

if ($user_info) {

$image_info = $this->upload->data();

$data = array(
'username' => $user_info['username'],
'image' => $image_info['file_name']
);

// Only updates password if post value true
if(isset($_POST['password'])) {
   $data = array(
      'password' => $this->input->post('password');
   );
}


$this->db->where('id', $user_info['id']);
$this->db->update('tablename', $data);

}

Else In the success part of upload form could do insert like below

Insert

$image_info = $this->upload->data();

$data = array(
   'username' => $this->input->post('username'),
   'password' => $this->input->post('password')
   'image' => $image_info['file_name']
);


$this->db->insert('tablename', $data);

Upload Controller

<?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'] = '0'; // Unlimited
        $config['max_width']  = '0'; // Unlimited
        $config['max_height']  = '0'; // Unlimited

        $this->load->library('upload', $config);

        // Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
        $this->upload->initialize($config);

        $input_name = "userfile";

        if ( ! $this->upload->do_upload($input_name))
        {
            $error = array('error' => $this->upload->display_errors());

            $this->load->view('upload_form', $error);
        }
        else
        {


            $user_info = $this->get_user();

            if ($user_info) {

                $image_info = $this->upload_data();

                $data = array(
                    'username' => $user_info['username'],
                    'image' => $image_info['file_name']
                );

                $this->db->where('id', $user_info['id']);
                $this->db->update('tablename', $data);

            }

            $this->load->view('upload_success', $data);
        }
    }

    public function get_user() {

        // your user model data

    }
}
?>

View

<html>
<head>
<title>Upload Form</title>
</head>
<body>

<?php echo $error;?>

<?php echo form_open_multipart('upload/do_upload');?>
<input type="text" name="name"/>
<input type="password" name="password"/>
<input type="file" name="userfile" size="20" />

<br /><br />

<input type="submit" value="upload" />

</form>

</body>
</html>

Upload library

Codeigniter 2 http://www.codeigniter.com/userguide2/libraries/file_uploading.html

Codeigniter 3 http://www.codeigniter.com/user_guide/libraries/file_uploading.html

like image 183
Mr. ED Avatar answered Mar 18 '23 16:03

Mr. ED


your question is not clear ,

provide ,view ,controller as well. anyways see this post it will help you.

click here

or

use <?php echo form_open_multipart('yourcontroler/add');?> in your view file when dealing with image and text data.

in controller ,the best practice is to define two function one for image upload the other to validate ,and filter data.Like

             public function do_upload() {
                $path = '_assets/images/';
                $fileName = 'userpic.png';
                $config = array(
                    'allowed_types' => 'jpg|png|gif',
                    'upload_path' => $path,
                    'max_size' => '200',
                    'overwrite' => true,
                    'file_name' => $fileName,
                    'max_height' => "300",
                    'max_width' => "300",

                );

                $this->load->library('upload', $config);
                if (!$this->upload->do_upload('logo')) {
                    echo "error ";
                    die;
                } else {
                    $imageData = $this->upload->data();
                }

            }

and for data storing use simple function you usually do with form input.

like image 29
Abdul Manan Avatar answered Mar 18 '23 15:03

Abdul Manan