簡體   English   中英

在一個數據庫行中插入多個數據

[英]Insert multiple data in one single database row

我有用於上傳多個圖像的代碼,它返回單詞"ARRAY" ,而不是在執行" echo , die;"時返回內容" echo , die;" ,並以其他方式返回第一個上載並插入數據庫中。

我想在單行數據庫中插入多個值"IMGE"

控制器:

function uploadFile(){

    $data = array();
    // If file upload form submitted
    if($this->input->post('Submit') && !empty($_FILES['files']['name']))
    {
        $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/files/';
            $config['upload_path'] = $uploadPath;
            $config['allowed_types'] = 'jpg|jpeg|png|gif';

            // 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

                ///////////////////////////////////////////
             //HERR I WANT TO RETURN THE  -  $file[$i]  - WITH ALL
             //THE IMAGE UPLAD TO INSER IN SINGLE ROW IN DATABASE
             ///////////////////////////////////////////    
                $fileData = $this->upload->data();
                $uploadData[$i]['file_name'] = $fileData['file_name'];
                $uploadData[$i]['uploaded_on'] = date("Y-m-d H:i:s");

                $file[$i] = $uploadData[$i]['file_name']; 
                return $file[$i];
                echo $file[$i]  , die; // here it is just return first image upload 


            }

        }

        if(!empty($uploadData)){

           return $uploadData;
           echo $new_array, die;// here it is  return word "ARRAY"}}

模型:

function insert_data($data) // from one table 
{  
      $insert = $this->db->insert('tbl_reservations', $data);
}

die函數會打印一條消息並退出當前腳本,因此僅插入第一個文件。因此請刪除die。

更改

 echo $new_array, die;// here it is  return word "ARRAY"}}

print_r($new_array);

由於$new_array是array,因此需要使用print_rvar_dump打印數組。 使用echo將顯示Array,因為它是一個數組。 也不要使用die,它將停止腳本,並且您將無法插入第二個圖像。

您不能在DB字段中插入數組,而必須循環拋出它。

function insert_data($data) // from one table 
{  
    // I suppose that $data is multi dimensional array that conatins single 'row' on each item
    foreach($data as $item){
       $insert = $this->db->insert('tbl_reservations', $item);
    } 
}

編輯2

好的,現在我知道了問題所在。 傳遞給insert_data數據數組包含具有所有文件名的數組。

用以下代碼替換您的insert()

public function insert(){ 
    $uploadedFiles = $this->uploadFile(); // returns the file names array 

    // Map post data to table field
    $data = array(
       'visittype' => $this->input->post('visittype'),
       'date' => $this->input->post('date'),
       'time' => $this->input->post('time'),
       'reasons' => $this->input->post('reasons'),
       'symptoms' => $this->input->post('symptoms'),
       'doctor_id' => $this->input->post('doctorid'),
       'user_id' => $this->session->userdata('doctor')[0]->user_id
    );        

    // Loop on file names and insert each one on the db row.
    foreach ($uploadedFiles as $file){ 
        $data['file_name'] = $file['file_name'];
        $this->Reservation_model->insert_data($data); 
    }
} 

這樣,yuo將具有與上載文件一樣多的行。 如果只想包含所有文件的一行,則必須將它們存儲為json字符串,並在需要時進行解碼。

編輯3

uploadFiles()返回如下內容:

$uploadedFiles = [
    ['file_name' => 'file_one.jpg'],
    ['file_name' => 'file_two.jpg'],
    ['file_name' => 'file_three.jpg']
];

您不能在數據庫行字段上存儲數組。

我可以建議您兩種方式:

1-創建一個主/明細結構。 tbl_reservations用於存儲主數據,當前一個和tbl_reservations_files用於存儲每個預留的文件名。

2-將文件名存儲為字符串,例如CSV。

這是解決方案2的代碼:

public function insert(){
    $uploadedFiles = $this->uploadFile(); // returns the file names array

    // Map post data to table field
    $data = array(
        'visittype' => $this->input->post('visittype'),
        'date' => $this->input->post('date'),
        'time' => $this->input->post('time'),
        'reasons' => $this->input->post('reasons'),
        'symptoms' => $this->input->post('symptoms'),
        'doctor_id' => $this->input->post('doctorid'),
        'user_id' => $this->session->userdata('doctor')[0]->user_id
    );

    // Reduce file list as a CSV string
    $data['file_name'] = array_reduce($uploadedFiles, function ($carry, $item) { 
        // $carry is the value from previews iteration, $item is current array item. see array_reduce on php doc for more.
        // ',' can be replaced with any char of your need
        return $carry . ($carry === '' ?: ',') . $item['file_name'];
    }, '');

    // Insert data on DB
    $this->Reservation_model->insert_data($data);
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM