Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] [html] Checkbox i wysyłka formularza
senior.pol
post 27.02.2015, 01:27:02
Post #1





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 10.08.2011

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


Witam,
Mam problem z checkboxem w formularzu, który domyślnie jest zaznaczony i nie zwraca prawidłowo wartości i błędu.
Docelowo chcę mieć następującą sytuację: Jeśli pole checkbox zostanie odznaczone, to wyświetli się komunikat z błędem i nie pozwoli
wysłać formularza (nie chcę korzystać z opcji blokowanie buttonu submit), jeśli pozostanie nie ruszone, to wyśle wartość np. value.

W html-u wygląda to następująco:
  1. <div class="checkbox">
  2. <label for="warunki">
  3. <input type="hidden" name="warunki" value="Nie">
  4. <input type="checkbox" checked="chcecked" class="form-control-warunki" id="warunki">Akceptuję warunki uczestnictwa *
  5. </label>
  6. </div>


, a w php:

  1. if (isset($warunki) == '') {
  2. echo '<div class="pi-alert-danger fade in"><button type="button" class="pi-close" data-dismiss="alert"><i class="icon-cancel"></i></button><p>Przykładowa treść błędu.</p></div>';
  3. exit();
  4. }


Zna ktoś może rozwiązanie tego problemu?

PS. W internecie przeczytałem już sporo na ten temat, ale rozwiązania dla mojego przypadku nie znalazłem wstydnis.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
morthan
post 27.02.2015, 09:14:40
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.06.2010

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


Hej,

nie znalazłeś rozwiązania bo to co proponujesz wydaje się niezgodne ze sztuką.
Do blokowania formularza używa się na codzień np. tego http://api.jquery.com/event.preventdefault/.
A odpowiadająć dokładnie na twoje pytanie to przepis na twoją bolączkę, wg. mnie wygląda tak:
1. wyświetl formularz
2. wciśnij submit
3. jQuery (czy innym prototype) blokujesz dalszą wysyłkę
4. za pomocą ajax przesyłasz form do walidacji (czy innych operacji)

4a. jak poszło nie tak podczas walidacji, logujesz błędy do pliku, zanim odeślesz info do przeglądarki i wykonasz pkt. 5 i 6 (to opcja, np. do formularza logowania)

5. jeśli przeszło walidację robisz http://api.jquery.com/submit/
6. a jeśli nie to robisz coś innego, np. wyświetlasz komunikaty błędów wink.gif (użytkownicy lubią wiedzieć co się stało że nie działa)


Tak z regóły działa większość formularzy.
Go to the top of the page
+Quote Post
ikssde
post 27.02.2015, 11:37:22
Post #3





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Kod poniżej zwraca tylko true lub false, więc nigdy się nie wykona.

  1. if (isset($warunki) == '')


Wyrzuć ten znak równości i będzie działało. Warunek wykona się gdy checkbox będzie zaznaczony.

  1. if (isset($warunki))




Ten post edytował ikssde 27.02.2015, 11:38:19
Go to the top of the page
+Quote Post
senior.pol
post 27.02.2015, 12:48:26
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 10.08.2011

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


Cytat(ikssde @ 27.02.2015, 11:37:22 ) *
Kod poniżej zwraca tylko true lub false, więc nigdy się nie wykona.

  1. if (isset($warunki) == '')


Wyrzuć ten znak równości i będzie działało. Warunek wykona się gdy checkbox będzie zaznaczony.

  1. if (isset($warunki))


Teraz za każdym razem pokazuje mi błąd, nawet gdy pole jest zaznaczone.
Go to the top of the page
+Quote Post
phpion
post 27.02.2015, 13:37:51
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




No ale kolego - warunki to to Twoje ukryte pole, które zawsze ma tą samą wartość Nie, chyba, że zmieniasz ją jakoś w JS w momencie kliknięcia w checkbox. Daj tak:
  1. <input type="hidden" name="warunki" value="Nie">
  2. <input type="checkbox" checked="chcecked" class="form-control-warunki" id="warunki" name="warunki" value="Tak">Akceptuję warunki uczestnictwa *

a potem w PHP:
  1. if (isset($_POST['warunki']) && $_POST['warunki'] === 'Tak') {
  2. die('OK :)');
  3. }
  4. else {
  5. die('NIE OK :(');
  6. }
Go to the top of the page
+Quote Post
senior.pol
post 27.02.2015, 14:11:42
Post #6





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 10.08.2011

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


Cytat(phpion @ 27.02.2015, 13:37:51 ) *
No ale kolego - warunki to to Twoje ukryte pole, które zawsze ma tą samą wartość Nie, chyba, że zmieniasz ją jakoś w JS w momencie kliknięcia w checkbox. Daj tak:
  1. <input type="hidden" name="warunki" value="Nie">
  2. <input type="checkbox" checked="chcecked" class="form-control-warunki" id="warunki" name="warunki" value="Tak">Akceptuję warunki uczestnictwa *

a potem w PHP:
  1. if (isset($_POST['warunki']) && $_POST['warunki'] === 'Tak') {
  2. die('OK :)');
  3. }
  4. else {
  5. die('NIE OK :(');
  6. }


Nie działa. Zwraca mi ciągle "OK"
Go to the top of the page
+Quote Post
phpion
post 27.02.2015, 14:27:26
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Zapewniam Cię, że działa. Skleiłem kod w całość:
  1. <form method="post">
  2. <input type="hidden" name="warunki" value="Nie">
  3. <input type="checkbox" checked="chcecked" class="form-control-warunki" id="warunki" name="warunki" value="Tak">Akceptuję warunki uczestnictwa *
  4.  
  5. <input type="submit">
  6. </form>
  7.  
  8. <?php
  9. if (isset($_POST['warunki']) && $_POST['warunki'] === 'Tak') {
  10. die('OK :)');
  11. }
  12. else {
  13. die('NIE OK :(');
  14. }
Go to the top of the page
+Quote Post
senior.pol
post 27.02.2015, 15:54:44
Post #8





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 10.08.2011

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


Cytat(phpion @ 27.02.2015, 14:27:26 ) *
Zapewniam Cię, że działa. Skleiłem kod w całość:
  1. <form method="post">
  2. <input type="hidden" name="warunki" value="Nie">
  3. <input type="checkbox" checked="chcecked" class="form-control-warunki" id="warunki" name="warunki" value="Tak">Akceptuję warunki uczestnictwa *
  4.  
  5. <input type="submit">
  6. </form>
  7.  
  8. <?php
  9. if (isset($_POST['warunki']) && $_POST['warunki'] === 'Tak') {
  10. die('OK :)');
  11. }
  12. else {
  13. die('NIE OK :(');
  14. }


Nie wiem czemu, ale dalej nie działa. Może to wina czegoś innego:

  1. <?php
  2.  
  3. if(!$_POST) exit;
  4.  
  5. if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
  6.  
  7. $warunki = isset($_POST['warunki']) ? $_POST['warunki'] : '';
  8.  
  9. $address = "abc@abc.pl";
  10.  
  11. if (isset($_POST['warunki']) && $_POST['warunki'] === 'Tak') {
  12. die('OK :)');
  13. }
  14. else {
  15. die('NIE OK :(');
  16. }
  17.  
  18.  
  19. $e_subject = "$rejs - rezerwacja miejsca";
  20.  
  21. $e_body = "$imie $nazwisko\n\nDane adresowe: $adres, $kod $miasto\nLiczba miejsc rezerwowanych: $liczba\nAkceptacja warunków uczestnictwa: $warunki\nZgoda na przetwarzanie danych w procesie rezerwacji: $zgoda\nFaktura: $faktura\n";
  22.  
  23.  
  24. $msg = wordwrap( $e_body . $e_content . $e_reply, 70 );
  25.  
  26. $headers = "From: $email" . PHP_EOL;
  27. $headers .= "Reply-To: $email" . PHP_EOL;
  28. $headers .= "MIME-Version: 1.0" . PHP_EOL;
  29. $headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
  30. $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
  31.  
  32. if(mail($address, $e_subject, $msg, $headers)) {
  33.  
  34. echo '<div class="pi-alert-success fade in"><button type="button" class="pi-close" data-dismiss="alert"><i class="icon-cancel"></i></button><p><strong>Gratulacje!</strong> Instrukcję finalizacji rezerwacji otrzymasz w wiadomości e-mail.</p></div>';
  35.  
  36. } else {
  37.  
  38. echo 'ERROR!';
  39.  
  40. }
  41. ?>
  42.  


  1. <form role="form" action="rezerwacja.php" class="pi-contact-form">
  2. <div class="checkbox">
  3. <label for="warunki">
  4. <input type="hidden" name="warunki" value="Nie">
  5. <input type="checkbox" checked="chcecked" class="form-control-warunki" id="warunki" name="warunki" value="Tak">Akceptuję warunki uczestnictwa *
  6. </label>
  7. </div>
  8. <div class="pi-error-container"></div>
  9. <p>
  10. <button class="btn pi-btn-base pi-btn-wide pi-uppercase pi-weight-700 pi-letter-spacing">
  11. Rezerwuję miejsce <i class="icon-check pi-icon-left"></i>
  12. </button>
  13. </p>
  14. </form>


Zależy mi na powiadamianiu użytkownika, gdy odznaczy pole akceptacji, w przeciwnym razie formularz nie zostanie wysłany.

I tu jeszcze js

Kod
jQuery(function($){

    $('.pi-contact-form').submit(function(){

        var $form = $(this),
            $error = $form.find('.pi-error-container'),
            action  = $form.attr('action');

        $error.slideUp(750, function() {
            $error.hide();

                $warunki = $form.find('.form-control-warunki'),

            $.post(action, {
                    warunki: $warunki.val(),
                },
                function(data){
                    $error.html(data);
                    $error.slideDown('slow');

                    if (data.match('success') != null) {
                        $warunki.val('');
                    }
                }
            );

        });

        return false;

    });
    //endregion

});


PS. Zamieszczam kody w odniesieniu tylko do pola "warunki".

Ten post edytował senior.pol 27.02.2015, 15:57:17
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 00:18