Michał Tomczak

Michał Tomczak
https://www.youtube.
com/watch?v=nq6fVy6s
SYo

Temat: Problem ze sprawdzeniem checkbox

Witam.

Bardzo proszę o wskazówki co do sprawdzenia pola checkbox, głowię się drugi dzień i jako amator nic nie mogę wymyślić... sytuacja jest następująca:

Mam przygotowany formularz z linijkami tekstu poprzez <input type=\"text\ name=\"nazwa\"(...)> gdzie nie mam problemu, aby sprawdzić czy dane pole zostało uzupełnione i żeby można było przejść do kolejnej strony
(elseif (!empty($_POST['nazwa'](...)))

Jak jednak sprawdzić dodatkowo czy zaznaczone jest pole checkbox, które mam zrobione Java Sciptem
(function check( )
{
var checkBox = document.getElementById( "checkbox" );
var submit = document.getElementById( "submit" );

submit.disabled = !checkBox.checked;
})

a sam checkbox tak:

(<input type=\"checkbox\" id=\"checkbox\" onclick=\"check( );\" />
<input type=\"submit\" id=\"submit\" value=\"Akceptacja regulaminu\" disabled=\"disabled\" />) - jak widać chodzi mi o to, aby przejście do następnego kroku formularza było możliwe nie tylko po uzupełnieniu danych input type =text, ale i po zaznaczeniu pola checkbox

Z góry dziękuję i pozdrawiam

konto usunięte

Temat: Problem ze sprawdzeniem checkbox

To nie lepiej w formularzu dać coś takiego:


<form action="" method="post" onsubmit="return check()">


a Twoją funkcję zmienić delikatnie:


function check( ) {
return document.getElementById( "checkbox" ).checked;
}


I w ten sposób w momencie jak spróbujesz wysłać formularz, akcja zostanie zatrzymana. Nie trzeba się bawić w aktywacje/deaktywacje przycisku. Tutaj masz całość kodu. Wklep to gdziekolwiek gdzie jest obsługa PHP i możesz przetestować:


<?php var_dump($_POST); ?>
<form action="" method="post" onsubmit="return check()">
<input type="text" name="text">
<input type="checkbox" id="checkbox">
<input type="submit">
</form>

<script type="text/javascript">
function check() {
return document.getElementById( "checkbox" ).checked;
}
</script>
Dariusz Półtorak edytował(a) ten post dnia 17.08.11 o godzinie 14:48
Michał Tomczak

Michał Tomczak
https://www.youtube.
com/watch?v=nq6fVy6s
SYo

Temat: Problem ze sprawdzeniem checkbox

Dzięki za podpowiedź.

Jednak jak wtedy sprawdzić pola tekstowe formularza czy nie są puste (zależy mi na "zmuszeniu użytkownika zarówno do zaznaczenia checkboxa jak i do wypełnienia pól formularza)

<?php var_dump($_POST); ?>
<form action="" method="post" onsubmit="return check()">
<input type="text" name="NAZWA">
<input type="checkbox" id="checkbox">
<input type="submit">
</form>

i teraz:

elseif (!empty($_POST['NAZWA'])

i potem już echo i można przejść dalej? nie mogę tego dopisać do kodu, brak reakcji...
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: Problem ze sprawdzeniem checkbox

zrob tak:

<input type="hidden" name="nazwa" value="0">
<input type="checkbox" name="nazwa" value="1">

i teraz zaznaczenie spowoduje wyslanie pola checkbox z wartoscia 1 zas niezaznaczenie jego bedzie 0
Michał Tomczak

Michał Tomczak
https://www.youtube.
com/watch?v=nq6fVy6s
SYo

Temat: Problem ze sprawdzeniem checkbox

Dziękuję :)

Dwie proste linijki kodu a jest efekt, o który mi chodziło :)
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Problem ze sprawdzeniem checkbox

Piotr Krajewski:
zrob tak:

<input type="hidden" name="nazwa" value="0">
<input type="checkbox" name="nazwa" value="1">

i teraz zaznaczenie spowoduje wyslanie pola checkbox z wartoscia 1 zas niezaznaczenie jego bedzie 0
BARDZO nieeleganckie rozwiązanie! Jeżeli już pomagasz to podawaj porządne rozwiązania a nie takie obejścia i kombinowanie z nadpisywaniem...
Michał Tomczak:
Nadaj checkboxowi indywidualny atrybut name i nadaj value="1" i sprawdź go potem w PHP, jak jest ==1 to jest ok else wyrzucasz error. Polecam przeczytać uważnie jakiś tutorial z tworzenia formularzy zanim zaczniesz zaśmiecać internet pytaniami o podstawy podstaw...

Temat: Problem ze sprawdzeniem checkbox

Adam Pawliczek:
Piotr Krajewski:
zrob tak:

<input type="hidden" name="nazwa" value="0">
<input type="checkbox" name="nazwa" value="1">

i teraz zaznaczenie spowoduje wyslanie pola checkbox z wartoscia 1 zas niezaznaczenie jego bedzie 0
BARDZO nieeleganckie rozwiązanie! Jeżeli już pomagasz to podawaj porządne rozwiązania a nie takie obejścia i kombinowanie z nadpisywaniem...

Chyba nie jest to aż tak bardzo nieeleganckie, skoro helper w ZF tworzący checkboxa działa właśnie w sposób zaproponowany przez Piotra ;)

Temat: Problem ze sprawdzeniem checkbox

Mateusz H.:

Chyba nie jest to aż tak bardzo nieeleganckie, skoro helper w ZF tworzący checkboxa działa właśnie w sposób zaproponowany przez Piotra ;)

To jeszcze nie świadczy o jego elegancji. W myśl specyfikacji w kodzie nie mają prawa znaleźć się dwa elementy o tym samym atrybucie "name", a rozwiązanie bazuje na tym, że przeglądarki wysyłają ten "późniejszy" w kodzie, jeśli należy w ogóle go wysyłać. Rozwiązania bazujące na tym jak przeglądarki obsługują błędy jest nieeleganckie.

Prawidłowa odpowiedź to

if(array_key_exists('checkbox',$_POST)) //alternatywnie isset


Sprawdzanie wartości checkboksa jest opcjonalne, ale można się w to bawić. Rozwiązanie z porównaniem od razu, bez wcześniejszego isset lub array_key_exists jest niefajne, bo rzuci E_WARNING, że nie ma takiego elementu w tablicy w przypadku niezaznaczenia checkboksa.Rafał Nowak edytował(a) ten post dnia 17.08.11 o godzinie 20:34
Adam Krupa

Adam Krupa Senior Software
Developer, Lethe

Temat: Problem ze sprawdzeniem checkbox

Adam Pawliczek:
Nadaj checkboxowi indywidualny atrybut name i nadaj value="1" i sprawdź go potem w PHP, jak jest ==1 to jest ok else wyrzucasz error. Polecam przeczytać uważnie jakiś tutorial z tworzenia formularzy zanim zaczniesz zaśmiecać internet pytaniami o podstawy podstaw...

Twoje rozwiązanie w przypadku gdy nie będzie zaznaczony checkbox wywali błąd odwołania się do elementu w tablicy, który nie istnieje.
Adam Pawliczek:
BARDZO nieeleganckie rozwiązanie! Jeżeli już pomagasz to podawaj porządne rozwiązania a nie takie obejścia i kombinowanie z nadpisywaniem...

Rozwiązanie jest jak najbardziej eleganckie i tak jak Mateusz napisał ZF dokładnie w ten sposób tworzy checkboxa przez helpera.
Drugim sposobem jest sprawdzenie czy element w tablicy istnieje (isset).Adam Krupa edytował(a) ten post dnia 17.08.11 o godzinie 23:04

konto usunięte

Temat: Problem ze sprawdzeniem checkbox

Podzielam opinię nt. nieeleganckości rozwiązania z dwoma polami o tej samej nazwie.

Przyczyna prosta - dużo łatwiej spreparować szkodliwy formularz niż spowodować to samo przy sprawdzaniu istnienia klucza. Rozwiązanie zakłada istnienie klucza zawsze i wszędzie co jest założeniem błędnym, bo i tak trzeba sprawdzić jego istnienie żeby nie wynikły dziwne kwiatki przed i po walidacji.

W ZF może tak działać bez problemów, ponieważ za budowanie formularza odpowiada helper. Prz ręcznym budowaniu formatki i jej walidacji trzeba wziąć pod uwagę więcej rzeczy.Sebastian Zaborowski edytował(a) ten post dnia 18.08.11 o godzinie 00:52

konto usunięte

Temat: Problem ze sprawdzeniem checkbox

Adam Krupa:
Rozwiązanie jest jak najbardziej eleganckie i tak jak Mateusz napisał ZF dokładnie w ten sposób tworzy checkboxa przez

Skoro jest takie eleganckie to jestem ciekaw jak się zachowa poniższy kod

// wywołane z jQuery
$('input[name=nazwa]').prop('checked', true);

// wywołane z prototype.js
$$('input[name=nazwa'])[0].checked = true;
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Problem ze sprawdzeniem checkbox

1. Helper ZF nie jest dla mnie wyznacznikiem jakości i autorytetem.
2. Dwa pola o tym samym name...
3. A co jak przeglądarka wyśle zawartość formularza w innej kolejności ??? ;)

konto usunięte

Temat: Problem ze sprawdzeniem checkbox

1. Tu się zgadzam. Helper ZF nie jest tutaj wyznacznikiem jakości. Ale też rozumie czemu został użyty. Pola checkbox mają brzydką właściwość. Nie są wysyłane w $_POST jeżeli nie zostały zaznaczone. Pole hidden wykorzystuje się po to by sprawdzić czy w formularzu w ogóle jest checkbox.
Sam rozwiązałem to w inny sposób. Po stronie PHP generuje formularz klasą w PHP która trzyma info o polach więc sama określa czy pole zostało wstawione czy nie i zachowuje się odpowiednio. Ma to też tą zaletę że tworzenia formularzy i ich walidacja zajmuje raptem kilka linijek.

2. Dokładnie to co pokazał @Michał. Masz 2 pola o tej samej nazwie - jak się do nich odwołać ? Trzeba się bawić i dawać im unikalny identyfikator albo lecieć tablicą.

3. Co do "wysłania w innej kolejności" to akurat ten sposób działa pod każdą przeglądarką więc zastanawiać się nad tym nie trzeba. Przeglądarka nie człowiek - od tak zachowania nie zmienia.
Adam Krupa

Adam Krupa Senior Software
Developer, Lethe

Temat: Problem ze sprawdzeniem checkbox

Dariusz Półtorak:
1. Tu się zgadzam. Helper ZF nie jest tutaj wyznacznikiem jakości.
Tu się zgodzę, nie wszystko jest rozwiązane idealnie w ZF.
Dariusz Półtorak:
2. Dokładnie to co pokazał @Michał. Masz 2 pola o tej samej nazwie - jak się do nich odwołać ? Trzeba się bawić i dawać im unikalny identyfikator albo lecieć tablicą.
Tu się nie zgodzę, w jquery wystarczy multiple attr selector.
Atrybut name to nie atrybut id (nie musi być unikalny). Wiele elementów z tym samym name przechodzi poprawną walidację W3C.
Adam Pawliczek:
3. A co jak przeglądarka wyśle zawartość formularza w innej kolejności ??? ;)
Tego nie przewidziałem ;))Adam Krupa edytował(a) ten post dnia 18.08.11 o godzinie 10:32
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem ze sprawdzeniem checkbox

Adam Pawliczek:
Piotr Krajewski:
zrob tak:

<input type="hidden" name="nazwa" value="0">
<input type="checkbox" name="nazwa" value="1">

i teraz zaznaczenie spowoduje wyslanie pola checkbox z wartoscia 1 zas niezaznaczenie jego bedzie 0
BARDZO nieeleganckie rozwiązanie! Jeżeli już pomagasz to podawaj porządne rozwiązania a nie takie obejścia i kombinowanie z nadpisywaniem...
Michał Tomczak:
Nadaj checkboxowi indywidualny atrybut name i nadaj value="1" i sprawdź go potem w PHP, jak jest ==1 to jest ok else wyrzucasz error. Polecam przeczytać uważnie jakiś tutorial z tworzenia formularzy zanim zaczniesz zaśmiecać internet pytaniami o podstawy podstaw...

jeżeli checkbox nie jest zaznaczony to jego wartość nie trafia do tablicy $_POST dlatego zawsze trzeba sprawdzic czy istnieje taki klucz poprzez isset().
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem ze sprawdzeniem checkbox

Michał Tomczak:
Dzięki za podpowiedź.

Jednak jak wtedy sprawdzić pola tekstowe formularza czy nie są puste (zależy mi na "zmuszeniu użytkownika zarówno do zaznaczenia checkboxa jak i do wypełnienia pól formularza)

użyj jQuery i podepnij pod formularz akcję submit w której sprawdzisz czy pole checkbox jest zaznaczone - > jeżeli tak return true; w przeciwnym wypadku komunikat na ekran i return false ;)
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Problem ze sprawdzeniem checkbox

Daniel Częstki:
jeżeli checkbox nie jest zaznaczony to jego wartość nie trafia do tablicy $_POST dlatego zawsze trzeba sprawdzic czy istnieje taki klucz poprzez isset().
To sprawdza metoda od walidacji... więc nie wiem po co o tym wspominać. Z punktu widzenia "odbioru" danych z formularza: nieważne czy nie ma klucza czy jest a zawartość jest równa NULL albo "*&^@^#&^%@&@" - nie ma INT 1, nie ma zaznaczonego checkboxa! Się uczepiliście tego braku klucza w POST...
Dariusz Półtorak:
Przeglądarka nie człowiek - od tak zachowania nie zmienia.
Ale pisali ją ludzie, więc trzeba się spodziewać wszystkiego ;)
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem ze sprawdzeniem checkbox

Adam Pawliczek:

To sprawdza metoda od walidacji... więc nie wiem po co o tym wspominać.

bo chciałemDaniel Częstki edytował(a) ten post dnia 18.08.11 o godzinie 13:13
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Problem ze sprawdzeniem checkbox

Daniel Częstki:
Adam Pawliczek:
To sprawdza metoda od walidacji... więc nie wiem po co o tym wspominać.
bo chciałem

Obrazek

"To sprawdza metoda od walidacji... więc..."
a skąd wiadomo że jest tam walidacja ?
Poprzez "walidację" rozumiesz istnienie danych w POST, ich poprawny format czy ich zgodność z oczekiwaniami?
Ja w swojej wypowiedzi napisałem tylko że trzeba sprawdzić czy jest ==1, sprawdzanie isset to inna kwestia...
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem ze sprawdzeniem checkbox

Adam Pawliczek:
Daniel Częstki:
Adam Pawliczek:
To sprawdza metoda od walidacji... więc nie wiem po co o tym wspominać.
bo chciałem

Obrazek

"To sprawdza metoda od walidacji... więc..."
a skąd wiadomo że jest tam walidacja ?
Poprzez "walidację" rozumiesz istnienie danych w POST, ich poprawny format czy ich zgodność z oczekiwaniami?

wszystkie trzy rzeczy
Ja w swojej wypowiedzi napisałem tylko że trzeba sprawdzić czy jest ==1, sprawdzanie isset to inna kwestia...

Dlatego najpierw sprawdzasz istnienie obiektu / zmiennej / klucza a potem weryfikujesz wartość.
W przypadku checkboxa samo istnienie klucza z formularza oznacza że został zaznaczony i wartosć ma drugorzędne znaczenie.



Wyślij zaproszenie do