2010-12-04 18 views
1

Ich handle Datei-Upload-Feld in einem Formular mit Drupal 6 Formular-APIs. Das Dateifeld ist als erforderlich markiert. Ich mache die richtigen Schritte, um Dateien an den richtigen Stellen zu speichern und umzubenennen.Drupal 6 Datei Handhabung

Upload-Formular

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

Form Validate-Handler

$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; 
} 

auf Vordruck berichtet

Formular submiting immer einen Fehler Upload photo field is required. obwohl Dateien hochgeladen werden immer. Wie geht man mit diesem Problem um?

Wie übergeben Sie Dateiinformationen an den Handler?

Antwort

2

Ihr Handler ist falsch. Sie sollten nie $ _FILES- oder $ _POST-Variablen in drupal berühren, stattdessen sollten Sie nur die drupal-Tools verwenden. Sagte, dass, wie, dass die Umsetzung sollten Sie ist:

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

Vom Drupal 6 Form API docs:

"Hinweis: Die Eigenschaft #required wird nicht unterstützt (das Setzen auf true führt immer zu einem Validierungsfehler). Stattdessen sollten Sie Ihre eigene Validierungsfunktion verwenden, um das $ _FILES-Array zu prüfen, wobei #required auf false gesetzt ist. Sie müssen auch Ihre eigenen erforderlichen Sternchen hinzufügen, wenn Sie eine möchten. "

Alte Post, aber ich bin auf der Suche nach etwas Ähnliches und dachte, dass ich das hinzufügen.

Verwandte Themen