Nie mogę dodawać zdjęć do bazy Oracle za pomocą formularza

0

Witam, mam za zadanie stworzyć prosty interfejs w PHP, który dodaje zdjęcia do bazy danych Oracle. Postępowałem zgodnie z instrukcją znajdującą się tutaj: http://programowanie.opole.pl/archives/1524#, ale niestety pliki nie chcą się dodawać do bazy za pomocą formularza w html. Po wyborze pliku i użyciu przycisku "Update" w miejscu gdzie znajduje się ścieżka do zdjęcia z powrotem pojawia się napis "Nie wybrano pliku" i zdjęcie nie zostaje dodane do bazy. Formularz i stroną dodającą zdjęcia uruchamiam za pomocą localhosta. Korzystam z konta w sqldeveloper, oraz z pakietu WebServ. Wielkość zdjęcia, które przykładowo dodaję to 26.9 kB. Bardzo proszę o pomoc w rozwiązaniu problemu.

0

W oraclu musisz utworzyć obiekt katalogu.

CREATE DIRECTORY NAZWA_OBIEKTU_FOLDER AS "C:\sciezka_do_folderu";

I w miejscach gdzie ma być scieżka do pliku wklepać NAZWA_OBIEKTU_FOLDER.

0

Czy ścieżka_do_folderu dotyczy folderu w którym znajduje się formularz do dodawania zdjęć? Czy mógłbym prosić o szczegółowe wyjaśnienie na jakimś przykładzie?

0

Folder dotyczy katalogu ze zdjęciem.
Ten obiekt musi być stworzony po stronie Oracle i tylko tam wykorzystywany.
http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5007.htm

0

Czyli np. jeśli zdjęcia mają być dodawane z folderu "Zdjecia" znajdującego się bezpośrednio na dysku E to polecenie będzie wyglądało tak:
CREATE DIRECTORY Zdjecia AS "E:" ?

0

@Crash89 że co?? Z tego co rozumiem, chodzi o wrzucenie zdjęcia do bloba w bazie, nie o zapisywanie bezpośrednio na dysku; a nawet gdyby o to chodziło, to trzeba by to zrobić z poziomu php, nie przez bazę, więc co tu ma do rzeczy oraclowe directory?
Błąd jest po stronie samego html-a, gdybyś mógł zarzucić kodem, może da się pomóc.

0

A to mi sie pomieszało bo DIRECTORY jest potrzebne do BFILE a nie do BLOBA,
chociaz w tym wypadku, skoro kolega robi to na localhoscie BFILE też powinno zadziałać.

A do rzeczy ma Oraclowe Directory to, że bez stworzonego obiektu folderu BFILE nie zadziała.

Skojarzyłem to bo miałem kiedyś podobny problem i odrzucał mi podobny komunikat, z tymże ja wpisywałem wtedy bezpośrednio ściezke do folderu i problemem był właśnie brak odpowiedniego obiektu folderu, który trzeba wstawiać w miejsce ścieżki.

0

Podaję wszystkie kody, plików jakie używałem:

  1. Dodawanie tabeli do bazy danych:
 CREATE TABLE zdjecia (
        id NUMBER PRIMARY KEY,
        zdjecie BLOB
)
  1. Formularz html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<meta http-equiv="content-type" content="text/html; charset=windows-1250" />
	<meta name="author" content="speedos1254" />

	<title>Dodawanie zdjęcia do bazy danych</title>
</head>

<body>
<body bgcolor="99FF99">
<center><font size="6"><font color="3300CC"><b><i>Przesyłanie zdjęcia do bazy danych</center></font></font></b></i>
<br />
<br />
<font size="4"><font color="3300CC"><b>Wybierz zdjęcie do dodania</font></font></b>
<br />
<br />
<form method="post" enctype="multipart/form-data" accept="image/png,image/jpeg,image/gif">
<font color="3300CC">Zdjęcie:</font> <input name="userfile" type="file" >
	<input name="upload" type="submit" value="Wyślij zdjęcie do bazy danych">
</form>

</body>
</html>
  1. Plik PHP dodający zdjęcie do bazy danych
 <?php
$con = OCILogon("user","password");
	if (!$con) { 
		echo "ERROR: OCILogon"; 
		exit; 
	}
	echo "OK: OCILogon <br>";
	
	
	$lob = oci_new_descriptor($con, OCI_D_LOB);
	
	$sql = "INSERT INTO zdjecia (id, zdjecie) VALUES(1, EMPTY_BLOB()) RETURNING zdjecie INTO :BLOBDATA";
$stid = OCIParse($con, $sql);
oci_bind_by_name($stid, ":BLOBDATA", $lob, -1, OCI_B_BLOB);

$res = OCIExecute($stid, OCI_NO_AUTO_COMMIT);
	if (!$res) { 
		echo "ERROR: OCIExecute"; 
		exit; 
	}
	echo "OK: OCIExecute <br>";
	
	$save = $lob->savefile($_FILES['userfile']['tmp_name']);
	if (!$save) { 
		echo "ERROR: savefile"; 
		exit; 
	}
	echo "OK: OCIExecute <br>";

oci_commit($con);
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1