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
nekomata
post
Post #2





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Mhmm napisałeś [qoute] wpisów w Tabeli 4 z obecnie zaznaczonymi checkboxami, [/qoute] i [qoute]4. Tabela "wybrane_produkty" - przechowuje ID uzytkownika, oraz ID Produktu[/qoute] myślę że miałeś namyśli porównanie wpisów z tabeli 3 (grupa_produktow) z 4 (wybrane_produkty) chyba możesz to zrobić mysql
  1. <?php
  2. $query = "SELECT * ".
  3. "FROM grupa_produktow LEFT JOIN wybrane_produkty ".
  4. "ON grupa_produktow.id = wybrane_produkty.id_produktu WHERE wybrane_produkty.id_uzytkownika ='".$_SESSION['user']['id']."' OR wybrane_produkty.id_uzytkownika=null";
  5. $result = mysqli_query($dbc,$query)
  6. echo '<pre>';
  7. while($row = mysql_fetch_array($result)){
  8. print_r($row);
  9. }
  10. echo '</pre>';
  11. ?>

coś takiego może ci pomoże , bazowałem na przykładzie z tizag (pisałem z palca i na oko więc prawdopodobnie nie działa (IMG:style_emoticons/default/haha.gif) ) URL

// EDIT
Więc tak , z powodu iż moja własna niewiedza mnie trochę boli , użyłem mocy gugle i znalazłem odpowiedź (przetestowałem nawet) , wszystko przedstawie w poniższym kodzie na którym testowałem.
grupa_produktow
  1. SET FOREIGN_KEY_CHECKS=0;
  2. -- ----------------------------
  3. -- Table structure for `grupa_produktow`
  4. -- ----------------------------
  5. DROP TABLE IF EXISTS `grupa_produktow`;
  6. CREATE TABLE `grupa_produktow` (
  7. `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  8. `grupa` varchar(20) DEFAULT NULL,
  9. `produkt` varchar(20) DEFAULT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
  12.  
  13. -- ----------------------------
  14. -- Records of grupa_produktow
  15. -- ----------------------------
  16. INSERT INTO `grupa_produktow` VALUES ('1', 'ziemniory', 'bulwa');
  17. INSERT INTO `grupa_produktow` VALUES ('2', 'ziemniory', 'pestycyd');
  18. INSERT INTO `grupa_produktow` VALUES ('3', 'ziemniory', 'stonki');
  19. INSERT INTO `grupa_produktow` VALUES ('4', 'ogorki', 'zielone');
  20. INSERT INTO `grupa_produktow` VALUES ('5', 'ogorki', 'zolte');
  21. INSERT INTO `grupa_produktow` VALUES ('6', 'pyry', 'kartofel bury');

wybrane_produkty
  1. -- ----------------------------
  2. -- Table structure for `wybrane_produkty`
  3. -- ----------------------------
  4. DROP TABLE IF EXISTS `wybrane_produkty`;
  5. CREATE TABLE `wybrane_produkty` (
  6. `id_uzytkownika` tinyint(4) NOT NULL,
  7. `id_produktu` tinyint(4) NOT NULL
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  9.  
  10. -- ----------------------------
  11. -- Records of wybrane_produkty
  12. -- ----------------------------
  13. INSERT INTO `wybrane_produkty` VALUES ('7', '2');
  14. INSERT INTO `wybrane_produkty` VALUES ('7', '1');

plik *.php którym testowałem
  1. <?php
  2. define('DB_USER','neko');
  3. define('DB_PASS','tajnehaslo');
  4. define('DB_HOST','localhost');
  5. define('DB_NAME','warzywa');
  6. $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME,3306) or die('cannot connect to mysql');
  7. $_SESSION['user']['id'] = '7';
  8. $query = "SELECT * ".
  9. "FROM grupa_produktow LEFT JOIN wybrane_produkty ".
  10. "ON grupa_produktow.id = wybrane_produkty.id_produktu WHERE wybrane_produkty.id_uzytkownika ='".$_SESSION['user']['id']."' OR wybrane_produkty.id_uzytkownika IS null";
  11. $query = mysqli_query($dbc,$query) or die(mysqli_error($dbc));
  12. echo '<pre>';
  13. while($row = mysqli_fetch_array($query,MYSQLI_ASSOC)){
  14. print_r($row);
  15. }
  16. echo '</pre>';
  17. ?>

Wynik wyglada tak
Kod
Array
(
    [id] => 1
    [grupa] => ziemniory
    [produkt] => bulwa
    [id_uzytkownika] => 7
    [id_produktu] => 1
)
Array
(
    [id] => 2
    [grupa] => ziemniory
    [produkt] => pestycyd
    [id_uzytkownika] => 7
    [id_produktu] => 2
)
Array
(
    [id] => 3
    [grupa] => ziemniory
    [produkt] => stonki
    [id_uzytkownika] =>
    [id_produktu] =>
)
Array
(
    [id] => 4
    [grupa] => ogorki
    [produkt] => zielone
    [id_uzytkownika] =>
    [id_produktu] =>
)
Array
(
    [id] => 5
    [grupa] => ogorki
    [produkt] => zolte
    [id_uzytkownika] =>
    [id_produktu] =>
)
Array
(
    [id] => 6
    [grupa] => pyry
    [produkt] => kartofel bury
    [id_uzytkownika] =>
    [id_produktu] =>
)

Mam nadzieję że pomogłem , jak nie to nie narzekam przy okazji nauczyłem się czegoś nowego (IMG:style_emoticons/default/happy.gif)

Ten post edytował nekomata 28.03.2011, 16:15:14
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: 5.10.2025 - 11:02