web-dev-qa-db-fra.com

Vérification si $ _FILE est un tableau de métaboxes de téléchargement de fichiers

Cela fait presque 2 jours que je me bats avec cela, sans résultat. J'ai un type de message personnalisé de PRODUCTS qui contient un groupe de métaboxes pour le téléchargement de fichiers PDF dans le wp-admin. J'ai créé les métaboxes dans l'admin. Voici le code pour mes metaboxes:

//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'
        )
    )
);

Pour l'instant, il n'y a que deux pdf à télécharger. Voici le code pour afficher mes métaboxes dans le menu administrateur:

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>';

}

Tout cela fonctionne jusqu'à ce que j'essaie de vérifier si le champ de téléchargement de fichier a une valeur ou non. Voici ce que je travaille maintenant en ce qui concerne le code pour sauvegarder la méta (il y a des tonnes de code de débogage, donc vous êtes au courant):

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

Maintenant, même si je n'ajoute pas de fichier au champ de téléchargement, ma première condition est toujours remplie ici:

if(isset($_FILES[$pdf_field['name']]) {

Je sais que c'est parce qu'il renvoie un tableau du champ $ pdf_field. J'ai également essayé de vérifier si l'erreur était 0 en utilisant $_FILES[$pdf_field['name']['error'] mais je ne peux renvoyer aucune des valeurs du tableau $ _FILE.

Lorsque vous spécifiez un champ à télécharger et que je fais une print_r ($_FILES[$pdf_field['name']]), il retourne:

Array ( [name] => 1testpdf.pdf [type] => application/pdf [tmp_name] => /tmp/phpF7HQnJ [error] => 0 [size] => 8278 ) 

Ce qui est correct, mais le fait également lorsque je ne spécifie pas de champ. Seules les valeurs des tableaux sont vides, à l'exception de la valeur ERROR qui correspond à 4 (aucun fichier spécifié).

Je me suis tiré les cheveux par dessus. Quelle est la meilleure façon de procéder? Je pense que s’il s’agissait d’un seul métabox et que je pourrais l’appeler comme $FILE['name_of_file']['error'] cela fonctionnerait. Pourquoi utiliser une foreach dérange-t-il cela?

Je vous remercie!

1
drpcken

Ahh, je pense que j'ai pu y répondre seul. J'ai créé une variable pour le tableau $ _FILES ($ pdf_field ['name']) et j'ai pu l'utiliser pour obtenir les valeurs du tableau. Juste besoin de faire un peu d'erreur de gestion et de tester mes téléchargements. Si quelque chose ne va pas avec cette façon de faire, faites-le-moi savoir.

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