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. また、do_upload 関数がサーバーにファイルをアップロードできるように、FileID を新しいファイル名として送信する方法を教えてください。

サンプルコードでアイデアをいただければ幸いです。

4

3 に答える 3

1

do_upload()関数をモデルまたはコントローラーのどこに配置する必要がありますか?

モデルはデータベースで動作するため、これではコントローラーを使用します。

ビュー内のユーザーによってアップロードされたfileNameを取得するにはどうすればよいですか?

$ _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"
)

そして、do_upload関数がサーバーにファイルをアップロードできるように、FileIDを新しいファイル名として送信するにはどうすればよいですか?

新しい名前を返す関数をモデルに作成し、アップロードクラスを開始する前にこれを設定します。次に例を示します。

//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

あなたの見解では:

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 に答える
0

コントローラーでアップロードを行いたい。ファイル名を POST 変数として取得し、モデルに送信できます。

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

データの消去などもお忘れなく。お役に立てれば。#3 さんの言ってる意味がよくわかりません。

于 2012-05-30T19:48:17.573 に答える