Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Upload plików - jakie metody?
qrooel
post
Post #1





Grupa: Zarejestrowani
Postów: 306
Pomógł: 42
Dołączył: 25.03.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cześć,

W jaki sposób rozwiązujecie problem uploadu plików dla nieistniejącego rekordu?

Chcemy dodać klienta, klient ten oczywiście nie ma jeszcze żadnego ID w bazie, dodajemy do niego pliki - wszystko jest ok o ile mamy walidację w js.

Co w sytuacji kiedy dodajemy pliki do nowego klienta, a one są ładowane ajaksem do odpowiedniej tabelki, po to aby można było zobaczyć jakie pliki już dodaliśmy i ewentualnie je usunąć. Po dodaniu klienta, jego id trafia do plików.

Można też w sumie zrobić od razu save 'pustego' rekordu żeby mieć ID.

Jak rozwiązujecie takie problemy? Mam nadzieję, że jasno się wyraziłem. ;]

Ten post edytował qrooel 20.10.2011, 23:20:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Orzeszekk
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


No własnie mało jasno jak dla mnie.

Rozumiem ze kazdy wrzucony plik ma swój wiersz w bazie danych opisujacy go (jego ID trafia do plików).


Skoro jestes w stanie wyswietlic sposod ogółu plików TE pliki które wrzucił akurat TEN user, to jestes w stanie rowniez po dodaniu klienta sprawdzic jakie dodal pliki i zapisac ID klienta do tych plików.

Jesli wrzucanie plików jest powiązane z tworzeniem nowego klienta tj klient moze sobie cos tam nawrzucac ale i tak na koniec zostanie mu utworzone konto, to zamień kolejnosc po prostu - utwórz mu konto, weź ID i dopiero działaj.

mam wrazenie ze do tego ajaxa korzystasz z jakiegos gotowego komponentu co do ktorego nikt do konca nie wie jak dziala (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




@qrooel
Zapisując informacje o uploadowanych plikach do bazy, masz ich id (lub dowolny inny unikatowy identyfikator). Po uploadzie pliku przesyłasz ten id w odpowiedzi (z ajaxa), a następnie przy pomocy js zapisujesz go do pola typu hidden lub do ciastka (zależy od założeń serwisu). Po zapisaniu klienta uzyskasz jego id, które łączysz z zapisanymi wcześniej identyfikatorami plików.
Go to the top of the page
+Quote Post
qrooel
post
Post #4





Grupa: Zarejestrowani
Postów: 306
Pomógł: 42
Dołączył: 25.03.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


OK, nie do końca mnie rozumiecie. Przede wszystkim nie mam tutaj problemu - chodzi mi tylko o poznanie różnych technik.

Sytuacja w takim razie jest taka: tworzę nowego klienta, wypełniam jakieś pola, dodaję pliki (które od razu widzę - każdy plik ma swoje unikatowe ID), jednak się rozmyśliłem i nie chcę już dodawać klienta - więc wychodzę, za chwilę jednak chcę dodać klienta i te pliki które wcześniej wrzuciłem są widoczne - dlaczego? Bo wyciągnąłem je za pomocą: where image_client_id = 0.

Co z tym możemy zrobić - możemy przy wywołaniu akcji 'add_client' usunąć wszystkie zdjęcia gdzie image_client_id = 0. Tylko wtedy jeżeli na jednym koncie będą pracowały dwie osoby, to jedna drugiej zdjęcia będzie usuwać.

Czyli chyba jednym z bardziej eleganckich sposobów będzie dodanie plików do użytkownika konkretnego (user). Zakładając że jedna osoba korzysta z jednego konta.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Robisz tak jak pisał batman.
A jeśli w międzyczasię się rozmyśliłeś i przestałeś dodawać klienta to jaki problem? Żaden - w bazie zostają ci pliki, które nie sią do nikogo przypisane. I co? I nic. Ca jakiś czas zapuszczasz cronem zadanie, które czyście pliki, które nie są do nikogo przypisane i leżą już w bazie od x godzin.

Tworząc nowe klienta pod żadnym pozorem nie wyświetlasz mu zdjęc na zasadzie jak pisałeś: where image_client_id = 0 . To bez sensu. Batman podał dobre rozwiązanie
Go to the top of the page
+Quote Post
batman
post
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jeszcze dodam tylko, że wstawiając do bazy info o zdjęciu nie zapisujesz do kolumny właściciela wartości 0 (zero), tylko null. W ten sposób wiesz, że zdjęcie nie jest do nikogo przypisane.
Wspomniane przeze mnie sposoby przechowywania informacji o id zdjęć mają zastosowanie:

Ukryte pole:
- jednostronicowy formularz
- brak konieczności pamiętania wgranych plików w przypadku awarii/odświeżenia strony

Ciasteczka:
- możliwość zapisania formularza "na później"
- możliwość odczytania informacji i id wgranych plików w dowolnym miejscu aplikacji, bez konieczności pukania do bazy, np. w sytuacji "ostatnio dodałeś 3 pliki"
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
że wstawiając do bazy info o zdjęciu nie zapisujesz do kolumny właściciela wartości 0 (zero), tylko null.
Bez przesady. Przeciez nie masz użytkowników o ID 0. Jak masz 0 to wiesz, że to jest niczyje.

Problem z 0 pojawia się dopiero wtedy gdy robisz relacje. Wówczas próba wstawienia 0 da ci błąd, bo nie ma takiego usera i relacji nie da się utworzyć. Wówczas NULL jest jedynym rozwiązaniem
Go to the top of the page
+Quote Post
batman
post
Post #8





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat(nospor @ 21.10.2011, 09:58:26 ) *
Problem z 0 pojawia się dopiero wtedy gdy robisz relacje. Wówczas próba wstawienia 0 da ci błąd, bo nie ma takiego usera i relacji nie da się utworzyć. Wówczas NULL jest jedynym rozwiązaniem

I o to właśnie mi chodziło.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
W ten sposób wiesz, że zdjęcie nie jest do nikogo przypisane.
To zdanie nie koniecznie na to wskazywało, więc wolałem sprecyzować (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 22:12