PHP 파일 업로드 + 양식 유효성 검사

여우

다른 입력 필드의 유효성 검사 외에 파일 업로드의 유효성을 검사하고 싶습니다. 그렇게 어렵지는 않지만 파일을 선택하고 양식을 제출하면 다른 입력 오류가있을 때 파일도 임시로 업로드됩니다.

따라서 사용자는이 오류를 수정 한 다음 파일을 다시 선택해야합니다. :(. 사용자 친화적 인 구현 방법이 있습니까?

내 현재 구현은 거의 다음과 같습니다.

다음과 같은 간단한 형태가 있습니다.

<form method="post" enctype="multipart/form-data">
    <input type="text" name="firstname" value="<?php echo $form->getFirstname() ?>" />
    <input type="text" name="lastname" value="<?php echo $form->getLastname() ?>" />
    <input type="file" name="file" />
    <input type="hidden" name="terms" value="false"/>
    <input type="checkbox" name="terms" value="terms" <?php if ($form->getTerms() === 'terms') echo 'checked' ?> />
    <input type="submit" name="send" value="send" />
</form>

따라서이 양식을 제출 한 후 이름, 성 및 용어와 같은 모든 사용자 데이터는 다음과 같이 설정되고 확인됩니다.

if ( isset($_POST['send']) && $_POST['send'] === 'send' ) {

    if ( !\Fox\Validator::isString($_POST['firstname']) ) {
        \Fox\Validator::setError(1, 'firstname required');
    } else {
        $form->setFirstname($_POST['firstname']);
    }

    // ... other unimportant validations

    // validate file upload
    if (!isset($_FILES['file']['error']) || is_array($_FILES['file']['error'])) {

        \Fox\Validator::setError(10, 'error occurred');

    } else {

        // check error value
        switch ($_FILES['file']['error']) {

            // file exists
            case UPLOAD_ERR_OK:

                // check filesize (max filesize 100mb)
                if ($_FILES['file']['size'] > 104857600) {

                    \Fox\Validator::setError(10, 'max filesize overridden');

                } else {

                    $finfo = new finfo(FILEINFO_MIME_TYPE);

                    // define allowed mime types
                    $allowedMimeTypes = array(
                        'jpg' => 'image/jpeg',
                        'png' => 'image/png',
                        'gif' => 'image/gif',
                        'bmp' => 'image/bmp',
                        'bmp' => 'image/x-ms-bmp',
                        'bmp' => 'image/x-windows-bmp',
                        'mov' => 'video/quicktime',
                        'avi' => 'video/avi',
                        'avi' => 'video/msvideo',
                        'avi' => 'video/x-msvideo',
                        'mp4' => 'video/mp4',
                        'mpeg' => 'video/mpeg',
                        'mkv' => 'video/x-matroska',
                        'flv' => 'video/x-flv',
                        'wmv' => 'video/x-ms-wmv',
                    );

                    if (false === $ext = array_search($finfo->file($_FILES['file']['tmp_name']), $allowedMimeTypes, true)) {

                        \Fox\Validator::setError(10, 'file not supported');

                    }
                }

                break;

            case UPLOAD_ERR_NO_FILE:

                \Fox\Validator::setError(10, 'no file selected');
                break;

            case UPLOAD_ERR_INI_SIZE:
            case UPLOAD_ERR_FORM_SIZE:

                \Fox\Validator::setError(10, 'filesize overridden');
                break;

            default:

                \Fox\Validator::setError(10, 'error occurred');
        }

    }

    // check if form errors exists
    if (empty(\Fox\Validator::getError())) {

        // create unique filename
        $tmp = sha1_file($_FILES['file']['tmp_name']);

        // move file
        if (!move_uploaded_file($_FILES['file']['tmp_name'], sprintf('./Files/%s.%s', $tmp, $ext))) {

            \Fox\Validator::setError(10, 'error by uploading file');

        } else {

            header("Location: $successPage");
        }
    }
}

따라서 양식 오류가 없으면 파일이 올바르게 업로드되고 사용자는 성공 페이지로 리디렉션되지만 사용자가 firstname과 같은 필수 입력 필드를 놓쳐 오류가 발생하면 제출 작업을 통해 파일도 업로드됩니다. 그러나 저장되지 않았으므로 사용자는 오류가있는 입력을 수정하고 파일을 다시 선택해야합니다.

여우

좋아, 나는 Ryan Vincent가 위의 주석에서 설명한 솔루션을 구현했으며 서버 측 유효성 검사 만 사용하고 있습니다.

따라서 다른 양식 오류가 있으면 업로드 된 파일을 통과시키고 임시 디렉터리에 업로드합니다. 그 후 양식의 파일 입력 필드를 성공 메시지와 임시 파일 이름을 포함하는 숨겨진 필드로 대체하므로 다른 양식 오류가 발생하면 파일이 여전히 임시 디렉토리에 영구적이며 다시 업로드되지 않아야합니다. 양식 오류가 발생하지 않으면 파일이 임시 디렉토리에서 대상 디렉토리로 이동됩니다.

추가로 cronjob은 특정 간격으로 임시 디렉토리를 플러시하고 사용하지 않는 파일은 삭제됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파일 업로드로 양식 유효성 검사

분류에서Dev

파일 업로드 양식 유효성 검사

분류에서Dev

PHP 양식 유효성 검사 코드

분류에서Dev

Django 양식에 업로드 할 때 파일 내용 유효성 검사

분류에서Dev

PHP MySQL 삽입 파일, OR 연산자가있는 IF 문으로 양식 유효성 검사

분류에서Dev

asp.net C # 웹 양식을 사용한 다중 파일 업로드에 대한 유효성 검사

분류에서Dev

PHP / JavaScript 이메일 양식 및 유효성 검사

분류에서Dev

laravel 5.1에서 파일 업로드 양식 유효성 검사가 작동하지 않습니까?

분류에서Dev

2 이메일 문의 양식 PHP에서 보안 코드로 유효성 검사

분류에서Dev

PHP 유효성 검사 후 javascript / jquery로 양식 제출

분류에서Dev

변수, PHP로 양식 유효성 검사

분류에서Dev

양식 유효성 검사 (PHP)로 양식 제출 미리보기

분류에서Dev

PHP 단순 양식 유효성 검사

분류에서Dev

PHP 기본 양식 유효성 검사

분류에서Dev

PHP 양식 유효성 검사 실패

분류에서Dev

양식 유효성 검사 문제 PHP

분류에서Dev

배열 파일 필드에 대한 양식 제출 유효성 검사

분류에서Dev

Laravel 양식 유효성 검사 : 필드 a 또는 b와 동일

분류에서Dev

두 필드가 동일한 경우 양식 유효성 검사

분류에서Dev

PHP로 이메일 유효성 검사

분류에서Dev

PHP / JQuery / AJAX 양식-인라인 오류 스타일링으로 만 서버 측 유효성 검사

분류에서Dev

유효성 검사기로 양식 유효성 검사

분류에서Dev

Jquery 유효성 검사로 양식 유효성 검사

분류에서Dev

PHP 형식의 유효성 검사 및 파일에 저장

분류에서Dev

innerHTML로 양식 유효성 검사

분류에서Dev

PHP 양식에서 이메일의 도메인 별 유효성 검사

분류에서Dev

JS 유효성 검사를 사용하여 HTML 양식을 PHP 파일에 제출

분류에서Dev

PHP 양식 제출 및 양식 데이터 유효성 검사

분류에서Dev

PHP에서 업로드 파일 필드의 유효성을 검사하는 방법

Related 관련 기사

  1. 1

    파일 업로드로 양식 유효성 검사

  2. 2

    파일 업로드 양식 유효성 검사

  3. 3

    PHP 양식 유효성 검사 코드

  4. 4

    Django 양식에 업로드 할 때 파일 내용 유효성 검사

  5. 5

    PHP MySQL 삽입 파일, OR 연산자가있는 IF 문으로 양식 유효성 검사

  6. 6

    asp.net C # 웹 양식을 사용한 다중 파일 업로드에 대한 유효성 검사

  7. 7

    PHP / JavaScript 이메일 양식 및 유효성 검사

  8. 8

    laravel 5.1에서 파일 업로드 양식 유효성 검사가 작동하지 않습니까?

  9. 9

    2 이메일 문의 양식 PHP에서 보안 코드로 유효성 검사

  10. 10

    PHP 유효성 검사 후 javascript / jquery로 양식 제출

  11. 11

    변수, PHP로 양식 유효성 검사

  12. 12

    양식 유효성 검사 (PHP)로 양식 제출 미리보기

  13. 13

    PHP 단순 양식 유효성 검사

  14. 14

    PHP 기본 양식 유효성 검사

  15. 15

    PHP 양식 유효성 검사 실패

  16. 16

    양식 유효성 검사 문제 PHP

  17. 17

    배열 파일 필드에 대한 양식 제출 유효성 검사

  18. 18

    Laravel 양식 유효성 검사 : 필드 a 또는 b와 동일

  19. 19

    두 필드가 동일한 경우 양식 유효성 검사

  20. 20

    PHP로 이메일 유효성 검사

  21. 21

    PHP / JQuery / AJAX 양식-인라인 오류 스타일링으로 만 서버 측 유효성 검사

  22. 22

    유효성 검사기로 양식 유효성 검사

  23. 23

    Jquery 유효성 검사로 양식 유효성 검사

  24. 24

    PHP 형식의 유효성 검사 및 파일에 저장

  25. 25

    innerHTML로 양식 유효성 검사

  26. 26

    PHP 양식에서 이메일의 도메인 별 유효성 검사

  27. 27

    JS 유효성 검사를 사용하여 HTML 양식을 PHP 파일에 제출

  28. 28

    PHP 양식 제출 및 양식 데이터 유효성 검사

  29. 29

    PHP에서 업로드 파일 필드의 유효성을 검사하는 방법

뜨겁다태그

보관