Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] Jak najlepiej zapisać dane z wielu checkboxów?
wdev
post
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 20
Dołączył: 20.01.2010

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


Witam,

Robię w php i mysql bazę danych do zleceń produkcji. Elementem formularza jest pole 22 checkboxów (opcje dodatkowe), które muszę później zapisać i odczytać z bazy danych. Opcje te mogą się zmieniać, dlatego dobrze by było, gdyby dało się je łatwo edytować.

Stworzyłem tabelę `opcje` (id, nazwa) i do formularza pobieram z niej wszystkie. Przy zapisywaniu do tabeli `zlecenia` przez funkcję implode() wrzucam je jako jeden łańcuch do komórki opcje_dodatkowe. Później, zależnie od potrzeb muszę zrobić explode() i porównać z odpowiednimi id w tabeli `opcje`. Boję się jednak, że takie rozwiązanie okaże się na dłuższą metę bardzo zasobożerne - już teraz łańcuch numerków z 22 checkboxów może mieć ponad 50 znaków. Czy ktoś ma pomysł jak to lepiej ugryźć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
neverever
post
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


Ges, no też ciekawe rozwiązanie.

Szczerze, to wszystko zależy od konkretnej sytuacji. Relacja 1:1 nie zawsze jest najlepsza.
No i też zawsze to nowa tabela z minimum 2 kolumnami id i opcja, no i tez tyle tych rekordów ile w najlepszym wypadku zaznaczonych tylko checków, w najgorszym tyle ile wszystkich checków ...jeszcze pomnożyć przez ilość userów i mamy już dosyć pokaźne wielkości.

Podane przeze mnie rozwiązanie nie jest idealne, ale też nie jest jakieś skomplikowane.

Opiera się na jednej kolumnie o długości n znaków, każdy odpowiada kolejnemu checkowi i przyjmuje wartość 1 lub 0 - coś na wzór maski bitowej.
Nie trzeba nic explodować, łatwo też tym operować na poziomie zapytania stosując wzorzec lub odwołując się do konkretnego znaku lub znaków (stanu checkboxa) za pomocą SUBSTRING.

Tak czy owak, akurat w kilku sytuacjach wygodniej mi było przeznaczyć na usera 1 pole o długości 100bajtów,
niż w nowej tabeli 100 rekordów po minimum 5 bajtów każdy (4 na id usera i 1 id checkboxa)

-wprawdzie oszczędniej było by operować na pojedyńczych bitach, nie zaś na całych bajtach.

W sumie metoda trochę zbliżona do tej jaką zapodał Ges. (IMG:style_emoticons/default/dry.gif)






Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 15:27