Ошибка преобразования массива SQL в строку cakephp - PullRequest
0 голосов
/ 26 февраля 2012

Я столкнулся с этой странной проблемой при загрузке файла.Поэтому, когда я загружаю файл, все идет хорошо.Но когда я не выбираю любой файл в загрузке и отправляю форму, я получаю следующую ошибку:

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)

Теперь вот что я делаю: в моем контроллере:

Функция, которая делаетвызов функции загрузки файла:

            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] => 
        )

)

имя файла получается пустым.

вот как pr ($_FILES) выглядит так:

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
                        )

                )

        )

)

Я не могу понять, в чем может быть проблема.Кто-нибудь может помочь?Ваша помощь очень ценится.Спасибо,

1 Ответ

0 голосов
/ 26 февраля 2012

Вы задаете имя столбца для имени файла формы. Но поскольку поле формы возвращается в виде массива, база данных не знает, что с ним делать. Это то, что вам нужно будет сделать после сохранения файла в том месте, куда вы его поместили:

$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']);
}
...