Pobranie wartości z checkbox'a - 0 gdy jest odznaczony, 1, gdy zaznaczony

0

Witam,

potrzebuję pobrać wartość 1 - gdy checkbox jest zaznaczony i 0, gdy jest odznaczony.
HTML:

<input type="checkbox" name="data[color][]" class="color" value="1" checked>

Tablica data - przechowuje jeszcze inne dane, które są pobierane z input typu text oraz select. To działa prawidłowo. Problem się pojawia, gdy próbuję pobrać dane z input typu checkbox.

Krótki opis "projektu":
Skrypt ma za zadanie dodać kilka rekordów do bazy danych jednocześnie. Na start jest dostępna jedna sekcja do wprowadzenia danych, dla pojedynczego rekordu - przy użyciu JS po kliknięciu w odpowiedni button - pojawia się następna sekcja i tak do pewnej maksymalnej liczby sekcji/możliwych rekordów.

Ogólnie skrypt działa poprawnie - rekordy się dodają. Problem jest z kolumną color, która pobiera dane z w/w checkboxa.

Po wysłaniu formularza - następuje reorganizacja tablicy, aby jakoś to rozsądniej przedstawić. Kod PHP:

foreach($data as $columnName => $columnValues){
		foreach($columnValues as $rowIndex => $columnValue){
			$result[$rowIndex][$columnName] = $columnValue;
		}
}

Aby dostać się do wartości:

	foreach($result as $r => $value){
                 // dane
        }

W foreach następuje sprawdzenie:

if(isset($value['color'])){
    $color = 1;
} else {
    $color = 0;
}

O ile przy ilości rekordów <= 2 działa poprawnie, to jak jest > 2 wartości nie są poprawnie przypisywane. Co powinienem uwzględnić, na co zwrócić uwagę?

Jeśli trzeba więcej informacji - proszę pisać. Wydaje się, że wszystko co z tym związane wkleiłem.

Pozdrawiam.

0

Z tego co widzę w "foreach" sprawdzasz i dodajesz wartości w tabeli dwuwymiarowej.
A w:

if(isset($value['color'])){
    $color = 1;
} else {
    $color = 0;
}

sprawdzasz tylko tabelę jednowymiarową dlaczego?

0
ArAs2 napisał(a):

Z tego co widzę w "foreach" sprawdzasz i dodajesz wartości w tabeli dwuwymiarowej.

A w:

if(isset($value['color'])){
    $color = 1;
} else {
    $color = 0;
}

sprawdzasz tylko tabelę jednowymiarową dlaczego?

Dziękuję za odpowiedź.

Może źle przedstawiłem.

Warunek sprawdzający wartość - jest w pętli foreach:

foreach($result as $r => $value){
	if(isset($value['color'])){
		$color = 1;
	} else {
		$color = 0;
	}
}

Czyli odwołuję się bezpośrednio do wartości. Czego nie rozumiem?

1

Jeżeli masz w input masz data[color][] to Twoje $value['color'] jest tablicą i musisz zrobić KOLEJNEGO foreach'a

1

Po pierwsze: zwróć u wagę na tę wartość w pętli:

$value['color']

To jest tablica i to dopiero ona zawiera przesłane dane na temat kolorów. Czyli musisz zrobić coś takiego:

foreach($value['color'] as $colorIndex => $color){
    if ((int)$color === 1) {
         // do something...
    }
}

Druga sprawa: nie wiem, jak masz zrobiony projekt - po prostu upewnij się, że jeśli NIE zaznaczysz checkboxa, to i tak zostanie przesłany w tablicy jako "0".

0
jagoslau napisał(a):

Druga sprawa: nie wiem, jak masz zrobiony projekt - po prostu upewnij się, że jeśli NIE zaznaczysz checkboxa, to i tak zostanie przesłany w tablicy jako "0".

Nie zostanie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1