2013-10-30 2 views
0

여러 이미지 (.jpg/.png/etc)를 업로드하는 방법을 둘러 보았습니다. 내 작업을 위해 데이터베이스 레코드에 5 장의 사진을 업로드하려고했습니다. 지금까지 나는 하나의 레코드에 5를 함께 업로드하는 데 어려움을 겪고 있습니다. Ws3 웹 사이트에서 PHP를 사용했지만 성공적으로 작동하지만이 코드는 하나의 이미지만을위한 것입니다.다중 사진 업로드 PHP

PHP 코드 - 다음과 같이

$allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $_FILES["file"]["name"]); 
    $extension = end($temp); 

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& ($_FILES["file"]["size"] < 2000000) 
&& in_array($extension, $allowedExts)) 
{ 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
    { 

    } 
    else 
    { 
     move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . uniqid() . "_" . $_FILES["file"]["name"]); 
    } 
    } 
} 
else 
{ 
    $error = "Invalid file"; 
} 

내 HTML은,

<label for="file">Filename:</label> 
     <input type="file" name="file" id="file"> 

     <input type="file" name="file" id="file"> 

     <input type="file" name="file" id="file"> 

     <input type="file" name="file" id="file"> 

     <input type="file" name="file" id="file"> 

어떤 조언을 크게들 감사합니다! 환호

+0

동일한 이름을 가진 여러 필드를 가질 수없고 작동 할 것으로 기대됩니다. 배열을 만들려면'name = "file []"'으로 시도하십시오. – PeeHaa

+2

긴 if 문 대신에 : if (in_array (array ("image/gif", image/jpg, "image/jpg", "image// png "), $ _FILES ["file "] ["type "])을 사용하십시오. –

+1

1.) W3School을 사용하지 마십시오. 오래된 정보와 나쁜 정보를 제공합니다. 2.) 파일 업로드 PHP는 업로드 된 파일이 하나 인 경우에만 유효합니다. 3.) 당신이 사용하고있는 HTML은 유효하지 않을뿐만 아니라 (id 요소는 문서 전체에서 고유해야합니다.) name은'name = "file []"'이어야하므로 여러 파일을 업로드하는 데 도움이되지 않습니다. 파일 배열 (대괄호에주의). –

답변

5

먼저 양식에 enctype="multipart/form-data"을 추가하십시오. 제출 된 파일의 배열을 만듭니다

<input type="file" name="file[]" id="file" > 
<input type="file" name="file[]" id="file" > 
<input type="file" name="file[]" id="file" > 

이 : 그런 다음에 file 필드의 이름을 변경합니다. 이제 파일에 foreach을 할 수 있습니다. 빠른 예 : 기존 코드 주위에

foreach ($_FILES['file']['name'] as $f => $name) { 

} 

, 다음 모든 $_FILES["file"] 변수에 [$f]를 추가합니다. 따라서 $_FILES["file"]["size"]$_FILES["file"]["size"][$f]으로 변경해야합니다. foreach에서는 $name에서 $_FILES["file"]["name"][$f]까지이므로 $name을 대신 사용할 수 있습니다. 스크립트를 기반으로

전체 PHP 코드 : 끝에

foreach ($_FILES['file']['name'] as $f => $name) { 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $name); 
    $extension = end($temp); 

if ((($_FILES["file"]["type"][$f] == "image/gif") 
|| ($_FILES["file"]["type"][$f] == "image/jpeg") 
|| ($_FILES["file"]["type"][$f] == "image/jpg") 
|| ($_FILES["file"]["type"][$f] == "image/png")) 
&& ($_FILES["file"]["size"][$f] < 2000000) 
&& in_array($extension, $allowedExts)) 
{ 
    if ($_FILES["file"]["error"][$f] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>"; 
    } 
    else 
    { 

    if (file_exists("upload/" . $name)) 
    { 

    } 
    else 
    { 
     move_uploaded_file($_FILES["file"]["tmp_name"][$f], "upload/" . uniqid() . "_" . $name); 
    } 
    } 
} 
else 
{ 
    $error = "Invalid file"; 
} 
} 

, 나는 다른 사이트에서 PHP에 대한 자세한 내용은 가서 당신을 건의 할 것입니다. W3schools는 쉽지만 가장 좋은 옵션은 아닙니다.

if ((($_FILES["file"]["type"][$f] == "image/gif") 
|| ($_FILES["file"]["type"][$f] == "image/jpeg") 
|| ($_FILES["file"]["type"][$f] == "image/jpg") 
|| ($_FILES["file"]["type"][$f] == "image/png")) 
&& ($_FILES["file"]["size"][$f] < 2000000) 
&& in_array($extension, $allowedExts)) 

만 배열

이 같은 충분합니다 :

if ($_FILES["file"]["size"][$f] < 2000000 && in_array($extension, $allowedExts)) 

$_FILES["file"]["type"] 항상 예상대로 형식을 반환하지 .. 우리는 그것을 여러 번 참조 예를 들어, 당신이 체크된다 오디오 및 비디오 파일. W3schools 스크립트를 참조하는 MIME 유형에 대한 또 다른 소식 : PHP: $_FILES["file"]["type"] is useless

StackOverflow에 대한 새로운 질문을하기 전에 검색을 수행하십시오. 나는 방금 당신을 위해 오랫동안 답을 썼습니다 만, 같은 종류의 질문을하기 위해 똑같은 일이 이미 많이있었습니다. https://stackoverflow.com/search?q=multiple+upload+php

희망 질문과 PHP를 배우는 행운을 보냅니다.

+0

안녕하세요 @ 조란. 답장을 보내 주셔서 감사합니다. 광범위한 검색을 수행했으며 내 질문에 대한 답변을 볼 수 없습니다. 말도 안되는 대답을 외면하기가 어렵습니다. 당신이 이미 비슷한 것을 게시했다면 사과드립니다 - 보지 못했습니다! 다시 건배! – user2729578

+0

문제 없습니다. 다행입니다. :) –

0

나는 문제가 HTML에서 생각 ... 대신에 다음의 다섯 가지 :

<input type="file" name="file" id="file"> 

는 다음과 같이 그 일을보십시오 :

<input type="file" name="file[]"> 

제출합니다 그 파일의 배열을, 오히려 동일한 입력 이름으로 여러 파일을 제출하는 것보다

보조 메모로 두 개 이상의 요소에서 동일한 id 속성을 사용하면 안됩니다. 어쩌면 수업을 사용하겠다는 뜻입니까?