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

Odpowiedz Nowy wątek
ps91
2014-05-16 15:51
ps91
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.

Pozostało 580 znaków

2014-05-16 17:38

Rejestracja: 6 lat temu

Ostatnio: 2 lata temu

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.

edytowany 2x, ostatnio: Crash89, 2014-05-16 18:05

Pozostało 580 znaków

ps91
2014-05-16 19:30
ps91
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?

Pozostało 580 znaków

2014-05-16 20:33

Rejestracja: 6 lat temu

Ostatnio: 2 lata temu

0

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

edytowany 1x, ostatnio: Crash89, 2014-05-16 20:35

Pozostało 580 znaków

ps91
2014-05-17 13:38
ps91
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:\" ?

Pozostało 580 znaków

2014-05-17 13:53

Rejestracja: 13 lat temu

Ostatnio: 13 godzin temu

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.

Pozostało 580 znaków

2014-05-17 14:24

Rejestracja: 6 lat temu

Ostatnio: 2 lata temu

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.

Pozostało 580 znaków

ps91
2014-05-17 15:52
ps91
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
    )
  2. 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">Przesyłanie zdjęcia do bazy danych</center></font></font>

<font size="4"><font color="3300CC">Wybierz zdjęcie do dodania</font></font>

<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> ``` 3. Plik PHP dodający zdjęcie do bazy danych ```php <?php $con = OCILogon("user","password"); if (!$con) { echo "ERROR: OCILogon"; exit; } echo "OK: OCILogon
"; $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
"; $save = $lob->savefile($_FILES['userfile']['tmp_name']); if (!$save) { echo "ERROR: savefile"; exit; } echo "OK: OCIExecute
"; oci_commit($con); ?> ```

Pozostało 580 znaków

Odpowiedz

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