Sprawdzenie zaznaczenia i pobranie value z checkboxa

0

Cześć
Tworzę projekt obsługi rezerwacji w hostelu. Użytkownik podaje daty naciska przycisk "dalej", na następnej stronie prezentowane są pobierane z bazy numery wolnych pokoi w danym terminie. Przy każdym numerze pokoju są dwa checkboxy - zarezerwuj oraz dostaw łóżko. Po zaznaczeniu i naciśnięciu kolejnego przycisku chce sprawdzić:

  1. czy został zaznaczony jakikolwiek checkbox związany z rezerwacją pokoju
  2. czy został zaznaczony jakikolwiek checkbox związany z dostawką i czy pokrywa się z numerem pokoju (czyli czy użytkownik zarezerwował np. pokój 1, a dostawkę nie zaznaczył przy pokoju 12).

Ad 1 stworzyłem taki kod testowo, jednak od razu wyświetlany jest brak zaznaczenia, pomimo że nie zdążyłem jeszcze nic zaznaczyć. Nawet jak zaznaczę i nacisnę przycisk to i następuje odświeżenie strony z napisem brak zaznaczenia. Jak to ruszyć, aby zostało to sprawdzone dopiero po naciśnięciu przycisku?:

 <input type="checkbox" name="selectroom[]" value='.$result['NumerPokoju'].'"> //przykładowy checkbox
<form method="post">
<input type ="submit" value="Rezerwuj"/>
</form>
if (empty($_POST['selectroom[]'])) { //sprawdzenie czy jakikolwiek checkbox został zaznaczony
      echo '<span style="color:red"> Brak zaznaczenia</p>';
} 
else {
echo 'Jest okej'; }	

Ad 2. jak mogę wyodrębnić do tablicy numery (czyli ''value'' z checkboxa) tych zaznaczonych pokoi : $nr_room[]= ?

Przyznaję się, że jestem dopiero początkujący w PHP. Dziękuje z góry za przeczytanie tematu i pomoc :)
Pozdrawiam

0

Na początek wrzuć wszystkie inputy do środka formularza i podepnij action. Poczytaj i zrozum to: http://www.w3schools.com/tags/att_form_action.asp i może co nieco z tego: https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=php+post+checkbox+array.

Jak nie wiesz jak debugować PHP kod to wrzuć to print_r($_POST); w miejsce gdzie sprawdzasz czy formularz został wysłany itd.

0

O ile dobrze wszystko zrozumiałem to wydaje mi się, że lepszym pomysłem byłoby sprawdzenie JavaScriptem czy czekboksy zostały zaznaczone i wtedy ewentualnie wysłanie danych

0

Albo po prostu, dodanie do checkboxa require ?

Tak jak napisał pierwszy kolega.
Wrzuć wszystkie inputy między formy POST

<form method="post">
<input type="checkbox" name="selectroom[]" value='.$result['NumerPokoju'].' require"> //przykładowy checkbox
<input type ="submit" value="Rezerwuj"/>
</form>
if (empty($_POST['selectroom[]'])) { //sprawdzenie czy jakikolwiek checkbox został zaznaczony
      echo '<span style="color:red"> Brak zaznaczenia</p>';
} 
else {
echo 'Jest okej'; } 
0

Tak jak powiedział kolega @Mostek87 najlepiej będzie użyć tutaj JS i sprawdzić przed submitem czy wszystko jest ok.

Ewentualnie możesz wysyłać ten formularz i w pliku docelowym sprawdzić czy użytkownik nie popełnił błędu.
Jak nie to przetwarzasz wniosek dalej i robisz co tam potrzebujesz, a jak popełnił to robisz redirecta z powrotem na stronę z checkboxami tylko dodajesz np. zmienną $_POST['warning'}, w której zamieszczasz treść ostrzeżenia i dopiero tą zmienną ifujesz do wyświetlenia komunikatu o błędnym wypełnieniu formularza.

0

Więc racja, faktycznie zapomniałem inputy wsadzić w action. I jak jest dobrze to już piszę "jest okej". Ale są dwa problemy:

  1. nadal wyświetla "na dzień dobry" brak zaznaczenia (w przypadku stworzenia zmiennej i wstawiania do niej komunikatów jak zaproponował @Doggye
    to nic nie wyświetla, nawet jak nie zostało nic zaznaczone);

  2. Jeżeli nic się nie wybierze i naciśnie przycisk to aby pojawił się ponownie komunikat "brak zaznaczenia" następuje przeładowanie strony. Tutaj pojawia się problem z datami pobranymi z poprzedniej strony metodą $_POST, ponieważ one się "nullują", przez co skrypt pobiera mi wszystkie dostępne pokoje w hostelu, niezależnie czy są dostępne czy nie. Czy można te daty jakoś "zatrzymać"?

0
  1. Widocznie coś źle napisałeś.
  2. Ponownie polecam JS, albo napisać z uwzględnieniem tego problemu skrypt z pkt 1.

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