Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] skomplikowany formularz
Forum PHP.pl > Forum > Przedszkole
nick
Witam


Mam dosc skomplikowany formularz z uploadem plikow. Nie wiem za bardzo jak rozwiazac problem wlasnie powiazania
uploadu z formularzem

Formularz to ogloszenie do ktorego dodaje obrazki. Wiec mam dwa osobne fomularze jeden to pliki a drugi to form. zgloszeniowy.

chodzi o to zeby po wyslaniu fomularza dodac tez nazwy zaladowanych plikow do bazy (i jeszce nazewnictow katalogow najlepiej po id ogloszenia) a skad wziasc ID? chyba ze zrobic sesje ktora bedzie przechowywala?

a moze najpierw wsylac formularz a potem umozliwic edycje i wgranie plikow wtedy nie bybloby problemu.


ktos zna lepsze rozwiazanie?

dzieki
JoShiMa
A nie możesz tego zrobić w jednym formularzu?

Wystarczy obsłużyć pola:
  1. <input type="file" name="foto[0]" />
  2. <input type="file" name="foto[1]" />
  3. <input type="file" name="foto[2]" />


Za pomocą funkcji is_uploaded_file i tablicy superglobalnej $_FILES

Poza tymi polami możesz mieć inne pola formularza, wszystko w jednym.

A jak nie chcesz w jednym to możesz najpierw dodać fotografie i je obsłużyć a dane masz w tablicy $_FILES.
calebos
formularze znaczy <FORM> czy dwa osobne skrypty php ?
jesli <form> forme scal w jedna i funkcjami php ktore zajmuja sie uploadem dostaniesz dane o pliku i gdzie go zapisales potem tylko INSERT danezformy,daneopliku.
Jak dwa skrypty krok po kroku forma to musisz przekazac wszystkie zmienne pomiedzy skryptami i na koniec ostatniej dac INSERT ze wszystkimi danymi. Jedyne co moznaby uproscic to przy pierwszej formie dodac juz je do bazy nastepnie zapytac o ID tego samego wpisu i przekazac go do nastepnego php. Ale to tez w sumie bez sensu bo dochodzi kolejne zapytanie do bazy tylko po to zeby drugi php wiedzial gdzie ma dopisac dane o pliku.


Z czego wydaje mi sie ze jedna forma w zupelnosci wystarczy..
Gość
W zasadzie panowie to macie racje nie wiem czemu rozbilem to na 2 formularze lepiej bedzie wladowac to w jeden bo przekaywanie tablicy na 2 strone tylko skomplikuje sprawe

Dzieki
Gość
Jeszcze jedno pytanie

Jak najlepiej roiziwazac sprawe nazewnictwa plikow oraz plikow w bazie.

W tej chwili do bazy dodaje oryginalne nazwy plikow czyli np. obrazek.jpg i tak samonazywa sie plik zaladowany na serwer w katalogu offers. Wszytskie pliki ladowane sa do glownego katalogu.

A co jesli jakis user zechce zaldowac ten sam plik? zostanie on zastapiony.

Nie wiem za bardzo jak to ugryzc smile.gif
JoShiMa
Ja w takich sytuacjach nie używam oryginalnych nazw, żeby ustrzec się przez ich zduplikowaniem. Wrzucam plik do bazy. W tabeli przetrzymuje ID (autoinkrementacja więc unikalny), typ pliku (jpg, gif itd czyli oryginalne rozszerzenie) i inne dane jeśli są potrzebne. Po wrzuceniu do bazy kopiuję plik na serwer pod zmienioną nazwą, która składa się z pół ID i rozszerzenie czyli ID.rozszerzenie. Nie wiem, czy to jest genialne ale na pewno chroni mnie przez zduplikowaniem nazwy.

Aha i nie jestem panem smile.gif
wojckr
Tak, tylko jest jeszcze kwestia walidacji forma. Jeśli część tekstowa forma jest walidowana, i np. po pierwszym wysłaniu forma stwierdzi się błędy, to pojawia się znowu formularz i wtedy jeśli były wysłane pliki, powinna się pojawić odpowiednia informacja, że pliki są załadowane, ale jeszcze niektóre pola są do poprawienia. Wtedy takie pliki trzeba zapisać jako tymczasowe. Można wykorzystać sesje do przechowywania info o załadowanych tymczasowych plikach.

Cytat(Gość @ 1.08.2008, 13:27:01 ) *
A co jesli jakis user zechce zaldowac ten sam plik? zostanie on zastapiony.

Nie wiem za bardzo jak to ugryzc smile.gif


Gdy user ładuje plik, sprawdzasz czy jest jakiś o tej nazwie. Jeśli jest to możesz dodać na końcu nazwy pliku "_1", przy kolejnym "_2".
Drugie rozwiązanie to nie zwracasz w ogóle uwagi na nazwy userów i nadajesz swoje unikalne, np. z pola auto increment z tabelki z bazy danych.

Aha i jeszcze, jeśli pozycjonujesz stronę, to dobrze, gdy w nazwie pliku jest jakieś słowo kluczowe.
Gość
chyba faktycznie bede ladowal nazwy do osobnej tabeli i nadawal nazwy z ID a co do walidacji to uzywam javascriptu. Walidacja po stronie klienta jest o wiele wygodniejsza.

Czasem dobrze jest zapytac jakie kto metody stosuje, aby pracowac wydajniej smile.gif

Pozdrawiam i dziekuje
wojckr
JavaScript można wyłączyć i wtedy dojdzie formularz nie sprawdzony w ogóle. Warto walidować po stronie serwera, bo masz to pod kontrolą, to co się dzieje u klienta to niewiadoma.
calebos
php sam tworzy jakies pseudo random nazwy TMP plikow.
Sprawdz na jakiej zasadzie on generuje te pliki jesli jest mozliwosc powtorki to zrob jakies random 3 znaki z timestampa i dopisz do tej tymczasowej nazwy pliku.

Pomysl o rozdzieleniu pojecia nazwa 'fizyczna' a nazwa uzytkownika na dwie osobne wartosci w tablicy plikow to moze sie kiedys przydac.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.