2010-01-03 142 views
0

我想驗證上傳的文件確實有.csv擴展名。但是,此代碼不起作用:Drupal:驗證文件擴展名嗎?

function upload_validate($form, &$form_state) { 
     // code that does work ... 
else { 
    $file = file_save_upload('upload'); 
    $errors = file_validate_extensions($file, 'csv'); 
    if (! empty($errors)) { 
    form_set_error('', $errors[0]); 
    } 
    else { 
    $_SESSION[FILE_KEY] = serialize($file); 
    } 
} 
} 

我在做什麼錯?

+0

不工作意思是什麼? – 2010-01-04 11:20:23

+0

無法爲非CSV文件設置錯誤。 – 2010-01-04 18:27:20

回答

0

<wrong>
我認爲你的問題是form_set_error()。下面是實際的函數(註釋):

<?php 
function form_set_error($name = NULL, $message = '', $reset = FALSE) { 
    static $form = array(); 
    if ($reset) { 
    $form = array(); 
    } 
    // here is where setting $name to '' is a problem 
    if (isset($name) && !isset($form[$name])) { 
    $form[$name] = $message; 
    if ($message) { 
     drupal_set_message($message, 'error'); 
    } 
    } 
    return $form; 
} 
?> 

我認爲這個問題是要傳遞一個空字符串$name這樣form_set_error看到那名被設置但不能是一個數組鍵是一個空字符串。我會嘗試調用這樣的功能:「!」。

form_set_error(, $errors[0]); 

</wrong>(當我第一次寫這個我沒看過我添加到代碼的註釋後,該行的isset()的INF前我將試圖傳遞一個字符串,它是不是在$form陣列的任何部分,看看會發生什麼,但可能會嘗試下面的回答)

除此之外,從看它看起來你已經寫了應工作的代碼API Documentation for file_validate_extensions() 。你有沒有嘗試過使用類似drupal_set_message()的東西來檢查你的部分是否開始運行,如果你認爲他們應該是。這可能是你的if邏輯有問題。