0

アップロードされた画像に対していくつかの検証を試みています。画像が選択されてアップロードされているかどうかを確認すると、画像がアップロードされていない場合はエラー メッセージが返されます。しかし、私の方法では常に を返しますfalse

メソッドは次のとおりです。

class event{

        private $dbh;
        private $post_data;


        public function __construct($post_data, PDO $dbh){
                $this->dbh = $dbh;
                $this->post_data = array_map('trim', $post_data);

        }

public function checkValidImages(){
            $errors = array();

            if(empty($this->post_data['event-images'])){
                $errors[] = 'Please select at least one image to upload.';
            }

            if(count($errors) > 0){
                return $errors;
            }else{
                return FALSE;
            }

        }

ここでそれを呼び出します:

// Check all images are valid
        $images = new event($_FILES, $dbh);
        var_dump($imageErrors = $images->checkValidImages());

var_dump()を返しますbool(false)

フォームは次のとおりです。

<form name="submit-event" action="submit-event.php" method="post" enctype="multipart/form-data">
<div class="large-12 columns no-padding">
<p>Select images for this event</p><br />
<input type="file" class="right" name="event-images[]" size="50" multiple="multiple" />
</div>
</form>

では、画像を選択していない場合でも、メソッドが false を返すのはなぜですか。

4

1 に答える 1

0

HTML ファイルの入力が空のままの場合、ブラウザは引き続きフォーム要素の名前を送信するため、$_FILES 配列でそのエントリを取得しますが、エラー コードはUPLOAD_ERR_NO_FILEで、ファイル名は"".

多くのことがうまくいかない可能性があるため、とにかくエラーコードを確認する必要があります。したがって、検証コードは次のようになります。

$numOkayFiles = 0;
$numIntendedFiles = 0;
foreach ($_FILES['event-images']['error'] as $errorCode) {
    $numIntendedFiles += ($errorCode != UPLOAD_ERR_NO_FILE);
    switch ($errorCode) {
    case UPLOAD_ERR_OK:
        $numOkayFiles++;
        break;
    case UPLOAD_ERR_INI_SIZE:
    case UPLOAD_ERR_FORM_SIZE:
        $errors[] = 'Your file was bigger than the maximum allowed size.';
        break;
    case UPLOAD_ERR_NO_FILE:
        // ignore
        break;
    default:
        $errors[] = 'A problem occured during file upload.';
    }
}
if ($numIntendedFiles == 0) {
    $errors[] = 'Please select at least one image to upload.';
}
于 2013-09-24T17:25:09.537 に答える