错误列'图片'不能为空

时间:2017-01-05 17:53:53

标签: image codeigniter upload

我最初的问题发布错误,所以我重新发布。我正在使用joost van veen的tutsplus教程练习,我添加了一个图像上传到控制器,但每次我尝试保存一个帖子我都会从数据库中得到一个错误列表' picture'不能为空。我已经检查了其他答案,但没有解释问题。任何帮助将不胜感激。



MY CONTROLLER

public function edit($post_id = NULL) {
		// Fetch all articles or set a new one
		if ($post_id) {
			$this->data['article'] = $this->article_m->get($post_id);
			count($this->data['article']) || $this->data['errors'][] = 'article could not be found';
		}
		else {
			$this->data['article'] = $this->article_m->get_new();
		}

		// Set up the form
		$rules = $this->article_m->rules;
		$this->form_validation->set_rules($rules);

		if ($this->input->post('userSubmit')) {

			//check if user uploads picture

			if (!empty($_FILES['picture']['name'])) {

				$config['upload_path'] = './uploads/';
				$config['allowed_types'] = 'jpg|png|gif|jpeg';
				$config['file_name'] = $_FILES['picture']['name'];

				//load upload library and initialize configuration

				
				$this->upload->initialize($config);

				if ($this->upload->do_upload('picture')) {
					$uploadData = $this->upload->data();
					$picture = $uploadData['file_name'];
				} else {
					$picture = '';
				}
			} else {
				$picture = '';
			}
			// prepare array of posts data

			$data = $this->article_m->array_from_post(array(
				'title',
				'slug',
				'content',
				'category_id',
				'picture',
				'pubdate'
			));

			$insertPosts = $this->article_m->save($data, $post_id);
			redirect('admin/article');

			//storing insertion status message

			if ($insertPosts) {
				$this->session->set_flashdata('success_msg', 'Post has been added Successfully.');
			} else {
				$this->session->set_flashdata('error_msg', 'error occured while trying upload, please try again.');
			}
		}

		// Load view
		$this->data['subview'] = 'admin/article/edit';
		$this->load->view('admin/components/page_head', $this->data);
		$this->load->view('admin/_layout_main', $this->data);
		$this->load->view('admin/components/page_tail');
	}

  MY_MODEL

public function array_from_post($fields) {
			$data = array();
			foreach ($fields as $field) {
				$data[$field] = $this->input->post($field);
				$data['category_id'] = $this->input->post('category');
			}
			return $data;
		}

public function save($data, $id = NULL) {

			// Set timestamps
			if ($this->_timestamps == TRUE) {
				$now = date('Y-m-d H:i:s');
				$id || $data['created'] = $now;
				$data['modified'] = $now;
			}

			// Insert
			if ($id === NULL) {
				!isset($data[$this->_primary_key]) || $data[$this->_primary_key] = NULL;
				$this->db->set($data);
				$this->db->insert($this->_table_name);
				$id = $this->db->insert_id();
			}

			// Update
			else {
				$filter = $this->_primary_filter;
				$id = $filter($id);
				$this->db->set($data);
				$this->db->where($this->_primary_key, $id);
				$this->db->update($this->_table_name);
			}
			return $id;
		}

RULES TO SET FORM VALIDATION

public $rules = array(
			'pubdate' => array(
				'field' => 'pubdate',
				'label' => 'Publication date',
				'rules' => 'trim|required|exact_length[10]'
			),
			'title' => array(
				'field' => 'title',
				'label' => 'Title',
				'rules' => 'trim|required|max_length[100]'
			),
			'slug' => array(
				'field' => 'slug',
				'label' => 'Slug',
				'rules' => 'trim|required|max_length[100]|url_title'
			),
			'content' => array(
				'field' => 'content',
				'label' => 'Content',
				'rules' => 'trim|required'
			),
			'picture' => array(
				'field' => 'picture',
				'label' => 'Upload File',
				'rules' => 'trim'
			),
		);

		public function get_new() {
			$article = new stdClass();
			$article->title = '';
			$article->category_id = '';
			$article->slug = '';
			$article->content = '';
			$article->picture = '';
			$article->pubdate = date('Y-m-d');
			return $article;
		}




1 个答案:

答案 0 :(得分:0)

我通过在模型中创建一个新方法array_me()并在控制器中调用它来解决问题。

NEW METHOD IN MY_MODEL

public function array_me($fields) {
			$uploadData = $this->upload->data();
			$picture = $uploadData['file_name'];
			$data = array();
			foreach ($fields as $field) {
				$data[$field] = $this->input->post($field);
				$data['category_id'] = $this->input->post('category');
				$data['picture'] = $picture;
			}
			return $data;
		}

EDITED CONTROLLER

public function edit($post_id = NULL) {
		// Fetch all articles or set a new one
		if ($post_id) {
			$this->data['article'] = $this->article_m->get($post_id);
			count($this->data['article']) || $this->data['errors'][] = 'article could not be found';
		}
		else {
			$this->data['article'] = $this->article_m->get_new();
		}

		// Set up the form
		$rules = $this->article_m->rules;
		$this->form_validation->set_rules($rules);

		if ($this->input->post('userSubmit')) {

			//check if user uploads picture

			if (!empty($_FILES['picture']['name'])) {

				$config['upload_path'] = './uploads/';
				$config['allowed_types'] = 'jpg|png|gif|jpeg';
				$config['file_name'] = $_FILES['picture']['name'];

				//load upload library and initialize configuration

				
				$this->upload->initialize($config);

				if ($this->upload->do_upload('picture')) {
					$uploadData = $this->upload->data();
					$picture = $uploadData['file_name'];
				} else {
					$picture = '';
				}
			} else {
				$picture = '';
			}
			// prepare array of posts data

			$data = $this->article_m->array_me(array(
				'title',
				'slug',
				'content',
				'category_id',
				'picture',
				'pubdate'
			));

			$insertPosts = $this->article_m->save($data, $post_id);
			redirect('admin/article');

			//storing insertion status message

			if ($insertPosts) {
				$this->session->set_flashdata('success_msg', 'Post has been added Successfully.');
			} else {
				$this->session->set_flashdata('error_msg', 'error occured while trying upload, please try again.');
			}
		}

		// Load view
		$this->data['subview'] = 'admin/article/edit';
		$this->load->view('admin/components/page_head', $this->data);
		$this->load->view('admin/_layout_main', $this->data);
		$this->load->view('admin/components/page_tail');
	}