Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem ze sprawdzaniem checkbox-ów
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam. Mam takie mały pytanko... Utknałem w jednym miejscu i jakoś nie mogę tego przeskoczyć. Mam listę opcji z checkboxami obok:
  1. <input type="checkbox" name="op[]" id="kat_1" value="kat_1" <?php if($kat_1=='t') echo "checked='checked'"; ?>/>Opcja 1
  2. <input type="checkbox" name="op[]" id="kat_2" value="kat_2" <?php if($kat_2=='t') echo "checked='checked'"; ?>/>Opcja 2
  3. <input type="checkbox" name="op[]" id="kat_3" value="kat_3" <?php if($kat_3=='t') echo "checked='checked'"; ?>/>Opcja 3
  4. <input type="checkbox" name="op[]" id="kat_4" value="kat_4" <?php if($kat_4=='t') echo "checked='checked'"; ?>/>Opcja 4
  5. <input type="checkbox" name="op[]" id="kat_5" value="kat_5" <?php if($kat_5=='t') echo "checked='checked'"; ?>/>Opcja 5
  6. <input type="checkbox" name="op[]" id="kat_6" value="kat_6" <?php if($kat_6=='t') echo "checked='checked'"; ?>/>Opcja 6
  7. <input type="checkbox" name="op[]" id="kat_7" value="kat_7" <?php if($kat_7=='t') echo "checked='checked'"; ?>/>Opcja 7
  8. <input type="checkbox" name="op[]" id="kat_8" value="kat_8" <?php if($kat_8=='t') echo "checked='checked'"; ?>/>Opcja 8

Za pomocą zapytania do bazy danych, które mam parę linijek wyżej, sprawdzam które opcje mają być zaznaczone. I teraz użytkownik może część odznaczyć lub zaznaczyć w tej liście jak tam w danej chwili potrzebuje... Jak sprawdzić, które opcje zostały zaznaczone w tej zmodyfikowanej liście? Po kliknięciu na przycisk powiedzmy "zatwierdź" jestem w stanie uzyskać tablicę $op['0'] do $op['7'] z tylko tymi elementami, które są zaznaczone ale nie wiem jak dalej to wykorzystać. Chciałbym uzyskać jakiś sensowny wynik tak aby zrobić jakieś kolejne zapytanie do bazy, które zaktualizuje mi wynik tak jak chce użytkownik... Pewnie nie raz się z takim czymś spotkaliście więc jeśli możecie coś podpowiedzieć to byłbym wdzięczny. Pozdrawiam, Łukasz.
plurr
w tablicy "op' bedziesz mial wartosci checkboxow tylko tych zaznaczonych, musisz wiec badac istnienie wartosci w tablicy isset.

A jak sprawdzić, które opcje zostały zaznaczone/zmienione przez użytkownika w danej chwili ?
Musisz pobrać znów wyniki z bazy i porównać je z tablicą "op".

Nie wiem czy do konca zrozumialem Twoj problem.
lukash82
Hmmm..... No właśnie o to chodzi, jak piszesz. Tylko problem w tym, że nie bardzo wiem jak to przelać na php...
plurr
Moje domysły i założenia są następujące:
- ilość checkboxów jest znana i ograniczona od 1 do 9
- każdy checkbox to osobna kolumna w bd (mozna by tez serializowac tablice)
- obie wartosic checkboxa sa reprezentowane w bazie - zaznaczone/niezaznaczone np wartosci 1/0

  1. <?php
  2. $resDbArray  = "... tablica z wynikami bd... ";
  3. $opUserArray = ".. tablica checkboxow... ";
  4.  
  5. foreach ($resDbArray as $resDbKey => $resDbVal) {
  6.      // teraz mozesz sprawdzac na pare sposobow wartosci
  7.  
  8.      // jesli uzytkownik zaznaczyl checkboxa - wartosc 1
  9.      // oraz wartosc ta rozni sie od wczesniejszej
  10.      if (isset($opUserArray[$resDbKey]) && ($opUserArray[$resDbKey] != $resDbVal)) {
  11.          // operacje...
  12.      }
  13.  
  14.     // jesli uzytkownik nie zaznaczyl checkboxa - przyjmujemy wartosc 0
  15.     // oraz czy wartosc ta rozni sie od wczesniejszej
  16.     if (!isset($opUserArray[$resDbKey]) && ($opUserArray[$resDbKey] != $resDbVal)) {
  17.       // operacje
  18.     }
  19.  
  20.    // inna metoda - sprawdzamy najpierw warunek czy zostal zaznaczony
  21.    $checked = isset($opUserArray[$resDbKey]) ? 1 : 0;
  22.  
  23.    // nastepnie wynik porownujemy tym z bazy
  24.    if ($checked != $resDbVal) {
  25.       // operacje
  26.    }
  27. }
  28. ?>


Myśle ze jeszcze mozna by wymyslic pare sposobow na operacje checkboxami.
Nie wiem czy dany przyklad dziala, powiniene - jednakze pisalem go tutaj z palca na szybko.
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.