2012-09-23 2 views
0

사진을 저장하고 데이터베이스에서 검색하려고하는데 문제가 있습니다. 다른 게시물을 살펴 보았지만 해결책을 찾을 수 없었습니다. 사진은 데이터베이스에 업로드되고 있지만 다시 가져올 수는 없습니다. 또한 url에서 $ id = 0 이지만 해당 데이터베이스 번호와 동일하게 $ id를 변경하더라도 여전히 빈 페이지가로드됩니다 ... 많은 코드이므로 모든 응답이 가능합니다. 대단히 감사합니다!!데이터베이스에서 사진 저장 및 검색

CHOOSE_PHOTO.PHP

<form enctype="multipart/form-data" action="process_photo.php" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
Choose a file to upload: <input name="image" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

PROCESS_PHOTO.PHP

MY_LOGIN_INFO_AND_DATABASE_CONNECTION 

if ($_FILES) { 
    $image_types = array 
    ("image/bmp", 
    "image/jpeg", 
    "image/pjpeg", 
    "image/gif", 
    "image/x-png"); 
if (is_uploaded_file ($_FILES["image"]["tmp_name"])) { 
    $image = addslashes (fread 
     (fopen ($_FILES["image"]["tmp_name"], "r"), 
     filesize ($_FILES["image"]["tmp_name"]))); 
$file_name = $_FILES["image"]["name"]; 
$file_size = $_FILES["image"]["size"]; 
$file_type = $_FILES["image"]["type"]; 
if (in_array (strtolower ($file_type), $image_types)) { 
    $sql = "INSERT INTO image_table " 
    . "(image_type, image, image_size, image_name, image_date) "; 
    sql.= "VALUES ("; 

    $sql.= "'{$file_type}', '{$image}', '{$file_size}', " 
    . "'{$file_name}', NOW())"; 
    @mysql_query ($sql, $conn); 

exit(); 
    } 
} 
} 


$id = mysql_insert_id($conn); 

mysql_close($conn); 

header("Location: photo_preview.php?id=$id"); 

PHOTO_PREVIEW.PHP는

MY_LOGIN_INFO_AND_DATABASE_CONNECTION 

$result = mysql_query("SELECT * FROM image_table WHERE image_id= " 
. mysql_real_escape_string($_GET["id"]), $conn); 

if(!$result) die(mysql_error()); 

$row = mysql_fetch_assoc ($result); 


    if (mysql_num_rows($result) > 0) 
    { 
    $row = @mysql_fetch_assoc ($result); 
    $image_type = $row["image_type"]; 
    $image = $row["image"]; 
    Header ("Content-type: $image_type"); 
    print $image; 
    } 
?> 

답변

0

기본적으로, 당신의 가정 모든 일을 할 것입니다 -하지만 그것은 작동하지 않습니다. 정반대의 접근 방식을 택하고 모든 것이 실패 할 것이라고 가정합니다. 작성한 후에는 다음 프로젝트에 복사하여 붙여 넣으십시오. 그런 다음 예기치 않은 일이 발생하면 정확히 무엇을 말할 수있는 코드가 있습니다.

몇 가지 문제 :

  1. 는 올바르게 데이터베이스에 항목을 '탈출'하지 않습니다. "add_slashes"로 작동하게 만들 수도 있지만, 모든 스팅 입력을 안전하게하는 데 mysql_real_escape_string()을 사용해야합니다. 더 나은 방법은 PDO 또는 mysqli_() 함수를 사용하여 준비된 문을 사용하여 mysql_() 함수를 감가 상각하는 것입니다. 준비된 문장을 사용하면 자동으로 문자열을 이스케이프하여 안전하게 만듭니다.

  2. SQL 인세 트 ('@mysql_query()'의 모든 오류를 숨기고 작동 여부를 확인하지 않습니다. 너 wan if (!mysql_query()) {' then show errors (use 'mysql_error()). 이것은 아마도 당신이 잘못 가고있는 곳일 것입니다 - 입력이 실패하고 당신이 왜 체크하지 않고 있습니다.

  3. 'fread'및 'fopen'등의 작업도 확인하지 마십시오. 오류가있을 수 있습니다. 'file_get_contents()'를 사용하고 반환 값을 확인하십시오. false를 반환하면 오류가 발생합니다. 이유를 설명하는 오류를 표시합니다.

  4. 실제로 파일이 올바르게 업로드되었는지 확인하지 않습니다. 0보다 큰 값을 $ _FILES [ "image"] [ "error"] 확인하십시오.

  5. SELECT을 사용하면 행을 찾은 것으로 가정합니다. 그렇지 않은 경우 (예 : 누군가가 당신에게 사기성 ID를 제공함) $ 행이 거짓이되며 다른 오류가 발생합니다. $ row가 배열인지 확인하고 계속하기 전에 false가 아닌지 확인하십시오.

  6. 이미지 유형이 일치하지 않으면 오류 메시지가 표시되지 않습니다 (in_array). 당신은 쟁기질하고, 존재하지 않는 ID를 사용하고, 실패한 페이지로 리디렉션합니다 (포인트 5 참조).

  7. 실제로 리디렉션 전에 "exit"가 있습니다. 그게 기대 되니? 당신은 기본적으로 내가 작업이있는 경우, 유효한 파일, 중지 "라고,하지만 난 유효한 파일이없는 경우, ... 존재하지 않는 파일에

그래서 재 - 해결하기 위해 많은 오류를 숨기지 말고 오류가있을 때 피드백을 보내십시오.