【问题标题】:Upload File Codeigniter,can't detect variabel上传文件Codeigniter,无法检测到变量
【发布时间】:2020-06-11 01:21:42
【问题描述】:

我正在尝试在 Codeigniter 上制作上传图片功能。但是,当我尝试将图像插入数据库时​​。无法检测到变量。

这是我的控制器:

public function registrasi() {
	//VALIDATION
	$this->form_validation->set_rules('username', 'Username', 'required');
	$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[tb_m_user.email]');
	$this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[3]|matches[konfirmasi_password]');
	$this->form_validation->set_rules('konfirmasi_password', 'Retype Password', 'required|trim|matches[password]');

		if($this->form_validation->run() == false) {
			$this->session->set_flashdata('fail' , 'Registration Failed! Please Try Again');
			$this->load->view('auth/registrasi');
		}else{
			//INSERT TO DATABASE
			$username 	= $this->input->post('username');
			$email 		= $this->input->post('email');
			$password 	= password_hash($this->input->post('password'), PASSWORD_DEFAULT);
			$pict 		= $_FILES['pict'];
					
				//LIBRARY UPLOAD CONFIG
				$config['upload_path']		= '/assets/dist/foto_validasi';
				$config['allowed_types']	= 'jpg|png';
				$config['file_name']		= date('ymd');
				$this->load->library('upload', $config);
						
				if(!$this->upload->do_upload('pict')){
					echo "Upload Failed"; 
				}else{
					$pict = $this->upload->data('file_name');
				}

			$data = [
				'user_name'   => $username,
				'email'       => $email,
				'password'  => $password,
				'role'        => 'pengguna',
				'img'	      => $pict,
				'status_aktivasi'	=> 'tidak aktif',
				'created_by'		=> 'SYSTEM',
			];

				$this->m_auth->registrasi($data, 'tb_m_user');
				$this->session->set_flashdata('success' , 'Registration Successful! Please Login');
				Redirect('Auth/login');
			}
		}

		public function login() {
			$this->form_validation->set_rules('email', 'Email', 'required');
			$this->form_validation->set_rules('password', 'Password', 'required');

			if ($this->form_validation->run() == false) {
				$this->load->view('auth/login');
			}else{
				$this->postlogin();
			}
		}

这是我的表单视图:

<?= form_open_multipart('Auth/registrasi'); ?>
<div class="border-top mt-3">
            <div class="ml-2">
            <label class="mt-2">Upload Kartu Identitas</label>
          </div>
          <div class="input-group mb-3">
           <input type="file" class="form-control" placeholder="Upload Foto Identitas" name="pict">
            <div class="input-group-append">
              <div class="input-group-text">
                <span class="fas fa-file-image"></span>
              </div>
            </div>
          </div>
          <small class="text-danger"><?= form_error('foto') ?></small>
        </div>
 <?= form_close(); ?>

这是错误:error



我什至尝试从以下位置更改变量:

$pict = $this->upload->data('file_name');

'img' => $pict,

到:

$pict2 = $this->upload->data('file_name');

'img' => $pict2,


但它得到另一个错误:error2

【问题讨论】:

  • 错误消息显示 上传失败,因此 $pict 变量未定义。您希望上传功能是强制性的还是可选的?
  • 我希望它是强制性的
  • 检查您的字段名称是否正确您在 name="pict" 中发布文件名并获取图像名称为 if(!$this->upload->do_upload('foto')){
  • 哦,是的,这是未经编辑的抱歉。但它已经在我的代码上完成了

标签: php codeigniter


【解决方案1】:

如果你想要上传功能,你可以像这样修改代码:

public function registrasi() {
    //VALIDATION
    $this->form_validation->set_rules('username', 'Username', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[tb_m_user.email]');
    $this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[3]|matches[konfirmasi_password]');
    $this->form_validation->set_rules('konfirmasi_password', 'Retype Password', 'required|trim|matches[password]');

    if($this->form_validation->run() == false) {
        $this->session->set_flashdata('fail' , 'Registration Failed! Please Try Again');
        $this->load->view('auth/registrasi');
    }else{
        //INSERT TO DATABASE
        $username   = $this->input->post('username');
        $email      = $this->input->post('email');
        $password   = password_hash($this->input->post('password'), PASSWORD_DEFAULT);
        $pict       = $_FILES['pict'];

        //LIBRARY UPLOAD CONFIG
        $config['upload_path']      = '/assets/dist/foto_validasi';
        $config['allowed_types']    = 'jpg|png';
        $config['file_name']        = date('ymd');
        $this->load->library('upload', $config);

        if(!$this->upload->do_upload('foto')){
            echo "Upload Failed"; 
            $this->session->set_flashdata('fail', $this->upload->display_errors() );
            redirect( 'auth/registrasi' );
        }else{
            $pict = $this->upload->data('file_name');
            $data = [
                'user_name'   => $username,
                'email'       => $email,
                'password'  => $password,
                'role'        => 'pengguna',
                'img'         => $pict,
                'status_aktivasi'   => 'tidak aktif',
                'created_by'        => 'SYSTEM',
            ];

            $this->m_auth->registrasi($data, 'tb_m_user');
            $this->session->set_flashdata('success' , 'Registration Successful! Please Login');
            Redirect('Auth/login');
        }
    }
}

$this-&gt;upload-&gt;display_errors()代码会在上传的文件不符合要求时显示错误信息,所以如果文件没有上传,注册数据将不会被保存。

【讨论】:

  • 它没有显示任何错误。它只是重定向回注册页面,没有任何以下错误。数据甚至没有进入数据库
  • 我已经更新了代码,将$this-&gt;load-&gt;view('auth/registrasi'); 更改为redirect( 'auth/registrasi' );,这应该会在重定向后显示会话上传消息
  • 是的,它成功了!显然我的upload_path 无效。我忘了在“/”之前加上“点”。它必须是这样的'./assets/dist/foto_validasi'
【解决方案2】:

将帖子字段名称更改为 if(!$this->upload->do_upload('pict')){

if(!$this->upload->do_upload('pict')){ // You should change this 

【讨论】:

    【解决方案3】:

    size 属性应该在输入字段中

    <input type="file" size="1" class="form-control" placeholder="Upload Foto Identitas" name="pict">
    

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 2020-02-05
      • 2015-06-17
      • 1970-01-01
      • 2019-03-01
      • 2017-01-26
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多