Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Formularz - checkbox., Prawodłowa koncepcja wysyłania / pobierania danych.
Goldunube
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 18.03.2010

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


Witam.

Tworzę stronę internetową, którą zalogowany użytkownik będzie mógł spersonalizować według swoich upodobań.
By tego dokonać, będzie musiał uprzednio wypełnić formularz złożony z checkbox'ów.
Checkbox'y są podzielone następująco:

Warzywa
- Marchew
- Ogórek
- itd...

Owoce
- Jabłko
- Pomarańcz
- itd...

Napisałem skrypt, który dodaje do BD zaznaczone przez użytkownika checkbox'y. Zadbałem również o to by w przypadku ponownego wysłania tego formularza z tymi samymi zaznaczonymi pozycjami, były one w BD nadpisywane, a nie dopisywane.
Dodałem również skrypt pobierający z BD wybrane wcześniej pozycje i wyświetlający te rekordy jako zaznaczone checkbox'y (checked=checked).

Problem z którym nie wiem jak się prawidłowo uporać, pojawia się w momencie, gdy użytkownik chce odznaczyć wybrane / wybrany wcześniej checkbox.
Tu pojawia się moje pytanie.

Czy napisać skrypt, którzy przed każdym ponownym zapisem wybranych checbox'ów do BD usuwałby wszystkie poprzednie wpisy dla tego użytkownika, czy raczej napisać skrypt, który porównywałby ilość rekordów w BD z obecną ilością zaznaczonych checkbox'ów i porównując produkty po ID, usuwałby tylko te przy których nie zaznaczono checbox'a ?


A może w ogóle realizuje się to w zupełni inny sposób na który nie wpadłem? AJAX / JQUERY (IMG:style_emoticons/default/questionmark.gif)
Z góry dziękuję za wszelkie podpowiedzi.

Serdecznie pozdrawiam
Adam K.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Goldunube
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 18.03.2010

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


Niestety nie o to mi chodzi (IMG:style_emoticons/default/wink.gif)
Sorrki za to, że się naszukałeś niepotrzebnie rozwiązania.

Widzisz, mój formularz jest tworzony przy pomocy skryptu. Skrypt pobiera z bazy danych produkty zapisane w Tabeli nr. 2 "produkty", dzieli je na grupy według Tabeli nr. 3 "grupy_produktow" i w takiej podzielonej postaci wyświetla je w formie checkbox'ów. Z racji tego, że te checkbox'y są tworzone na podstawie rekordów zaciągniętych z bazy danych, nie ma żadnego problemu, żebym przy okazji zaciągał również ID produktu (np. w postaci input "hidden") który jest wyświetlany obok danego checkbox'a. Żeby jeszcze bardziej zobrazować tą sytuację podam przykład.
W tabeli "produkty" przechowuję m. in. rekord: "arbuz", któremu został przydzielony ID = 10. Przy pomocy skryptu pobieram wszystkie rekordy z tej tabeli i wyświetlam pogrupowane na stronie w postaci:

  1. <label><input type="checkbox" value=" <?php echo id_produkt(); // funkcja zwracająca ID produktu, w tym przypadku: 10 ?> " /> <?php echo nazwa_produktu(); //funkcja zwracająca nazwę produktu w tym przypadki: arbuz ?> </label>


Mam nadzieję, że jest to w miarę czytelne.
Teraz gdy mam ileś tam tak zbudowanych checkbox'ów, w momencie gdy wysyłam formularz, skrypt pobiera mi ID produktu wpisanego w checkbox, oraz z sesji pobiera ID użytkownika i taki rekord umieszcza w bazie danych w tabeli "wybrane_produkty". Z tym nie ma problemu.
Dodatkowo strona skonstruowana jest w ten sposób, że w momencie gdy użytkownik chce ponownie dokonać zmian w swoim profilu, to wyświetla mu się formularz z zaznaczonymi wcześniej przez niego produktami. W omawianym przypadku pojawi mu się zaznaczony checkbox "arbuz". To jest proste.
Problem pojawia się w momencie gdy ten użytkownik wchodząc ponownie na swój profil, chce odznaczyć tego durnego arbuza. Odznacza go i wysyła formularz przy pomocy submit'a "ZAPISZ".
I teraz jak mam to zrobić, żeby skrypt wychwycił to, że użytkownik odznaczył tego checkbox'a i na tej podstawie usunął ten i tylko ten konkretny wpis z Tabeli "wybrane_przedmioty" (IMG:style_emoticons/default/smile.gif)

Żeby to zrealizować wymyśliłem dwa sposoby. Mimo tego, iż każdy z tych sposobów jest w stanie zrealizować to czego oczekuję, to wydają mi się one mało "sensowne" / optymalne...

Pierwszy sposób polega na usuwaniu w pierwszym kroku wszystkich produktów przypisanych do danego użytkownika po czym w drugim kroku skrypt by dodawał aktualnie wybrane przy pomocy checkbox'ów produkty. Sposób ten jest bardzo prosty do wykonania, jednakże przy każdej nawet pojedynczej zmianie w profilu, usuwałby wszystkie rekordy przypisane do danego użytkownika i wpisywałby je na nowo nie uwzględniając jedynie tych odznaczonych.

Drugi sposób polega na tym, że pobierałbym wszystkie rekordy z tabeli "wybrane_przedmioty" przypisane do danego użytkownika po czym zapisywałbym je do tablicy. Dla każdego takiego rekordu sprawdzałbym, czy istnieje zaznaczony, odpowiadający mu checkbox. Jeżeli nie istnieje checkbox, którego "value" równa się którejś z wartości w Tablicy, to kasuj ten wpis.

Który sposób jest lepszy? A może w ogóle takie zadania realizuje się przy pomocy innych narzędzi ?

Ten post edytował Goldunube 28.03.2011, 17:02:28
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: 13.10.2025 - 15:33