Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql]Problem z checkbox
jacus24
post 28.01.2008, 21:44:15
Post #1





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 15.12.2007

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


  1. <?php
  2. $hobby = $_POST['hobby'];
  3.  
  4. $query_update = "UPDATE user SET hobby='" .$hobby. "'
  5. WHERE login = '" . $_SESSION['user_logged'] . "' AND haslo = '" . $_SESSION['user_password'] . "'";
  6.  
  7. <form action = "update_account.php" method="post">
  8.  
  9. <input type="checkbox" name="hobby" value="muzyka"> Muzyka
  10. <input type="checkbox" name="hobby" value="Film" > Film
  11. <input type="checkbox" name="hobby" value="Sport" > Sport
  12. <input type="submit" name="submit" value="Uaktualnij"> &nbsp;
  13. <input type="button" value="Anuluj" onclick="history.go(-1);"> </form>
  14. ?>
Go to the top of the page
+Quote Post
Grzyw
post 28.01.2008, 21:45:22
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Jacuś, spoko, tylko co się dzieje? smile.gif W czym tkwi problem?


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
jacus24
post 28.01.2008, 21:47:01
Post #3





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 15.12.2007

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


Przepraszam zapomnialem.
W aktualizacji profilu mam opcje wyboru zainteresowania.
Jednak jeśli zaznaczy się kilka opcji to i tak zostaje dodana do bazy jedna a nie np.3 Co zrobić by dodawało tyle ile zostało zaznaczonych?
Go to the top of the page
+Quote Post
Grzyw
post 28.01.2008, 22:26:19
Post #4





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Generalnie konstrukcja tabeli Ci na to nie pozwala.
Do każdego usera możesz wstawić jedną wartość hobby. Tylko jedną.
Rozwiązania masz 2:

1) Decydujesz się na tylko jedno hobby. Wówczas zamiast checkboxów dajesz radioboxy.

2) Robisz do hobby dodatkową tabelę: | user_id | hobby| - w takiej tabeli możesz w 3 różnych rekordach mieć różne hobby przypisane do jednego usera.


A co do korzystania ze zmiennych. Zamiast:
  1. <input type="checkbox" name="hobby" value="muzyka"> Muzyka
  2. <input type="checkbox" name="hobby" value="Film" > Film
  3. <input type="checkbox" name="hobby" value="Sport" > Sport


zrób:
  1. <input type="checkbox" name="hobby[]" value="muzyka"> Muzyka
  2. <input type="checkbox" name="hobby[]" value="Film" > Film
  3. <input type="checkbox" name="hobby[]" value="Sport" > Sport


a na początku pliku wywal:
  1. <?php
  2. print_r($_POST['hobby']);
  3. ?>


Zobaczysz, w jaki sposób wartości z checkboxów są przesyłane.


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
jacus24
post 2.02.2008, 21:37:25
Post #5





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 15.12.2007

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


Ok dziękuje.Popracuje nad tym i wrazie czego zapytam ponownie:)

Wracam bo nie mogę sobie z tym poradzić
Mam
  1. <?php
  2. <input type="checkbox" name="hobby[]" value="muzyka"> Muzyka
  3. <input type="checkbox" name="hobby[]" value="Film" > Film
  4. <input type="checkbox" name="hobby[]" value="Sport" > Sport
  5. ?>

Po daniu tego na poczatek
  1. <?php
  2. print_r($_POST['hobby']);
  3. ?>

mam
  1. <?php
  2. Array ( [0] => Muzyka[1] => Film [2] => Sport)
  3. ?>

Do bazy dodaje jedno tylko nawet jeśli są zaznaczone 3.Jak zmienić zapytanie do bazy żeby dodawało wszystkie 3.Naprawde trzeba tworzyć nową tabele?Jeśli tak to jakie przypisać nazwy polom?Proszę o pomoc
Go to the top of the page
+Quote Post
misiek08
post 2.02.2008, 21:46:31
Post #6





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


Można przecież korzystać z explode a w polu wpisywać kilka zainteresowań po spacji albo przecinku w formie 2,6,8 i wtedy dać $zainteresowania = explode(',',$row[zainteresowania])
Go to the top of the page
+Quote Post
nowotny
post 2.02.2008, 21:53:39
Post #7





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(misiek08 @ 2.02.2008, 21:46:31 ) *
Można przecież korzystać z explode a w polu wpisywać kilka zainteresowań po spacji albo przecinku w formie 2,6,8 i wtedy dać $zainteresowania = explode(',',$row[zainteresowania])

Noo... tylko spróbuj potem to sortować czy porównywać... nie będzie przyjemnie... smile.gif
Go to the top of the page
+Quote Post
misiek08
post 2.02.2008, 21:57:21
Post #8





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


No tak. Nie pomyślałem
Go to the top of the page
+Quote Post
jacus24
post 2.02.2008, 22:03:05
Post #9





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 15.12.2007

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


Można to jakoś inaczej zrobić?
Go to the top of the page
+Quote Post
nowotny
post 2.02.2008, 22:26:57
Post #10





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(jacus24 @ 2.02.2008, 21:37:25 ) *
3.Jak zmienić zapytanie do bazy żeby dodawało wszystkie

No ale jak chcesz do jednego pola dodać różne wartości...?

Cytat(jacus24 @ 2.02.2008, 21:37:25 ) *
3.Naprawde trzeba tworzyć nową tabele?Jeśli tak to jakie przypisać nazwy polom?

Ja bym to tak zrobił... Grzyw napisał ci co i jak...
Go to the top of the page
+Quote Post
jacus24
post 2.02.2008, 22:58:39
Post #11





Grupa: Zarejestrowani
Postów: 133
Pomógł: 0
Dołączył: 15.12.2007

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


Cytat
Ja bym to tak zrobił... Grzyw napisał ci co i jak...

Ale napisałem że mam z tym problem.sad.gif

Już zrobiłem. Dzięki za pomoc.
Go to the top of the page
+Quote Post
nowotny
post 2.02.2008, 23:27:55
Post #12





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(jacus24 @ 2.02.2008, 22:30:55 ) *
Ale napisałem że mam z tym problem.sad.gif

Ale z czym dokładnie...? tabelę chyba sobie potrafisz dodać...?
Ja bym osobiście dodał jeszcze tabelę z danymi o poszczególnych hobby:
  1. CREATE TABLE `hobby_conf` (
  2. `id` TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `nazwa` TINYTEXT NOT NULL
  4. );
  5.  
  6. INSERT INTO `hobby_conf` ( `id` , `nazwa` ) VALUES (NULL , 'Muzyka');
  7. INSERT INTO `hobby_conf` ( `id` , `nazwa` ) VALUES (NULL , 'Film');
  8. INSERT INTO `hobby_conf` ( `id` , `nazwa` ) VALUES (NULL , 'Sport');


Formularz bym wyświetlał dynamicznie:
  1. <?php
  2. $query='SELECT * FROM hobby_conf';
  3. $result = mysql_query($query);
  4. while ($row = mysql_fetch_array($result)) {
  5. echo '<input type="checkbox" name="hobby[]" value="'.$row['id'].'">'. $row['nazwa'];
  6. }
  7. ?>

Dzięki temu możesz w przyszłości bardzo łatwo dodać dodatkowe hobby bez poprawiania każdego skryptu... Wystarczy do tabeli dodać kolejny rekord i tyle...


Teraz robisz sobie:
  1. <?php
  2. $query='SELECT id FROM hobby_conf';
  3. $result = mysql_query($query);
  4. while ($row = mysql_fetch_array($result)) {
  5. $hobbies[]=$row['id'];
  6. }
  7.  
  8.  
  9. foreach($hobbies as $hobby_id){
  10. $query='SELECT * FROM user_hobbies WHERE user_id="'.$user_id.'" AND hobby_id="'.$hobby_id.'"'; //sprawdzamy czy dane juz sa w tablicy
  11. $result = mysql_query($query);
  12. if(mysql_num_rows($result)==&& (isset($_POST['hobby']) && in_array($hobby_id,$_POST['hobby']))){
  13.  
  14. $query='INSERT INTO user_hobbies (user_id,hobby_id) VALUES ("'.$user_id.'","'.$hobby_id.'")';
  15. $result = mysql_query($query);
  16. }
  17. else{
  18. if (isset($_POST['hobby']) && !in_array($hobby_id,$_POST['hobby'])){
  19. $query='DELETE FROM user_hobbies WHERE user_id="'.$user_id.'" AND hobby_id="'.$hobby_id.'"';
  20. $result = mysql_query($query);
  21. }
  22. }
  23. }
  24. ?>

Powyższy kod jest 'inteligentny'... czyli działa też kiedy użytkownik odznaczy dane hobby, wtedy dane są usuwane...
Uwaga: nie sprawdzone w praniu... winksmiley.jpg

Heh... taka pierdółka a ile kodu... smile.gif

Ten post edytował nowotny 2.02.2008, 23:31:19
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 14:49