Php Codeigniter同时上传特色图片和多张图片
我已经修改了代码以使用foreach循环,现在我可以访问文件名,print\r将文件名打印在如下数组中:Php Codeigniter同时上传特色图片和多张图片,php,codeigniter,file-upload,Php,Codeigniter,File Upload,我已经修改了代码以使用foreach循环,现在我可以访问文件名,print\r将文件名打印在如下数组中: Array ( [0] => Uconn.png [1] => UW_Medicine.png [2] => Yale.png ) Axis.png 但我仍然得到以下错误: A PHP Error was encountered Severity: Notice Message: Array to string conversion 和数据库错误: Error Nu
Array ( [0] => Uconn.png [1] => UW_Medicine.png [2] => Yale.png ) Axis.png
但我仍然得到以下错误:
A PHP Error was encountered
Severity: Notice
Message: Array to string conversion
和数据库错误:
Error Number: 1054
Unknown column 'Array' in 'field list'
INSERT INTO `yacht_slider` (`yacht_slide_id`, `slide`) VALUES (87, Array)
我只是不知道我应该如何传递模型中的循环文件来上传
我尝试在一个输入中上载一个特色图像,同时在另一个输入中上载多个图像,我尝试了许多方法和方法来实现这一点,但我总是以一个错误结束,主要是数组到字符串的转换错误
特征图像存储在一个数据库表中,多个图像存储在另一个表中
我当前的代码:
HTML:
控制器:
public function create_yacht(){
$data['title'] = 'Create';
$data['categories'] = $this->category_model->get_categories();
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('city', 'City', 'required');
if($this->form_validation->run() === FALSE){
$this->load->view('templates/admin_header');
$this->load->view('admin/create_yacht', $data);
$this->load->view('templates/admin_footer');
}else{
$config['upload_path'] = './assets/images';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$this->load->library('upload', $config);
$featured = 'featured';
if (!$this->upload->do_upload($featured)) {
$errors = array('errors' => $this->upload->display_errors());
$yacht_img = 'https://via.placeholder.com/1920x1080';
}else{
$data = array('upload_data' => $this->upload->data());
$yacht_img = $_FILES['featured']['name'];
}
foreach ($_FILES['userfile']['name'] as $name) {
$this->upload->initialize($config);
$this->upload->do_upload($name);
$data = array('upload_data' => $this->upload->data());
$slider = $_FILES['userfile']['name'];
}
print_r($slider);
print_r($yacht_img);
$this->yacht_model->create_yacht($yacht_img, $slider);
// redirect('admin');
}
}
public function create_yacht() {
$data['title'] = 'Create';
$data['categories'] = $this->category_model->get_categories();
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('city', 'City', 'required');
if ($this->form_validation->run() === FALSE) {
$this->load->view('templates/admin_header');
$this->load->view('admin/create_yacht', $data);
$this->load->view('templates/admin_footer');
} else {
$this->load->library('upload');
$upload_path = './testupload/';
// just in case, make path if it doesn't exist
// if we can't die
if (!is_dir($upload_path) && @mkdir($upload_path, DIR_WRITE_MODE) == false) {
show_error('Could not make path!');
}
$config['upload_path'] = $upload_path;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$config['file_ext_tolower'] = true;
//$config['encrypt_name'] = true; // might be a good idea
$this->upload->initialize($config);
// featured image
if (!$this->upload->do_upload('featured')) {
show_error($this->upload->display_errors());
}
$yacht_img = $this->upload->data('file_name');
// multi images
$slider_images = array();
$multi_files = $_FILES['userfile'];
if (!empty($multi_files['name'][0])) { // if slider images are required remove this if
$multi_count = count($_FILES['userfile']['name']);
for ($i = 0; $i < $multi_count; $i++) {
$_FILES['userfile']['name'] = $multi_files['name'][$i];
$_FILES['userfile']['type'] = $multi_files['type'][$i];
$_FILES['userfile']['tmp_name'] = $multi_files['tmp_name'][$i];
$_FILES['userfile']['error'] = $multi_files['error'][$i];
$_FILES['userfile']['size'] = $multi_files['size'][$i];
if (!$this->upload->do_upload()) {
// failure cleanup to prevent orphans
@unlink($upload_path . $yacht_img);
if (count($slider_images) > 0) {
foreach ($slider_images as $image) {
@unlink($upload_path . $image);
}
}
show_error($this->upload->display_errors());
}
$slider_images[] = $this->upload->data('file_name');
}
}
$this->yacht_model->create_yacht($yacht_img, $slider_images);
}
}
如果您使用的是mySQL 7,那么它支持json数据类型,并且可以另存为数组。若您使用较低版本的MySQL,最好的解决方案是将图像数组转换为JSON格式,然后将其插入表中。 有关MySQL中JSON的更多详细信息,请参考
我对您的代码进行了一些清理,并添加了一些错误报告,这样用户在出现错误时就不会感到困惑 控制器:
public function create_yacht(){
$data['title'] = 'Create';
$data['categories'] = $this->category_model->get_categories();
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('city', 'City', 'required');
if($this->form_validation->run() === FALSE){
$this->load->view('templates/admin_header');
$this->load->view('admin/create_yacht', $data);
$this->load->view('templates/admin_footer');
}else{
$config['upload_path'] = './assets/images';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$this->load->library('upload', $config);
$featured = 'featured';
if (!$this->upload->do_upload($featured)) {
$errors = array('errors' => $this->upload->display_errors());
$yacht_img = 'https://via.placeholder.com/1920x1080';
}else{
$data = array('upload_data' => $this->upload->data());
$yacht_img = $_FILES['featured']['name'];
}
foreach ($_FILES['userfile']['name'] as $name) {
$this->upload->initialize($config);
$this->upload->do_upload($name);
$data = array('upload_data' => $this->upload->data());
$slider = $_FILES['userfile']['name'];
}
print_r($slider);
print_r($yacht_img);
$this->yacht_model->create_yacht($yacht_img, $slider);
// redirect('admin');
}
}
public function create_yacht() {
$data['title'] = 'Create';
$data['categories'] = $this->category_model->get_categories();
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('city', 'City', 'required');
if ($this->form_validation->run() === FALSE) {
$this->load->view('templates/admin_header');
$this->load->view('admin/create_yacht', $data);
$this->load->view('templates/admin_footer');
} else {
$this->load->library('upload');
$upload_path = './testupload/';
// just in case, make path if it doesn't exist
// if we can't die
if (!is_dir($upload_path) && @mkdir($upload_path, DIR_WRITE_MODE) == false) {
show_error('Could not make path!');
}
$config['upload_path'] = $upload_path;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2048';
$config['file_ext_tolower'] = true;
//$config['encrypt_name'] = true; // might be a good idea
$this->upload->initialize($config);
// featured image
if (!$this->upload->do_upload('featured')) {
show_error($this->upload->display_errors());
}
$yacht_img = $this->upload->data('file_name');
// multi images
$slider_images = array();
$multi_files = $_FILES['userfile'];
if (!empty($multi_files['name'][0])) { // if slider images are required remove this if
$multi_count = count($_FILES['userfile']['name']);
for ($i = 0; $i < $multi_count; $i++) {
$_FILES['userfile']['name'] = $multi_files['name'][$i];
$_FILES['userfile']['type'] = $multi_files['type'][$i];
$_FILES['userfile']['tmp_name'] = $multi_files['tmp_name'][$i];
$_FILES['userfile']['error'] = $multi_files['error'][$i];
$_FILES['userfile']['size'] = $multi_files['size'][$i];
if (!$this->upload->do_upload()) {
// failure cleanup to prevent orphans
@unlink($upload_path . $yacht_img);
if (count($slider_images) > 0) {
foreach ($slider_images as $image) {
@unlink($upload_path . $image);
}
}
show_error($this->upload->display_errors());
}
$slider_images[] = $this->upload->data('file_name');
}
}
$this->yacht_model->create_yacht($yacht_img, $slider_images);
}
}
可能重复或甚至:唯一的区别是你需要有你的以上代码,然后一个多文件的部分。为此,你需要一个不同的上传字段名。我尝试了这个解决方案,它不适合我,上传一个文件很好,但除了一个文件之外,我还需要上传多个文件
public function create_yacht($yacht_img, $slider_images) {
$slug = url_title($this->input->post('title'));
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'img' => $yacht_img,
'city' => $this->input->post('city'),
'category' => $this->input->post('category'),
'price' => $this->input->post('price'),
'description' => $this->input->post('description')
);
$this->db->insert('yachts', $data);
$insert_id = $this->db->insert_id();
if (count($slider_images) > 0) {
foreach ($slider_images as $image) {
$this->db->insert('yacht_slider', array('yacht_slide_id' => $insert_id, 'slide' => $image));
}
}
}