2014-11-27 2 views
0

이 코드는 지정된 폴더와 db 테이블로 파일을 전송하지만 브라우저에서 페이지를 열거 나 실행하면 브라우저는 자동으로 db 테이블에 무엇인가를 보내고 파일 이름 필드는 비어 있습니다. 아직 아무 것도 클릭/업로드하지 않았습니다. 내가 문제를 제대로 설명했는지 모르겠다. 문제는 페이지를 열었을 때 db 테이블 행을 검사하고 빈 행이 만들어 졌기 때문이다. id는 btw를 증가시키고 파일 이름 필드는 비어있다. (아직 아무것도 업로드하지 않았다.) 코드에 어떤 문제가 있습니까?PHP가 mysql에 파일 이름을 업로드

<?php 
if(isset($_FILES['filename'])){ 
    $errors= array(); 
    $file_name = $_FILES['filename']['name']; 
    $file_size =$_FILES['filename']['size']; 
    $file_tmp =$_FILES['filename']['tmp_name']; 
    $file_type=$_FILES['filename']['type']; 
    $file_ext=strtolower(end(explode('.',$_FILES['filename']['name']))); 

    $expensions= array("jpeg","jpg","png");   
    if(in_array($file_ext,$expensions)=== false){ 
     $errors[]="extension not allowed, please choose a JPEG or PNG file."; 
    } 
    if($file_size > 2097152){ 
    $errors[]='File size must be excately 2 MB'; 
    }    
    if(empty($errors)==true){ 
     move_uploaded_file($file_tmp,"uploads/".$file_name); 
     echo "Success"; 
    }else{ 
     print_r($errors); 
    } 
    } 

?> 

<?php 


$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "admin"; 

$filename = false; 
if(isset($_FILES['filename'])){ 
$filename = $_FILES['filename']['name']; 
} 

// Create connection 
mysql_connect($servername, $username, $password) or die ('MySQL Not found // Could Not Connect.'); 

mysql_select_db("admin") or die(mysql_error()) ; 

mysql_query("INSERT INTO upload_test (fileName) 
VALUES ('$filename')") ; 

?> 

내 양식 :

항상 INSERT 문을 실행되기 때문이다
<form name="form" method="POST" enctype="multipart/form-data" > 
<input name="filename" type="file" id="filename" /> 
<input name="submit" type="submit" id="submit"/> 
</form> 
+1

pathinfo() 예, 쿼리에 관계없이 항상 업로드가 있는지 여부의 실행 사용하는 것입니다. 1) 왜 그것을 첫 번째'if '블록에 넣지 않는가? 2) 당신은 ** SQL injection에 취약한 ** majorly ** 취약성을 가지고있다. 3) 새로운 코드에 대해 mysql_ 함수를 사용하지 않는다. ** deprecated ** _ – Wrikken

+0

** 경고 ** ** 이러한 매개 변수는 [제대로 이스케이프되지 않음] (http://bobby-tables.com/php) 때문에 이것은 매우 안전하지 않습니다. '$ _POST' 데이터를 직접 쿼리에 넣지 않아야합니다 : 거대한 [SQL injection bug] (http://bobby-tables.com/)가 생성됩니다. mysql_query는 쓸데없는 인터페이스이므로 사용해서는 안된다. PHP에서 제거되고있다. [PDO와 같은 현대적인 대체물은 배우기 어렵지 않습니다.] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/). [PHP The Right Way] (http://www.phptherightway.com/)와 같은 안내서는 모범 사례를 설명합니다. – tadman

+0

여러분의 제안에 감사드립니다. 나는 그들을 시도 할 것이다. 그래도 여전히 멍청한 녀석. – kim

답변

0

. 업로드 한 레코드 만 삽입하면됩니다. 사이드 노트에

if(isset($_FILES['filename'])){ 
    $errors = array(); 
    $file_name = $_FILES['filename']['name']; 
    $file_size =$_FILES['filename']['size']; 
    $file_tmp =$_FILES['filename']['tmp_name']; 
    $file_type=$_FILES['filename']['type']; 
    $file_ext=strtolower(end(explode('.',$_FILES['filename']['name']))); 

    $expensions= array("jpeg","jpg","png");   
    if(in_array($file_ext,$expensions)=== false){ 
     $errors[]="extension not allowed, please choose a JPEG or PNG file."; 
    } 
    if($file_size > 2097152){ 
    $errors[]='File size must be excately 2 MB'; 
    }   

    // if there are no errors...  
    if (empty($errors)==true) { 

     // upload the file... 
     move_uploaded_file($file_tmp,"uploads/".$file_name); 

     $servername = "localhost"; 
     $username = "root"; 
     $password = ""; 
     $dbname = "admin"; 

     // and create a new record in the database 
     mysql_connect($servername, $username, $password) or die ('MySQL Not found // Could Not Connect.'); 
     mysql_select_db("admin") or die(mysql_error()) ; 
     mysql_query("INSERT INTO upload_test (fileName) VALUES ('$file_name')") ; 

     echo "Success"; 
    }else{ 
     print_r($errors); 
    } 
} 

는 파일의 확장자를 얻을 수있는 짧은 방법은

$file_ext = pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION); 
+0

감사합니다! 당장 나를 구해 줬어. : D – kim

+0

텍스트 필드가 여러 개인 경우 어떨까요? 5 개의 텍스트 필드를 추가한다고 가정 해 보겠습니다. – kim

+0

[예제] (http://www.html-form-guide.com/php-form/php-form-processing.html)를보십시오. 다른 많은 "PHP 폼 처리"자습서도 온라인에 있습니다. –

관련 문제