2012-08-10 2 views
1

나는 바보 같은 짓을하고 있다고 확신하지만 이것을 점검하고 다시 점검했다. 이것은 내 사진 업 로더이며, 사진 파일 자체를 "reccs"라는 폴더에 저장 한 다음 내 DB의 행에 사진의 이름을 저장합니다. DB 부분은 완벽하게 작동하지만 내 사진이 폴더에 표시되지 않습니다. 오류를 표시하지 않고 작동하는 것 같습니다 ("성공"메시지가 표시됨). 응!MySQL과 별도의 폴더로 PHP 업 로더

코드는 다음과 같습니다. 모든 통찰력에 감사드립니다.

$link = mysql_pconnect($host, $username, $password); 
$db = mysql_select_db ($dbname); 

$target = "reccs/"; 
$target = $target . basename($_FILES['photo']['name']); 
$pic=($_FILES['photo']['name']); 

mysql_query("UPDATE login SET recc = '$pic' WHERE username = '".$_SESSION['user']['username']."'"); 

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) 
{ 

echo "The file has been uploaded, and your information has been added to the directory"; 
} 
else { 

echo "Sorry, there was a problem uploading your file."; 
} 
+0

주를 저장합니다. '$ _FILES [ 'photo'] [ 'name']'에서 mysql_real_escape_string()을 호출해야합니다. 장기적으로는 PDO 나 MySQLi 같은 새로운 MySQL API로 이동하여 준비된 문을 지원하는 것이 좋습니다. –

+0

대상 폴더에 대한 쓰기 권한이 있습니까? –

답변

0

reccs 앞에는 슬래시가 있어야합니까? move_upload_file이 성공했다는 것을 알게 된 후 mysql 업데이트 쿼리가 if 문 내부에서 더 나을 것으로 보입니다.

0

시도;

if(move_uploaded_file($pic, $target)) 
0

서버 설정에 따라 $ target을 절대 경로가 아닌 상대 경로로 설정해야 할 수 있습니다. 최소한 홈 디렉토리에는 절대적이어야합니다. 따라서 reccs가 루트 사이트 디렉토리의 디렉토리라면 $ target을 /reccs/file.name으로 설정하십시오.

이유는 기본적으로 파일이 호스트 수준이 아닌 루트 (OS) 수준에있는/tmp에 업로드되므로/tmp와 관련된 경로가 일반적으로 의미가 없기 때문입니다.

0

사진을 저장하는 것은 매우 나쁜 습관입니다. 나는 사진을 업로드하기 전에 아래에 할 것을 제안합니다.

  • 압축 해제 이름 및 확장자.
  • 이제 확장명이 유효한지 확인하십시오. 유효 할 경우
  • 첫 번째 트림을 한 다음 공백이 하나 인 여러 공백을 모두 지 웁니다.
  • 이제 파일 이름을 소문자로 바꾸고 모든 공간을 _으로 변경하고 파일 이름에 timestamp를 추가하십시오.
  • 모든 특수 문자를 제거하십시오 (', " , \ etc)
  • 이제 해당 확장자의 파일 이름을 추가하십시오.

다음 SQL은 SQL 주입에 취약 것을 데이터베이스에