使用codeigniter中的一对多保存一个产品的多个图像

使用codeigniter中的一对多保存一个产品的多个图像,codeigniter,foreign-keys,Codeigniter,Foreign Keys,我是新的代码点火器。 这就是我要做的。我有存储在数据库表name products中的产品列表。对于每个产品,我需要插入多个图像。我创建了两个表,products和productimage。我已经将表productimage的product_id设置为外键,引用了表products的product_id。现在我想保存表单中的数据。这是我以前做的 但对我来说,管理CRUD(如编辑和删除图片)变得相当困难。 所以我试着用上面提到的方法。我没有找到开始的方法。谁能告诉我,我该怎么开始 好的,现在我在这

我是新的代码点火器。 这就是我要做的。我有存储在数据库表name products中的产品列表。对于每个产品,我需要插入多个图像。我创建了两个表,products和productimage。我已经将表productimage的product_id设置为外键,引用了表products的product_id。现在我想保存表单中的数据。这是我以前做的 但对我来说,管理CRUD(如编辑和删除图片)变得相当困难。 所以我试着用上面提到的方法。我没有找到开始的方法。谁能告诉我,我该怎么开始

好的,现在我在这里做了一些编码。这是我的控制器:

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');

   class Products extends CI_Controller{

   public function __construct()
   {
  parent::__construct();
   $this->load->model('product_model');
   $this->load->helper(array('form','url'));
   //Codeigniter : Write Less Do More
   }

   public function index()
  {
   $data['products']=$this->product_model->get_product();
   $this->load->view('/landing_page',$data);
   }

   public function create()
   {
    #code
    $this->load->helper('form');
    $this->load->library('form_validation');
    $this->form_validation->set_rules('product_name','Product_Name','required');

   if($this->form_validation->run()=== FALSE)
   {
    $this->load->view('products/create');
   }
  else {
    $this->product_model->set_product();
    $data['products']=$this->product_model->get_product();
    redirect('/');
   }
 }
 }

让我来帮你操作控制器。。你需要检查所有上传的文件。它们是$\u文件。循环遍历数组,将它们上载到服务器上,然后调用模型函数将它们添加到产品图像表中

如果CI上传对您来说太棘手。使用以下控制器功能

public function upload_images()
{
// following IF statement only checks if the user is logged in or not
if($this->session->userdata['id'] && $this->session->userdata['type']=='user')
{
    if($_FILES)
    {
        // check whether there are files uploaded / posted
        if(isset($_FILES['files'])){
            $data['errors']= array();
            $extensions = array("jpeg","jpg","png");

            //Loop through the uploaded files

            foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){

                $file_name = $key.$_FILES['files']['name'][$key];
                $file_size =$_FILES['files']['size'][$key];
                $file_tmp =$_FILES['files']['tmp_name'][$key];
                $i=1;
                if($file_size > 2097152){
                    $data['errors'][$i]='File '.$i.' size must be less than 2 MB';
                    $i++;
                }
                // Set upload destination directory
                $desired_dir="uploads";
                if(empty($data['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){
                        // Upload the file. 
                        move_uploaded_file($file_tmp,"uploads/".$file_name);
                        // Call a function from model to save the name of the image in images table along with entity id
                        $this->post_model->addImage('property_images',$file_name,$this->uri->segment(3));
                    }else{                                  //rename the file if another one exist
                        $new_dir="uploads/".$file_name.time();
                        rename($file_tmp,$new_dir) ;
                    }
                }else{
                    $data['contact']=$this->admin_model->getContactDetails();
                    $data['images']=$this->post_model->getPropertyImages($this->uri->segment(3));
                    //load views
                }
            }
            if(empty($data['errors']))
            {
                redirect(base_url().'dashboard');
            }
            else
            {
                $data['contact']=$this->admin_model->getContactDetails();
                $data['images']=$this->post_model->getPropertyImages($this->uri->segment(3));
                //load views
            }
        }
    }
    else
    {
        //Load view
    }
}
else
{
    redirect(base_url().'user/login');
}

}

如果任何人都有同样的问题,那么这里是解决方案。只需在上传功能中执行此操作即可。(我的朋友Amani Ben azzouz编写的代码)

公共函数集\u产品($id=0){
$picture=array();
$count=count($_文件['picture']['name']);
//检查用户是否上传图片
如果(!空($_文件['picture']['name'])){
foreach($\u文件为$value){
对于($s=0;$sload->library('upload',$config));
$this->upload->initialize($config);
//打印($value['name'][$s]);退出;
如果($this->upload->do_upload('picture')){
$uploadData=$this->upload->data();
$picture[]=$uploadData['file_name'];
}
}
}
}//第一个if结束
$data=array('product\U name'=>$this->input->post('product\U name'));
如果($id==0){
$this->db->insert('products',$data);
$last_id=$this->db->insert_id();
如果(!空($picture)){
foreach($p_索引=>$p_值){
$this->db->insert('images',array('product_id'=>$last_id,'images'=>$p_value));
}
}
}
否则{
$this->db->where('id',$id);
$this->db->update('products',$data);
如果(!空($picture)){
foreach($p_索引=>$p_值){
$this->db->update('images',array('product_id'=>$last_id,'images'=>$p_value));//-->这个?
}
}
}
}
这也是用于插入和更新的。如果您只是想插入,只需删除作为“id”传递的参数,并剪切If和else部分,在“If”内部编写一个简单的代码。

函数contract\u upload(){//要从视图中调用的函数。
function contract_upload(){ // function to call from your view. 
    $data = array();
    // If file upload form submitted
    if(!empty($_FILES['files']['name']) AND !empty('user_id')){
        $filesCount = count($_FILES['files']['name']);
        for($i = 0; $i < $filesCount; $i++){
            $_FILES['file']['name']     = $_FILES['files']['name'][$i];
            $_FILES['file']['type']     = $_FILES['files']['type'][$i];
            $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
            $_FILES['file']['error']    = $_FILES['files']['error'][$i];
            $_FILES['file']['size']     = $_FILES['files']['size'][$i];
            // File upload configuration
            $uploadPath = './uploads/contract/';
            $config['upload_path'] = $uploadPath;
            $config['allowed_types'] = 'jpg|jpeg|png|gif';
            $config['encrypt_name'] = TRUE;
            // Load and initialize upload library
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            // Upload file to server
            if($this->upload->do_upload('file')){
                // Uploaded file data
                $fileData = $this->upload->data();
                $uploadData[$i]['file_name'] = $fileData['file_name'];
                $uploadData[$i]['emp_id'] = $this->input->post('user_id');
            }
        }
        if(!empty($uploadData)){
            // Insert files data into the database
            $insert = $this->Contract_model->insert($uploadData);
            // Upload status message
            $statusMsg = $insert?'Files uploaded successfully.':'Some problem occurred, please try again.';
            $this->session->set_flashdata('messageactive', $statusMsg);
        }
    }
    redirect('contract'); // redirect link, where do you want to redirect after successful uploading of the file.
}
// Model Function
public function insert($data = array()){
    $insert = $this->db->insert_batch('employee_contract_files', $data); // table name and the data you want to insert into database.
    return $insert?true:false;
}
$data=array(); //如果文件上传表单已提交 如果(!empty($_FILES['FILES']['name'])和!empty('user_id')){ $filescont=count($_FILES['FILES']['name']); 对于($i=0;$i<$filescont;$i++){ $\u文件['file']['name']=$\u文件['FILES']['name'][$i]; $\u文件['file']['type']=$\u文件['FILES']['type'][$i]; $\u FILES['file']['tmp\u name']=$\u FILES['FILES']['tmp\u name'][$i]; $\u文件['file']['error']=$\u文件['FILES']['error'][$i]; $\u文件['file']['size']=$\u文件['FILES']['size'][$i]; //文件上载配置 $uploadPath='。/uploads/CONTACT/'; $config['upload_path']=$uploadPath; $config['allowed_types']='jpg | jpeg | png | gif'; $config['encrypt_name']=TRUE; //加载并初始化上载库 $this->load->library('upload',$config); $this->upload->initialize($config); //将文件上载到服务器 如果($this->upload->do_upload('file')){ //上载的文件数据 $fileData=$this->upload->data(); $uploadData[$i]['file_name']=$fileData['file_name']; $uploadData[$i]['emp_id']=$this->input->post('user_id'); } } 如果(!empty($uploadData)){ //将文件数据插入数据库 $insert=$this->Contract\u model->insert($uploadData); //上载状态消息 $STATUSSMSG=$insert?“已成功上载文件”。:“出现问题,请重试。”; $this->session->set_flashdata('messageactive',$statusMsg); } } 重定向('contract');//重定向链接,成功上载文件后要重定向到哪里。 } //模型函数 公共函数插入($data=array()){ $insert=$this->db->insert_batch('employee_contract_files',$data);//表名和要插入数据库的数据。 返回$insert?真:假; }
记住一件事,您应该按照以下方式编写HTML:

<input type="file" name="files[]"  multiple />


首先,您可以创建具有最少必填字段的产品,然后将图像上载到该产品。在magento中,他们就是这样做的。哦,您不在模型中上载图像。虽然CI不会阻止您。建议您在控制器中上载图像谢谢,先生,但我有一个问题。让我先用我已编辑的内容编辑我的问题一个。然后告诉我。你看到我的代码了吗?如果可以的话,请给我一些帮助。请看一下我的代码。上传图片()是我的控制器功能。如果你想添加一个产品,然后在同一页上载图像。你需要先将产品添加到产品表中,返回产品id,然后循环遍历图像文件,上载它们,并通过调用模型中的函数将其名称保存在产品图像表中。好的,让我来试一试。我正在集成你的我的控制器中的代码。:)
function contract_upload(){ // function to call from your view. 
    $data = array();
    // If file upload form submitted
    if(!empty($_FILES['files']['name']) AND !empty('user_id')){
        $filesCount = count($_FILES['files']['name']);
        for($i = 0; $i < $filesCount; $i++){
            $_FILES['file']['name']     = $_FILES['files']['name'][$i];
            $_FILES['file']['type']     = $_FILES['files']['type'][$i];
            $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
            $_FILES['file']['error']    = $_FILES['files']['error'][$i];
            $_FILES['file']['size']     = $_FILES['files']['size'][$i];
            // File upload configuration
            $uploadPath = './uploads/contract/';
            $config['upload_path'] = $uploadPath;
            $config['allowed_types'] = 'jpg|jpeg|png|gif';
            $config['encrypt_name'] = TRUE;
            // Load and initialize upload library
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            // Upload file to server
            if($this->upload->do_upload('file')){
                // Uploaded file data
                $fileData = $this->upload->data();
                $uploadData[$i]['file_name'] = $fileData['file_name'];
                $uploadData[$i]['emp_id'] = $this->input->post('user_id');
            }
        }
        if(!empty($uploadData)){
            // Insert files data into the database
            $insert = $this->Contract_model->insert($uploadData);
            // Upload status message
            $statusMsg = $insert?'Files uploaded successfully.':'Some problem occurred, please try again.';
            $this->session->set_flashdata('messageactive', $statusMsg);
        }
    }
    redirect('contract'); // redirect link, where do you want to redirect after successful uploading of the file.
}
// Model Function
public function insert($data = array()){
    $insert = $this->db->insert_batch('employee_contract_files', $data); // table name and the data you want to insert into database.
    return $insert?true:false;
}
<input type="file" name="files[]"  multiple />