Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Problem z checkbox
Forum PHP.pl > Forum > Przedszkole
jacus24
  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. ?>
Grzyw
Jacuś, spoko, tylko co się dzieje? smile.gif W czym tkwi problem?
jacus24
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?
Grzyw
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.
jacus24
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
misiek08
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])
nowotny
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
misiek08
No tak. Nie pomyślałem
jacus24
Można to jakoś inaczej zrobić?
nowotny
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...
jacus24
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.
nowotny
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.