Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]checkboxy w tablicy
pkosciej
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.02.2012

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


pętlą generuje poniższy kod:

  1. <input type="checkbox" name="tab[]">


załóżmy, że pętla wykonała się 5x a użytkownik zaznaczył checkboxy: pierwszy, drugi i czwarty

więc otrzymuje tablice:

tab[0] == on
tab[1] == on
tab[2] == on

teraz sprawdzając przykładowo czwarty element, który użytkownik zaznaczył ptaszkiem otrzymam null - bo element trzeci był pusty, więc w jego miejsce wszedł element 4.

Jak rozwiązać ten problem, aby każdy element tablicy był równoległy do zaznaczonego ptaszka?

Proszę o pomoc
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Musisz dodać value dla checkboxów:

  1. <input type="checkbox" name="tab[]" value="4">


Teraz wiesz, że jeśli $_POST['tab'] ma wartość 3 to odpowiada za zaznaczenie 4 elementu.
Go to the top of the page
+Quote Post
pkosciej
post
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.02.2012

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


tak bym mógł wykonać kiedy mam pojedynczy checkbox lub ich ilość jest mi znana, ale co jeżeli generuje je pętlą, tak jak napisałem w pierwszym poście?

Ten post edytował pkosciej 6.10.2012, 16:39:57
Go to the top of the page
+Quote Post
abort
post
Post #4





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


jeśli mamy pętlę for(), to indeksy znamy, prawda? A jeśli mamy while/foreach, to przed pętlą ustawiamy sobie $index=0, a w pętli zwiększamy $index o 1. I po zakończeniu pętli mamy ilość dodanych checkboxów.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(pkosciej @ 6.10.2012, 17:38:40 ) *
tak bym mógł wykonać kiedy mam pojedynczy checkbox lub ich ilość jest mi znana, ale co jeżeli generuje je pętlą, tak jak napisałem w pierwszym poście?


Tak samo pętlą odczytujesz:

  1. foreach ($_POST['name'] as $key => $value) {
  2. echo $key . '=>'. $value;
  3. }


A value ustalane podczas generowania kodu HTML może być np. id czy coś w tym stylu, coś powiązanego z treścią formularza, żebyś wiedział o co chodzi lub też kolejna liczba naturalna (odpowiadająca n-temu obrotowi pętli, w której generujesz kod HTML).

Ten post edytował b4rt3kk 6.10.2012, 17:55:30
Go to the top of the page
+Quote Post
bostaf
post
Post #6





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(pkosciej @ 5.10.2012, 23:32:55 ) *
pętlą generuje poniższy kod:

  1. <input type="checkbox" name="tab[]">

Problem w tym, że każdy input, mimo że generujesz go pętla, ma taką samą nazwę tab[]. Po submitowaniu, klucze tablicy tab ustawiają się same, startując od 0. Jeśli zaznaczone będzie tylko jeden checkbox, nieważne który, to w wyniku dostaniesz:
Kod
$_POST = array(
    'tab' = array(
        [0] = 'on'
    )
)

Jeśli zaznaczone będą dwa checkboxy, nieważne które, to w wyniku dostaniesz:
Kod
$_POST = array(
    'tab' = array(
        [0] = 'on',
        [1] = 'on'
    )
)


W trakcie generowania inputów pętlą, musisz nadać różne nazwy inputom, np:
  1. for($i = 1; $i <= 5; $i++) {
  2. echo '<input type="checkbox" name="tab[' . $i . ']">Opcja ' . $i . '<br>';
  3. }

W ten sposób każdy input będzie miał unikatową nazwę (tab[1], tab[2], ...), i w zależności o tego, który będzie zaznaczony przez użytkownika, dostaniesz tablicę tab z odpowiednimi indeksami, np:
Kod
$_POST = array(
    'tab' = array(
        [1] = 'on',
        [2] = 'on',
        [4] = 'on'
    )
)

Zauważ, że w zmiennej post nigdy nie pojawią się checkboxy niezaznaczone. Są tylko te zaznaczone. Mają wartość "on". Jeśli chcesz, żeby miały inną wartość, to dodaj tą informację do inputów;
  1. for($i = 1; $i <= 5; $i++) {
  2. echo '<input type="checkbox" name="tab[' . $i . ']" value="opcja' . $i . '">Opcja ' . $i . '<br>';
  3. }

a w wyniku dostaniesz (przy zaznaczonych checkboxach pierwszym, drugim i czwartym):
Kod
$_POST = array(
    'tab' = array(
        [1] = 'opcja1',
        [2] = 'opcja2',
        [4] = 'opcja4'
    )
)
Go to the top of the page
+Quote Post
pkosciej
post
Post #7





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 16.02.2012

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


Dziękuje za pomoc, zwłaszcza dla
@bostaf - świetnie zrozumiałeś mój błąd a Twój wykład na prawdę pomógł mi rozwiązać problem, dziękuje.
Go to the top of the page
+Quote Post

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: 10.10.2025 - 09:32