[英]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_r
或var_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);
}
}
好的,現在我知道了問題所在。 傳遞給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字符串,並在需要時進行解碼。
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.