qrooel
20.10.2011, 22:52:56
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. ;]
Orzeszekk
21.10.2011, 01:10:07
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
batman
21.10.2011, 07:07:35
@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.
qrooel
21.10.2011, 08:07:02
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.
nospor
21.10.2011, 08:42:55
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
batman
21.10.2011, 08:50:47
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"
nospor
21.10.2011, 08:58:26
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
batman
21.10.2011, 09:06:04
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.
nospor
21.10.2011, 09:07:25
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ć
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.