2012-02-25 27 views
0

私はファイルアップロードでこの奇妙な問題に直面しています。 ファイルをアップロードすると、すべてうまくなります。今ここにSQL配列から文字列への変換エラーcakephp

Notice (8): Array to string conversion [CORE\cake\libs\model\datasources\dbo_source.php, line 749] 

Warning (512): SQL Error: 1054: Unknown column 'Array' in 'field list' [CORE\cake\libs\model\datasources\dbo_source.php, line 684] 

Query: INSERT INTO `masters` (`candidate_id`, `candidate_name`, `candidate_file_name`) VALUES ('heman', 'He Man', Array) 

は私がやっているものです:私は、フォームをアップロードでanyfileのを選択し、提出していない場合しかし、私は次のエラーを取得する私のコントローラで:

アップロードファイルへの呼び出しを行う機能機能:

  if ($_FILES['data']['name']['Master']) 
      { 
       $this->upload_files(); 
      } 

ここでは、ファイルのアップロード機能である:ここで

function upload_files() { 

    $fcnt = 0; 
    $vdata = $_FILES['data']['name']['Master']; 
      echo "Vdata:"; 
      pr($vdata); 
    foreach ($vdata as $v) 
    { 
     $pro_files[] = array(
      'name'=>$_FILES['data']['name']['Master']['candidate_file_name'], 
      'tmp'=>$_FILES['data']['tmp_name']['Master']['candidate_file_name'], 
      'type'=>$_FILES['data']['type']['Master']['candidate_file_name'], 

     ); 
     echo "Pro_files:"; 
     pr($pro_files); 
     $fcnt++; 
    } 

    $cnt = 0; 

    $allowed = array(
     'xls','xlsx','db','mbd', 
     'txt','pdf','doc','docx', 
     'log','rtf','wpd','wps', 
     'csv','dat','pps','ppt', 
     'pptx','sdf','xml','bmp', 
     'gif','jpg','png','psd', 
     'thm','tif','svg','sql', 
     'html','htm','js','php', 
     'bin','mim','7z','deb', 
     'gz','pkg','sit', 
     'sitx','tar.gz','zip', 
     'zipx','pdf' 
    ); 

    foreach ($pro_files as $file) 
    { 
     $fileType = $file['type']; 
     $fileType2 = explode('/',$fileType); 
     $fileName = $file['name']; 
     $path = 'C:\wamp\www' . '\\' . $fileName; 
     //if (in_array($fileType2[1],$allowed)) 
     //{ 
     echo "fileName";  
     pr($fileName); 
      if (move_uploaded_file($file["tmp"], $path)) 
      { 
       $this->data['Master']['candidate_file_name'] = $fileName; 
      } 

     //} 

     $cnt++; 
    } 

} 

私のデバッグデータがどのように見えるかです:ここでは

Array 
    (
    [Master] => Array 
     (
      [candidate_id] => heman 
      [candidate_name] => He Man 
      [candidate_file_name] => Array 
       (
        [name] => test.txt 
        [type] => text/plain 
        [tmp_name] => C:\wamp\tmp\php329D.tmp 
        [error] => 0 
        [size] => 0 
       ) 

     ) 

) 

はVDATAがどのように見えるかです:ここ

Array 
(
    [candidate_file_name] => 
) 

は、ファイル名が何もないように出てくる

Array 
(
    [0] => Array 
     (
      [name] => 
      [tmp] => 
      [type] => 
     ) 

) 

のようにプロファイルがどのように見えるかです。私は問題が何であるかを把握することはできませんよ

Array 
(
    [data] => Array 
     (
      [name] => Array 
       (
        [Master] => Array 
         (
          [candidate_file_name] => 
         ) 

       ) 

      [type] => Array 
       (
        [Master] => Array 
         (
          [candidate_file_name] => 
         ) 

       ) 

      [tmp_name] => Array 
       (
        [Master] => Array 
         (
          [candidate_file_name] => 
         ) 

       ) 

      [error] => Array 
       (
        [Master] => Array 
         (
          [candidate_file_name] => 4 
         ) 

       ) 

      [size] => Array 
       (
        [Master] => Array 
         (
          [candidate_file_name] => 0 
         ) 

       ) 

     ) 

) 

:ここ

は次のようにPR($ _ FILES)がどのように見えるかです。 誰も助けることができますか? あなたのご協力が大変ありがとうございます。 ありがとう、

答えて

0

フォームファイル名に列の名前を設定しています。しかし、フォームフィールドは配列として戻ってくるので、データベースはそれをどうしたらいいのか分からない。フォームフィールドが空だった場合

$this->request->data['Master']['candidate_file_name'] = '/path/to/where/you/saved/the/file.ext'; 

、その後、あなただけ実行する必要があります:これは、あなたがそれを置く場所にファイルを保存すると、あなたが行う必要がありますものです

unset($this->request->data['Master']['candidate_file_name']); 

UPDATEこれをチェックする

最良の方法は次のとおりです。

if (empty($this->request->data['Master']['candidate_file_name']['name'])) { 
    unset($this->request->data['Master']['candidate_file_name']); 
} 
+0

私はそれがあなたの嘆願でき取得できませんでしたどうして?私はcakephpの初心者です。 –

+1

投稿内のデバッグデータを見てください。 'candidate_file_name'はフォームからのファイル情報の配列として戻ってきています。だからあなたはそれを変更せずにデータベースに保存しようとすると、配列を値として保存しようとしています。それがエラーの原因です。データベースは文字列を要求しています。だから、ファイルをアップロードしてそれをあなたが望むディレクトリに移動したら、 'candidate_file_name'をその場所に更新する必要があります。そうすれば、データベースから後でそれを選択するときに、正しい場所にあるファイルを指し示します。 –

+0

ねえ、これを試しましたが、同じエラーが出るようです。 \t \t \t \t if(!空の($ _ FILES [ 'データ'] [ '名前'] [ 'マスター'])) \t \t \t \t { \t \t \t \t \tエコー "こんにちは"; \t \t \t \t \t $ this-> upload_files(); \t \t \t \t \t echo "hi";他 \t \t \t \t} \t \t \t \t \t \t \t \t {解除 \t \t \t \t \t(の$ this - >要求 - >データ[ 'マスター'] [ 'candidate_file_name'])。 \t \t \t \t –

関連する問題