如何在数据库中上传图像保存在文件夹中?

时间:2014-07-25 12:46:26

标签: codeigniter

我是CI新手。任何人都可以帮我为CI 2.0提供图片上传教程。 我在资产文件夹中创建了一个文件夹 Product_image 。我的表名是 tbl_product 。我的控制器页面是产品,代码是:

<?php 
include_once('application/backend/controllers/dashboard.php');

 class Product extends Dashboard {
    function _construct(){
        parent::_construct();
        $this->load->model('product_model');
}

 public function index() {

   $this->islogin();
   $data=$this->generateCommonItems();
   $this->load->model('product_model');
   $data['page_title']="List of Products";
   $data['page_heading']="List of Products";
   $data['listAllProduct']=$this->product_model->listAllProduct();
   $this->load->view('products/listproduct',$data);
}

function addproduct() {
    $this->data['title'] = 'Add Product';

    //validate form input
    $this->form_validation->set_rules('prod_name', 'Product name',     'required|xss_clean');
    $this->form_validation->set_rules('prod_des', 'Description', 'required|xss_clean');
    $this->form_validation->set_rules('price', 'Price', 'required|xss_clean');
    $this->form_validation->set_rules('prod_image', 'Picture', 'required|xss_clean');

    if ($this->form_validation->run() == true)
    {       
        $data = array(
            'prod_name'             => $this->input->post('prod_name'),
            'prod_des'      => $this->input->post('prod_des'),
            'price'             => $this->input->post('price'),
            'prod_image'            => $this->input->post('prod_image')
        );

        $this->product_model->insert_product($data);
        redirect('product/addproduct');

    } else {
        $data=$this->generateCommonItems();
        //display the add product form
        //set the flash data error message if there is one

        $this->data['prod_name'] = array(
            'name'      => 'name',
            'id'        => 'name',
            'type'      => 'text',
            'style'     => 'width:300px;',
            'value'     => $this->form_validation->set_value('name'),
        );          
        $this->data['prod_des'] = array(
            'name'      => 'description',
            'id'        => 'description',
            'type'      => 'text',
            'cols'      =>  60,
            'rows'      =>  5,
            'value'     => $this->form_validation->set_value('description'),
        );
        $this->data['price'] = array(
            'name'      => 'price',
            'id'        => 'price',
            'type'      => 'text',
            'style'     => 'width:40px;text-align: right',
            'value'     => $this->form_validation->set_value('price'),
        );
        $this->data['prod_image'] = array(
            'value' => $this->form_validation->set_value('prod_image'),
        );

        $this->load->view('includes/header',$data);
        $this->load->view('products/product_form', $this->data);
                    $this->load->view('includes/footer',$data);
    }
}

 public function delete($prod_id) {

   $this->islogin();
   $this->load->model('product_model');
    if($this->product_model->deleteByid($prod_id))
        redirect('product/index');
}

function edit_product($prod_id) {
    $product = $this->product_model->get_product($prod_id);

    $this->data['title'] = 'Edit Product';

    //validate form input
    $this->form_validation->set_rules('prod_name', 'Product name', 'required|xss_clean');$this->form_validation->set_rules('description', 'Description', 'required|xss_clean');
    $this->form_validation->set_rules('price', 'Price', 'required|xss_clean');
    $this->form_validation->set_rules('prod_image', 'Picture', 'required|xss_clean');

    if (isset($_POST) && !empty($_POST))
    {       
        $data = array(
            'prod_name'                 => $this->input->post('prod_name'),
            'prod_des'          => $this->input->post('prod_des'),
            'price'                 => $this->input->post('price'),
            'prod_image'                => $this->input->post('prod_image'),
        );

        if ($this->form_validation->run() === true)
        {
            $this->product_model->update_product($prod_id, $data);          
            redirect(base_url().'product/edit/'.$prod_id);
        }           
    }       
    $this->data['tbl_product'] = $product;

    //display the edit product form
    $this->data['prod_name'] = array(
        'name'      => 'name',
        'id'        => 'name',
        'type'      => 'text',
        'style'     => 'width:300px;',
        'value'     => $this->form_validation->set_value('name', $product['name']),
    );

    $this->data['prod_des'] = array(
        'name'      => 'description',
        'id'        => 'description',
        'type'      => 'text',
        'cols'      =>  60,
        'rows'      =>  5,
        'value'     => $this->form_validation->set_value('description', $product['description']),
    );

    $this->data['price'] = array(
        'name'      => 'price',
        'id'        => 'price',
        'type'      => 'text',
        'style'     => 'width:40px;text-align: right',
        'value'     => $this->form_validation->set_value('price', $product['price']),
    );

    $this->data['prod_image'] = array(
        'name'  => 'picture',
        'id'    => 'picture',
        'type'  => 'text',
        'style' => 'width:250px;',
        'value' => $this->form_validation->set_value('prod_image', $product['picture']),
    );

    $this->load->view('products/edit_product', $this->data);
}

}

我的模型页面是 product_model

<?php class Product_model extends CI_Model {

 function __construct() {

     parent::__construct();
}

function listAllProduct() {
    $query = $this->db->select('*')->from('tbl_product')->get();
    //return $query = result();
    //$query = $this->db->query("select * from tbl_product");
    return $query->result();    
}

function get_product($prod_id) {
    $this->db->select('prod_id, prod_name, prod_des, price, prod_image');
    $this->db->where('prod_id', $prod_id);
    $query = $this->db->get('tbl_product');

    return $query->row_array();
}

public function insert_product($data) {
    if ($this->db->insert('tbl_product', $data))
        return true;
    else {
        return false;
    }
}

public function update_product($prod_id, $data) {
    $this->db->where('prod_id', $prod_id);
    $this->db->update('tbl_product', $data);
}

function deleteByid($prod_id) {
    $this->db->where('prod_id', $prod_id);
    if ($this->db->delete('tbl_product')) {
        return true;
    } else {
        return false;
    }

查看:

    <h2 align="center">Add Product</h2>
     <?php echo form_open("product/addproduct");?>
     <table width="700" border="1" cellpadding="0" cellspacing="2" align="center">
        <tr>
            <td width="130" align="right" bgcolor="#FFFFFF">Product Name: </td>
            <td><?php echo form_input($prod_name);?></td>
        </tr>
        <tr>
            <td width="130" align="right" bgcolor="#FFFFFF">Product Description: </td>
            <td><?php echo form_textarea($prod_des); ?></td>
        </tr>
        <tr>
            <td align="right" bgcolor="#FFFFFF">Price:</td>
            <td><?php echo form_input($price); ?></td>
        </tr>
        <tr>
            <td align="right" bgcolor="#FFFFFF">Picture:</td>
            <td><?php echo form_input($prod_image); ?></td>
        </tr>
        <tr>
            <td align="right" bgcolor="#FFFFFF">&nbsp;</td>
            <td><?php echo form_submit('submit', 'Submit');?>
        </tr>
    </table>
<?php echo form_close(); ?>

表单页面视图:

      <h2 align="center">Add Product</h2>
      <?php echo form_open("product/addproduct");?>
      <table width="700" border="1" cellpadding="0" cellspacing="2" align="center">
        <tr>
            <td width="130" align="right" bgcolor="#FFFFFF">Product Name: </td>
            <td><?php echo form_input($prod_name);?></td>
        </tr>
        <tr>
            <td width="130" align="right" bgcolor="#FFFFFF">Product Description: </td>
            <td><?php echo form_textarea($prod_des); ?></td>
        </tr>
        <tr>
            <td align="right" bgcolor="#FFFFFF">Price:</td>
            <td><?php echo form_input($price); ?></td>
        </tr>
        <tr>
            <td align="right" bgcolor="#FFFFFF">Picture:</td>
            <td><?php echo form_input($prod_image); ?></td>
        </tr>
        <tr>
            <td align="right" bgcolor="#FFFFFF">&nbsp;</td>
            <td><?php echo form_submit('submit', 'Submit');?>
        </tr>
    </table>
<?php echo form_close(); ?>

我很感谢他/她通过检查错误n错误给我这个错误代码的解决方案?

2 个答案:

答案 0 :(得分:1)

1:在表单中上传文件时,您必须使用属性open_multipart:

<?php echo form_open_multipart('product/addproduct');?>

2:从表单验证中删除attrribute文件:删除它:

$this->form_validation->set_rules('prod_image', 'Picture', 'required|xss_clean');

3:使用此命令将文件保存在文件夹中:

$config['upload_path'] = './asset/Product_image/'; //The path where the image will be save
$config['allowed_types'] = 'gif|jpg|png'; //Images extensions accepted
$config['max_size'] = '2048'; //The max size of the image in kb's
$config['max_width']  = '1024'; //The max of the images width in px
$config['max_height']  = '768'; //The max of the images height in px
$config['overwrite'] = TRUE; //If exists an image with the same name it will overwrite. Set to false if don't want to overwrite
$this->load->library('upload', $config); //Load the upload CI library
if (!$this->upload->do_upload('userfile')){
    $uploadError = array('upload_error' => $this->upload->display_errors()); 
    $this->set_flashdata('uploadError', $uploadError, $urlYouWantToReturn); //If for some reason the    upload could not be done, returns the error in a flashdata and redirect to the page you specify in $urlYouWantToReturn
    exit;
}

4:之后,你将获取文件名以保存数据库中的文件引用。在右下方:

$file_info = $this->upload->data('userfile');
$file_name = $file_info['file_name']; //Now you got the file name in the $file_name var. Use it to record in db.
//You can assign it to your data array to pass to your update_product function.

5:现在,整个代码合并:

function addproduct() {
$this->data['title'] = 'Add Product';

//validate form input
$this->form_validation->set_rules('prod_name', 'Product name',     'required|xss_clean');
$this->form_validation->set_rules('prod_des', 'Description', 'required|xss_clean');
$this->form_validation->set_rules('price', 'Price', 'required|xss_clean');

if ($this->form_validation->run() == true)
{
    $config['upload_path'] = './asset/Product_image/'; //The path where the image will be save
    $config['allowed_types'] = 'gif|jpg|png'; //Images extensions accepted
    $config['max_size']    = '2048'; //The max size of the image in kb's
    $config['max_width']  = '1024'; //The max of the images width in px
    $config['max_height']  = '768'; //The max of the images height in px
    $config['overwrite'] = TRUE; //If exists an image with the same name it will overwrite. Set to  false if don't want to overwrite
    $this->load->library('upload', $config); //Load the upload CI library
    if (!$this->upload->do_upload('userfile')){
        $uploadError = array('upload_error' => $this->upload->display_errors()); 
        $this->set_flashdata('uploadError', $uploadError, $urlYouWantToReturn); //If for some reason the upload could not be done, returns the error in a flashdata and redirect to the page you specify in $urlYouWantToReturn
       exit;
    }
    $file_info = $this->upload->data('userfile');
    $file_name = $file_info['file_name']; //Now you got the file name in the $file_name var. Use it to record in db.
    $data = array(
        'prod_name' => $this->input->post('prod_name'),
        'prod_des'  => $this->input->post('prod_des'),
        'price'     => $this->input->post('price'),
        'prod_image'=> $file_name,
    );

    $this->product_model->insert_product($data);
    redirect('product/addproduct');

} else {
    $data=$this->generateCommonItems();
    //display the add product form
    //set the flash data error message if there is one

    $this->data['prod_name'] = array(
        'name'      => 'name',
        'id'        => 'name',
        'type'      => 'text',
        'style'     => 'width:300px;',
        'value'     => $this->form_validation->set_value('name'),
    );          
    $this->data['prod_des'] = array(
        'name'      => 'description',
        'id'        => 'description',
        'type'      => 'text',
        'cols'      =>  60,
        'rows'      =>  5,
        'value'     => $this->form_validation->set_value('description'),
    );
    $this->data['price'] = array(
        'name'      => 'price',
        'id'        => 'price',
        'type'      => 'text',
        'style'     => 'width:40px;text-align: right',
        'value'     => $this->form_validation->set_value('price'),
    );
    $this->data['prod_image'] = array(
        'value' => $this->form_validation->set_value('prod_image'),
    );

    $this->load->view('includes/header',$data);
    $this->load->view('products/product_form', $this->data);
    $this->load->view('includes/footer',$data);
}

}

这是我在CI项目中使用的,希望它有所帮助!

答案 1 :(得分:0)

您可以通过为图片提供enctype属性来上传图片。

<?php echo form_open_multipart('product/addproduct');?>
      <input type="file" name="userfile" size="20" />
      <input type="submit" value="Submit">
<?php echo form_close();?>

CodeIgniter还有一些可以在文档中找到的帮助程序类。这是一个:

http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html