1

Drupal6フォームAPIを使用してフォームのファイルアップロードフィールドを処理しています。ファイルフィールドは必須としてマークされています。ファイルを適切な場所に保存して名前を変更するために、すべての正しい手順を実行しています。

アップロードフォーム

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

フォーム検証ハンドラ

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

フォームの送信時

Upload photo field is required.ファイルがアップロードされているにもかかわらず、フォームは常にエラーを報告します。この問題に対処する方法は?

ファイル情報を送信ハンドラーに渡す方法は?

4

3 に答える 3

2

ハンドラーが間違っています。drupalの$_FILESまたは$_POST変数には絶対に触れないでください。代わりに、drupalツールのみを使用する必要があります。そうは言っても、あなたがすべき実装はそのようなものです:

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
 }
}
于 2010-12-22T17:53:42.383 に答える
2

次のように、filefieldモジュールを使用して、フォームに追加することをお勧めします。

カスタム形式のDrupalImagfield/ Filefield

質問には解決策へのリンクがあります:

http://sysadminsjourney.com/content/2010/01/26/display-cck-filefield-or-imagefield-upload-widget-your-own-custom-form

于 2010-12-22T20:55:32.087 に答える
1

Drupal 6 Form APIドキュメントから:

「注:#requiredプロパティはサポートされていません(trueに設定すると、常に検証エラーが発生します)。代わりに、独自の検証関数を使用して、#requiredをfalseに設定して$_FILES配列をチェックすることをお勧めします。必要に応じて、必要なアスタリスクも追加する必要があります。」

古い投稿ですが、似たようなものを探していて、それを追加すると思いました。

于 2013-04-03T19:12:25.190 に答える