如何从MODEL中输入文件名从输入表单插入数据库?

时间:2012-05-30 19:40:09

标签: php codeigniter

我是使用CodeIgniter的新手。如果我的问题很愚蠢,我道歉。
我的模型功能如下:

function entry_insert($fname){
$this->load->database();
$maxFileID=mysql_fetch_array(mysql_query("SELECT max(convert(substring( FileID , 1,length(FileID)-4 ) ,unsigned integer)) as val FROM docrepository"));
 // Find the maximum value of FileID
  if ($maxFileID['val']==NULL)
  {
  $temp="1.PDF";
  }
  else
  {
  //$data["FileID"]=(string)(intval(substr($row[0],0,-4))+1).".PDF"; // If there is already file 
  $temp=(string) ($maxFileID['val']+1).".PDF";
  }
   $data=array(

    'FileID'        =>$temp,
   'FileName'       =>$fname,// Not sure whether it will work---I need your suggestion
    'title'         =>$this->input->post('title'),
    'author'        =>$this->input->post('author'),
    'description'   =>$this->input->post('description'),
    'companyName'   =>$this->input->post('companyName'),
    'aircraftModel' =>$this->input->post('aircraftModel'),
    'aircraftNumber'=>$this->input->post('aircraftNumber'),
    'documentType'  =>$this->input->post('documentType'),
    'documentNumber'=>$this->input->post('documentNumber'),
    'sectionNumber' =>$this->input->post('sectionNumber'),
    'dateCreated'   =>$this->input->post('dateCreated'),
    'keywords'      =>$this->input->post('keywords'),
    'notes'         =>$this->input->post('notes')

   );
   $this->db->insert('docrepository',$data);

  }

所有数据都来自视图中的输入表格 我的目标是存储原始文件名是数据库并将服务器中的文件上传到特定格式(FileID)。 所以在这种背景下

  1. 我应该在模型中还是在控制器中放置我的do_upload()函数?
  2. 我们如何获取用户在视图中上传的fileName?
  3. 以及我们如何将FileID作为新文件名发送,以便do_upload函数可以在服务器中上传文件?
  4. 我会对示例代码的任何想法表示感谢。

3 个答案:

答案 0 :(得分:1)

  

我应该在模型中还是在控制器中放置我的do_upload()函数?

模型是使用数据库,所以我在这个中使用控制器。

  

我们如何获取用户在上传的fileName   查看?

好吧,$ _FILES是PHP原生的,可以在你的控制器中访问。您还可以查看Upload class。该类具有data()函数,该函数返回有关该文件的所有信息。

//sample result of $this->upload->data()
Array
(
    [file_name]    => mypic.jpg
    [file_type]    => image/jpeg
    [file_path]    => /path/to/your/upload/
    [full_path]    => /path/to/your/upload/jpg.jpg
    [raw_name]     => mypic
    [orig_name]    => mypic.jpg
    [client_name]  => mypic.jpg
    [file_ext]     => .jpg
    [file_size]    => 22.2
    [is_image]     => 1
    [image_width]  => 800
    [image_height] => 600
    [image_type]   => jpeg
    [image_size_str] => width="800" height="200"
)
  

以及我们如何将FileID作为新文件名发送以便do_upload   功能可以在服务器上传文件吗?

在模型中创建一个返回新名称的函数,并在启动上传类之前设置它,例如:

//function save in the controller
function save() {
  $fname = $_FILES["input_upload"]["name"];
  $name = $this->model->getNewFileName($fname);
  $config["file_name"] = $name; //this replaces the name of the file on upload
  $this->load->library('upload', $config);
  if( $this->upload->do_upload() ) {
    $this->model->save();
  }
}

答案 1 :(得分:0)

您想在控制器中进行上传。您可以将文件名作为POST变量并将其发送给模型。

$this->load->model('model_name');
$this->model_name->saveFile($_POST['fileName'];

不要忘记清理数据等。希望这可以帮助。我真的不明白你的意思#3。

答案 2 :(得分:0)

在您看来:

echo form_open('your_controller/controller_function');

示例:

echo form_open('userfiles/saveform');

然后,在你的控制器中:

public function saveform() 
{
    if($this->userfiles_model->entry_insert())
    {
        $this->load->view('your_view', $array);
    }
}

并且,entry_insert将是您模型中的一项功能,可能会也可能不会调用您模型中的do_upload

编辑:我的理解是控制器只是视图和模型之间的“流量控制器”。任何上传或数据库保存都应该放在模型中。使用控制器:

  1. 从模型中检索信息并将该信息发送到视图
  2. 从视图中显示的表单向模型发送信息