2011-09-28 3 views
0

나는 몇 가지 문제를 일으키는 업로드 스크립트를 가지고 있으며, 내 인생에서 그 이유를 알 수 없습니다. 다음은 PHP 코드입니다 :PHP 업로드 오류

mysql_connect('localhost', 'root', ''); 
mysql_select_db('uploads'); 

if (isset($_FILES["file"]["type"]) && isset($_FILES["file"]["size"])) { 
if (($_FILES["file"]["type"] == "image/png")) { 
    if ($_FILES["file"]["size"] < 500120) { 
     if ($_FILES["file"]["error"] > 0) { 
      echo $_FILES["file"]["error"]; 
     } else {       
      if (file_exists("uploads/" . $_FILES["file"]["name"])) { 
       echo $_FILES["file"]["name"] . " already exists. "; 
      } else { 
       move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]); 
       $name = $_FILES["file"]["name"]; 
       mysql_query("INSERT INTO uploads (name) VALUES ('$name')");     
       if (isset($_POST['title']) && isset($_POST['desc'])) { 
        $title = $_POST['title']; 
        $desc = $_POST['desc']; 
        mysql_query("INSERT INTO uploads (title, desc) VALUES ('$title', '$desc')"); 
        echo $title; 
        echo $desc; 
       }     
      } 
     } 
    } else { 
     echo "File is too big"; 
    } 
} else { 
    echo "Wrong file type"; 
} 
} 

내 파일 경로 입력을 형성이 올바른지 알고 난 $title 또는 $desc 변수를 에코 한 경우에는 올바른 값으로 돌아갑니다. 내 문제는 이것입니다 : 어떤 이유로 그것은 $title$desc 값을 데이터베이스에 입력하지 않습니다. 첫 번째 mysql 쿼리는 잘 작동하지만 두 번째 쿼리는 작동하지 않습니다. 왜 그런가?

+0

반드시 제목과 desc를 이름과 연결 하시겠습니까? –

+0

두 번째 쿼리 뒤에'echo mysql_error()'를 추가하면 어떤 결과가 나옵니까? –

+0

예, 조금 복잡해졌지만 $ name은 실제 파일 이름, $ title은 사용자 정의 이미지 이름, $ desc는 사용자 정의 설명 용입니다. – codedude

답변

2

descMySQL reserved keyword이므로 쿼리 문에 역 인용 부호로 묶어야합니다. mysql_error()을 점검하여 실패한 쿼리의 원인을 찾으십시오. 그들이 $_POST에서 직접 오는으로 삽입하기 전에

$success = mysql_query("INSERT INTO uploads (title, `desc`) VALUES ('$title', '$desc')"); 
if (!$success) echo mysql_error(); 

도 탈출하세요 $title

$desc.
$title = mysql_real_escape_string($_POST['title']); 
$desc = mysql_real_escape_string($_POST['desc']); 

그리고는 이전 쿼리 $name에 대해 동일한 작업을 수행합니다

$name = mysql_real_escape_string($_FILES["file"]["name"]); 
+0

이것은 $ title 변수에도 영향을 미칩니 까? – codedude

+0

@codedude 아니요. MySQL 예약어가 아니기 때문에 'title'에 영향을 미치지 않습니다. 방금 답변에 링크 된 목록을 참조하십시오. –

0

당신은 한 파일의 업로드 테이블에서이 개 기록을 만들 수 있습니다. 아마도 name 열이 null이 아니기 때문에 두 번째 쿼리가 작동하지 않을 수 있습니다. 다음과 같아야합니다.

$name = mysql_escape_string($_FILES["file"]["name"]); 
$title = isset($_POST['title'])?mysql_escape_string($_POST['title']) : ''; 

$desc = isset($_POST['desc'])?mysql_escape_string($_POST['title']) : ''; 

mysql_query("INSERT INTO uploads (`name`, `title`, `desc`) VALUES ('$name', $title, $desc)");