2013-05-13 2 views
0

PHP 웹 서비스에 일부 데이터를 전송하는 모바일 애플리케이션이 있습니다. 데이터는 일부 텍스트 항목과 base64로 인코딩 된 문자열 (이미지로 디코딩 됨)로 구성됩니다.이미지 파일 경로를 PostgreSQL 데이터베이스에 삽입하십시오.

일부 데이터 열에 텍스트 데이터를 저장 한 다음 업로드 된 이미지의 파일 경로가 포함 된 최종 텍스트 열을 저장하려고합니다. 나는 usersImages/이라는 디렉토리를 가지고 있는데, 사용자가받은 모든 이미지를 저장하고 싶습니다. 그러나 데이터를 업로드 할 때 PHP 스크립트는 현재 데이터베이스에 아무 것도 삽입하지 않습니다.

PHP 파일 : 나는 모든 데이터가 이미지 I에 대한 경로를 포함하는 마지막 열 imagepath 텍스트로 저장할

을 : 내가 원하는 무엇

$conn = pg_connect("database_credentials"); 
/* GET DATA */ 
$name = $_POST['name']; 
$s_name = pg_escape_string($name); 
$description = $_POST['desc']; 
$s_desc = pg_escape_string($description); 
$latitude = $_POST['lat']; 
$longitude = $_POST['lng']; 
$project = $_POST['project']; 

$encoded_photo = $_POST['snap']; 
echo $encoded_photo; 
$photo = base64_decode($encoded_photo); 
header('Content-Type: bitmap; charset=utf-8'); 
$file = fopen('usersImages/test.jpg', 'wb'); 
fwrite($file, $photo); 
fclose($file); 

$res = pg_query("INSERT INTO records (name, description, latitude, longitude, project, imagepath) VALUES ('$s_name', '$s_desc', '$latitude', '$longitude', '$project', '$file')"); 

방금 업로드했지만, 지금은 성공하지 못했습니다. 어떤 아이디어?

+2

이름 충돌의 위험이 있으므로, I는 파일명과 인간 주어진 이름 대신 [-OSSP UUID]를 사용하여 고유의 식별자 (http://www.postgresql.org를 사용하지 않을 /docs/current/interactive/uuid-ossp.html) 모듈을 참조하십시오. –

+0

@ClodoaldoNeto 귀하의 조언에 감사드립니다. 현재 순전히 코드를 테스트 중이므로 사용자는 모바일 애플리케이션에 자신의 파일 이름을 입력하고 고유 한 ID가 할당됩니다. – WebDevDanno

답변

1

나는 당신이 달리고있는 문제가 fopen('usersImages/test.jpg', 'wb'); 인 $ file 변수를 저장하고있는 "imagepath"컬럼에 있다고 믿는다. 함수 호출을 열 셀에 저장할 수는 없지만 필요에 따라 데이터 유형을 저장해야합니다 (varchar가 잘 작동해야하는 경로 문자열을 저장하려는 것이므로).

난 그냥 예를 들어 경로에 저장하면됩니다 싶습니다 가정 무엇 :

$filePath = "usersImages/test.jpg"; 
$res = pg_query("INSERT INTO records (name, description, latitude, longitude, project, imagepath) VALUES ('$s_name', '$s_desc', '$latitude', '$longitude', '$project', '$filePath')"); 

(제대로 데이터베이스에 연결되어있는 한이 방법은 작동합니다)

을 난 마이트 더 나아가 공간을 절약하고 항상 동일한 변수를 하드 코드하기 위해 변수 이름 만 저장하는 것이 좋습니다 .... 예를 들어 폴더가 항상 같고 이미지 유형이 항상 jpg이면 $filePath = "test";을 저장하고 데이터베이스 쿼리뿐만 아니라 하드 코딩 된 변수로 코드로드.

실제로 웹 사이트에 이미지를 업로드하는 다른 질문에 대해서는 관련 코드를 제공하지 않았기 때문에 정확한 답변을 말하기 어렵습니다. 부적절한 업로드 기술로 인해 잘못된 파일이 표시되는 것 같습니다. fopen, fwrite, fclose 메서드 대신에 이런 식으로 시도해야합니다.

<input type="file" name="file" id="file"> // In your form (seperate from PHP) 
$filePath = "userImages/test.jpg"; //setting file path 
$success = move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $filePath); //actually storing the file into your file-system into the selected path 
+0

감사하지만 여전히 효과가 없습니다. '$ filepath' 변수에 업로드되고 디코딩 된 이미지를 쓰는 코드 편집을 제공 할 수 있습니까? – WebDevDanno

+0

@DanielD filePath 변수가 데이터베이스에 제대로 저장되어 있습니까? 또한 파일을 웹 사이트 파일 시스템에 저장할 수 없다는 것을 말하고 있습니까? –

+0

filePath 변수가 내 데이터베이스에 쓰여지지 않습니다. 'test.jpg '이미지는 선택한 디렉토리에 나타나지만 크기는 0kb이고'PostGreSQL' 데이터베이스는 비어 있습니다. – WebDevDanno

관련 문제