2013-06-26 5 views
0

Я новичок в CodeIgniter programming.I хотят хранить и извлекать изображения из folder.But, когда я запускаю код я нашел ошибку, как:Как сохранить изображение и получить из папки с помощью codeigniter?

Первой ошибку:

Upload failed! 

A PHP Error was encountered 

Severity: Notice 

Message: Undefined variable: in 

Filename: controllers/main.php 

Line Number: 104 

Вторую ошибку:

A Database Error Occurred 

You must use the "set" method to update an entry. 

Filename: application/models/main_model.php 

Line Number: 80 

Я использую этот код:

In Control:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Main extends CI_Controller{ 
public function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('main_model'); 
    $this->load->helper(array('form', 'url')); 
} 
    public function product() 
{ 
    $this->load->library('form_validation'); 
    $this->form_validation->set_rules('productname','Product Code','trim|required'); 
    $this->form_validation->set_rules('productcode','Product Code','trim|required'); 
    $this->form_validation->set_rules('productprice','Product Price','trim|required'); 
    $this->form_validation->set_rules('quantity','Quantity','trim|required'); 
    $this->form_validation->set_rules('uploadimage','Upload Image','trim|required'); 
    if($this->form_validation->run()==FALSE) 
    { 
     $this->index(); 
    }else 
     { 
      if ($this->input->post('upload')) 
      { 
       $in=array(); 

$in['productname'] = $this->input->post('productnamename'); 
$in['productcode'] = $this->input->post('productcode'); 
$in['productprice']=$this->input->post('productprice'); 
$in['quantity']=$this->input->post('quantity'); 
$in['uploadimage']=$_FILES['image']['name']; 
      } 
      if($this->main_model->do_upload()) { 

echo $this->upload->display_errors(); 

}else 
    { 
     $this->main_model->save_gallery($in); 
     header('location:product'); 
    } 
      $data['images']=$this->main_model->get_images(); 
       $this->load->view('query_view',$data); 
     } 
} 

В модели:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Main_model extends CI_Model { 
public function __construct() 
{ 
    parent::__construct(); 
} 
    public function do_upload() 
{ 
     $config = array(
     'allowed_types' => 'jpg|png|bmp', 
     'upload_path'=>'./uploads/', //make sure you have this folder 
     'max_size'=>2000); 
     $this->load->library('upload',$config); 

    if ($this->upload->do_upload()) { 
     echo "Upload success!"; 
    } else { 
     echo "Upload failed!"; 
    } 
$image_data = $this->upload->data(); 
} 
function get_images() 
{ 
    $query = $this->db->get('product'); 
    return $query; 
} 

function save_gallery($in) 
{ 
$save=$this->db->get("product"); 
if($save->num_rows()) 
{ 
$save=$this->db->insert('product',$in); 
return $save; 
} 
} 

В Вид:

<?php foreach ($images as $image):?> 
<h1><?php echo $image['a_name'];?></h1> 
<h1><?php echo $image['a_details'];?></h1> 
<?php echo '<img src ="'. base_url().'images1/'.$image['a_photo'].'" >"; 
endforeach; ?> 

FronPage Вид:

<?php echo form_open("main/product"); ?> 
    <p> 
     <label for="product_name">Product Name:</label> 
     <input type="text" id="productname" name="productname"  value="<?php echo set_value('product_name'); ?>" /> 
    </p>   


    <p> 
     <label for="ProductCode">Product Code</label> 
     <input type="text" id="productcode" name="productcode" value="<?php echo set_value('productcode'); ?>" /> 
    </p> 
    <p> 
     <label for="productprice">Product Price:</label> 
     <input type="text" id="productprice" name="productprice" value="<?php echo set_value('productprice'); ?>" /> 
    </p> 
    <p> 
     <label for="Quantity">Quantity:</label> 
     <select name="quantity" id="quantity" value="<?php echo set_value('quantity'); ?>" /><option>1</option> 
      <option>2</option> 
      <option>3</option> 
      <option>4</option> 
      <option>5</option> 
     </select> 

    </p> 
    <p> 
     <label for="Uploadimage">Upload Image:</label> 
     <input type="file" name="uploadimage" id="uploadimage" value="<?php echo set_value('uploadimage'); ?>" /> 
    </p> 

    <p> 
     <input type="submit" class="greenButton" value="submit" /> 
    </p> 
<?php echo form_close(); ?> 

ответ

1

1) Ваша форма enctype должна быть multipart

2) ваш проверяют post вместо $_FILES

должно быть if ($this->input->post('upload')) к if ($_FILES['upload']['name']) по этой причине она не исходит в вашем случае блок поэтому $in не определен, когда вы звоните

$this->main_model->save_gallery($in); 

когда $in не определено поэтому вы видите Эрро You must use the "set" method to update an entry. в модели

Надеется, что это имеет смысл

+0

Как использовать набор метод dianuj? Может у пожалуйста, скажите me.i я новый для программирования codeigniter. – manoj

+0

Вам не нужно использовать 'set'. CI будет автоматически использоваться, вам просто нужно передать' $ in' со значениями, в настоящее время ваша отправка '$ in' пуста или как undefined, поэтому ошибка возникает, когда она имеет значения, она будет работать отлично –

2

Прежде всего, прочтите документацию по адресу http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html. Следуйте за ним дословно, ничего необычного, без базы данных, никаких дополнительных условностей. Получите эту работу и добавьте новую функциональность постепенно с очень небольшими порциями. Когда вы сталкиваетесь с проблемами, оглянитесь вокруг ответа.

Теперь проблема ..

Вы не получаете значение для $this->input->post('upload'), который является лишь одним из многих вопросов.

Ваша форма должна быть открыта

<?php echo form_open_multipart("main/product"); ?>

Ошибка ниже обычно указывает на то, что вы передаете пустой переменной к insert функции

A Database Error Occurred 

You must use the "set" method to update an entry. 

Filename: application/models/main_model.php 

Line Number: 80 

Почему вы пропускании пустую переменную? Вы вызываете метод do_upload, который всегда возвращает void, поэтому условие TRUE никогда не выполняется в коде ниже.

if($this->main_model->do_upload()) { 
    echo $this->upload->display_errors(); 
} 
else 
{ 
    $this->main_model->save_gallery($in); 
    header('location:product'); 
} 

Убедитесь, вы передаете ввод имени upload в форме, и условие для загрузки должно быть больше, как это

if(isset($_FILES['upload']['name'])) 
    { 
     $in=array(); 

     $in['productname'] = $this->input->post('productnamename'); 
     $in['productcode'] = $this->input->post('productcode'); 
     $in['productprice']=$this->input->post('productprice'); 
     $in['quantity']=$this->input->post('quantity'); 
     $in['uploadimage']=$_FILES['image']['name']; 

     // moved to inside the post('upload') conditional 
     if($this->main_model->do_upload()) { 
      echo $this->upload->display_errors(); 
     } 
     else 
     { 
      $this->main_model->save_gallery($in); 
      header('location:product'); 
     } 

    } 
Смежные вопросы