2010-12-04 7 views
1

Je gère un champ de téléchargement de fichier dans un formulaire en utilisant les API de formulaire Drupal 6. Le champ de fichier est marqué requis. Je fais toutes les bonnes actions pour enregistrer et renommer les fichiers dans les emplacements appropriés.Gestion de fichiers Drupal 6

forme de téléchargement

$form = array(); 
.... 
$form['image'] = array(
    '#type' => 'file', 
    '#title' => t('Upload photo'), 
    '#size' => 30, 
    '#required' => TRUE, 
); 
$form['#attributes'] = array('enctype' => "multipart/form-data"); 
... 

forme validate gestionnaire

$image_field = 'image'; 

if (isset($_FILES['files']) && is_uploaded_file($_FILES['files']['tmp_name'][$image_field])) { 
    $file = file_save_upload($image_field); 
    if (!$file) { 
     form_set_error($image_field, t('Error uploading file')); 
     return; 
    } 
    $files_dir = file_directory_path(); 
    $contest_dir = 'contest'; 

    if(!file_exists($files_dir . '/' . $contest_dir) || !is_dir($files_dir . '/' . $contest_dir)) 
     mkdir($files_dir . '/' . $contest_dir); 


    //HOW TO PASS $file OBJECT TO SUBMIT HANDLER 
    $form_state['values'][$image_field] = $file; 
    file_move($form_state['values'][$image_field], $files_dir."/" . $contest_dir . "/contest-". $values['email']. "-" . $file->filename); 
} 
else { 
    form_set_error($image_field, 'Error uploading file.'); 
    return; 
} 

Sur la forme submiting

formulaire signale toujours une erreur Upload photo field is required. bien que les fichiers sont téléchargés se. Comment faire face à ce problème? Comment transmettre des informations de fichier à un gestionnaire de soumission?

Répondre

2

votre gestionnaire est erroné. Vous ne devriez jamais toucher les variables $ _FILES ou $ _POST dans drupal, vous devriez seulement utiliser les outils drupal. Dit que, la mise en œuvre, vous devriez est comme ça:

function my_form_handler(&$form,&$form_state){/** VALIDATION FILE * */ 
$extensions = 'jpeg jpg gif tiff'; 
$size_limit = file_upload_max_size(); 
$validators = array(
     'my_file_validate_extensions' => array($extensions), 
     'my_file_validate_size' => array($size_limit), 
); 

$dest = file_directory_path(); 
if ($file = file_save_upload('image', $validators, $dest)) { 
    //at this point your file is uploaded, moved in the files folder and saved in the DB table files 
} 
} 
1

de l'Drupal 6 Form API docs:

"Remarque: la propriété #required n'est pas prise en charge (si elle est définie sur true, cela entraînera toujours une erreur de validation). Au lieu de cela, vous pouvez utiliser votre propre fonction de validation pour effectuer des contrôles sur le tableau $ _FILES aveC#required set sur false. Vous devrez également ajouter votre propre astérisque si vous en voulez un. "

Ancien poste, mais je cherche quelque chose de similaire et je suppose que je l'ajoute: