检查是否为文件上载元数据数组设置了$_FILE

时间:2012-12-03 作者:ItsPronounced

我已经为此挣扎了将近两天,但都没有结果。我有一个自定义的帖子类型PRODUCTS 其中有一组元盒,用于在wp-admin. 我已经在管理中创建了元数据库。以下是我的元数据库的代码:

//PDF upload Meta Boxes
$meta_box_pdf_uploads = array(
    \'id\' => \'products-pdf-meta-boxes\',
    \'title\' => "PDFs",
    \'page\' => \'product\', //attach to products custom post
    \'context\' => \'normal\',
    \'priority\' => \'default\',
    \'fields\' => array(
        array(
            \'name\' => $prefix . \'pdf1\',
            \'desc\' => \'Product PDF\',
            \'id\' => $prefix . \'pdf1\',
            \'type\' => \'text\'
        ),
        array(
            \'name\' => $prefix . \'pdf2\',
            \'desc\' => \'Product PDF\',
            \'id\' => $prefix . \'pdf2\',
            \'type\' => \'text\'
        )
    )
);
目前只需上传两份pdf。以下是在“管理”菜单中显示我的元数据库的代码:

function products_pdf_uploads_show_meta() {
    global $meta_box_pdf_uploads, $post, $prefix;

    echo \'<table class="form-table">\';
    echo \'<p class="description">Upload your PDFs here</p>\';
    foreach ($meta_box_pdf_uploads[\'fields\'] as $field) {
        // get current post meta data
        $meta = get_post_meta($post->ID, $field[\'id\'], true);

        echo \'<tr>\',
                \'<td>\',

                    \'<input type="file" style="width: 700px;" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'" />\',
                \'</td>\',
             \'</tr>\';
    }

    echo \'</table>\';

}
在我尝试检查file upload字段是否有值之前,所有这些都有效。以下是我现在正在使用的保存meta的代码(有大量调试代码,所以您知道):

 //Upload PDF files
    foreach ($meta_box_pdf_uploads[\'fields\'] as $pdf_field) {

        //Make sure field isn\'t emtpy
        if(isset($_FILES[$pdf_field[\'name\']]) {
            //var_dump($_FILES);
            print_r ($_FILES[$pdf_field[\'name\']]);  //debugging
            $pdf_type = $_FILES[$pdf_field[\'name\'][\'tmp_name\']];  //debugging, can\'t get this to return any value
            wp_die(\'Passed! \'. $pdf_type); //debugging
            //Setup File type allowed

            //Get the file type


        } else {
            //var_dump($_FILES);
            print_r ($_FILES[$pdf_field[\'name\']]);
            wp_die(\'Nothing was passed: \' . $pdf_field[\'name\']);  //debugging
        }
    }
现在,即使我没有将文件添加到上载字段,我的第一个条件仍然满足:

if(isset($_FILES[$pdf_field[\'name\']]) {
我知道这是因为它返回一个$pdf\\u字段数组。我还尝试使用检查错误是否为0$_FILES[$pdf_field[\'name\'][\'error\'] 但我无法返回任何$\\u文件数组值。

当指定要上载的字段并执行print_r ($_FILES[$pdf_field[\'name\']]) 它返回:

Array ( [name] => 1testpdf.pdf [type] => application/pdf [tmp_name] => /tmp/phpF7HQnJ [error] => 0 [size] => 8278 ) 
这是正确的,但当我不指定字段时也会这样做,只有所有数组值都是空的,只有错误等于4(未指定文件)。

我一直在为这件事发愁。最好的方法是什么?我想如果它是一个单一的代谢箱,我可以这样称呼它$FILE[\'name_of_file\'][\'error\'] 这会有用的。为什么要使用foreach 搞砸了?

非常感谢。

1 个回复
最合适的回答,由SO网友:ItsPronounced 整理而成

啊,我想我能自己回答这个问题。我为$\\u文件($pdf\\u字段[\'name\')数组创建了一个变量,并能够使用这些变量来获取数组值。只需要做一些错误处理和测试我的上传。如果这样处理有什么问题,请告诉我。

 //Upload PDF files
    foreach ($meta_box_pdf_uploads[\'fields\'] as $pdf_field) {

        //put file array into a variable
        $pdf = $_FILES[$pdf_field[\'name\']];

        //if array is set and there is no error 
        if(isset($pdf[\'error\']) && $pdf[\'error\'] > 0) {

            //setup error handling based on error code
            wp_die(\'Error uploading file: Error Number is \' . $pdf[\'error\']);

        } else {  //Passed

结束

相关推荐

Metaboxes not saving data

我正在为一个插件重建一个元盒,它现在不会保存我输入的数据。HTML几乎与以前完全相同,但save\\u元函数根本不起作用。我已经阅读了不少教程,在StackExchange和其他几个网站上查看了大量问题,并试图找出任何容易的陷阱,但这些似乎都不是问题所在。有人能看看这个,告诉我我错过了什么吗?备注:这都是一节课。time\\U date\\U元函数中的数组用于另一个返回HTML的函数。据我所知,这不是问题所在。HTML字段显示正确,其源代码与我之前手动写出的HTML字段几乎相同。手写HTML与此函数输出之