我是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"> </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"> </td>
<td><?php echo form_submit('submit', 'Submit');?>
</tr>
</table>
<?php echo form_close(); ?>
我很感谢他/她通过检查错误n错误给我这个错误代码的解决方案?
答案 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