2012-08-10 2 views
1

저는 작은 사용자 관리 온라인 상점에서 일하고 있으며 최종 사용자 (매장 관리자)가 제품 그래픽을 업로드 할 수있게하려고합니다. 그러나이 스크립트를 실행하면 실제로 이미지가 저장되지 않습니다. 나는이 팁과 튜토리얼에서이 스크립트를 만들었고, 이미지 업로드 부분을 제외한 모든 것을 얻었습니다.PHP 스크립트가 이미지를 제대로 업로드하지 못합니다.

// Set the image target directory here 
$target = "itemImages/"; 
$target = $target . basename($_FILES["image"]["name"]); 

// Variables get POSTed here - just tack new ones on at the end. 
// Various POSTs omitted for brevity 

$pic=($_FILES["image"]["name"]); 

// Places the picture in the folder 
if(move_uploaded_file($_FILES["image"]['tmp_name'], "itemImages/")) 
{ 
echo "The file " . basename($_FILES['uploadedfile']["name"]) . " has been   uploaded.<br />"; 
}else { 
    echo "There was an issue adding this item. Please try again.<br />"; 
} 

// Writes variables to the database 
mysql_query("INSERT INTO tbl_item (itemNAME,itemDESC,itemCOST,itemHCOL,itemHSIZ,itemIMG) 
VALUES ('$itemName','$itemDesc','$itemCost','$hasColor','$hasSize','$pic')"); 

mysql_close($con); 
?> 

모든 도움말, 팁, 조언, 통찰력 등은 대단히 감사하겠습니다.

+0

은 mysql 업데이트 및 성공 메시지입니다. –

+1

'form' 태그에 올바른'enctype'을 가지고 있습니까? – Cfreak

+0

태그를 표시 할 수 있습니까? –

답변

3

move_uploaded_files로 실행하는 것은 그 대상으로 파일 이름이 필요합니다. 그것은 맹목적으로 디렉토리로 이동, 그래서

move_uploaded_files($_FILES..., 'somedir/somefile.txt'); 

작동하지만

move_uploaded_file($_FILES..., 'somedir/'); 

하지 않습니다하지 않습니다.

또한 데이터베이스 작업은 SQL injection attacks에 취약합니다. 업로드 한 파일의 원격 이름 ($ pic을 통해 ['name'])을 맹목적으로 삽입하고 있으며 그 이름은 원격 사용자의 제어하에 있습니다.

+0

감사합니다. 도움을 받아서이 작업을 수행했습니다. 또한 SQL 주입에 대한 귀하의 의견에 감사 드리며이를 수정하기위한 연구를 수행 할 것입니다. 나는 모든 것이 회사 직원을 위해 내부적이기 때문에 너무 걱정하지 않았지만 모범 사례를 사용하는 것이 항상 좋은 것입니다. – CptTritium

+0

내부 사용이고 공격받을 가능성이 없을지라도, 누군가는 어떤 시점에'''또는 다른 SQL 메타 문자가있는 파일을 업로드하고 내용을 망칠 것입니다. –

+0

부적절한 탈출은 버그이며, 보안 위반이있는 경우 사용자를 해고 할 수있는 버그입니다. – tadman

0

폴더는 사용자가 웹 서버를 쓰기 권한이있는 itemImages 있는지 확인합니다 (예를 들어, Apache) (예를 들어 www-data)

0

.php 파일과 작성하려는 폴더가 동일한 "소유자"인지 확인하십시오. 또는 itemImages 폴더에 대한 사용 권한을 777로 설정하십시오 (이 방법은 권장하지 않습니다, 단지 디버그 방법).

관련 문제