0

我是使用 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. 我们如何在视图中获取用户上传的文件名?
  3. 以及我们如何将 FileID 作为新文件名发送,以便 do_upload 函数可以将文件上传到服务器?

我会很感激任何带有示例代码的想法。

4

3 回答 3

1

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

模型是与数据库一起工作的,所以我在这个中使用控制器。

我们如何在视图中获取用户上传的文件名?

好吧,$_FILES 是 PHP 原生的,可以在您的控制器中访问。您还可以查看Upload 类。该类具有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();
  }
}
于 2012-05-30T19:55:40.670 回答
0

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

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

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

于 2012-05-30T19:48:17.573 回答
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. 从视图中显示的表单向模型发送信息
于 2012-05-30T20:03:21.103 回答