Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Podwójny checkbox, Problem z wysyłką formularza
senior.pol
post
Post #1





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

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


Witam,

Mam formularz rezerwacji z m.in. dwoma polami checkbox. Wszystko fajnie śmiga, ale problem stanowi wysyłka wartości tych pól. Gdy np. jeden jest zaznaczony, a drugi nie to wysyła z obu pól wartość tego zaznaczonego. Jak rozwiązać ten problem (IMG:style_emoticons/default/co_jest.gif)

  1. $regulamin = isset($_POST['regulamin']) ? 'Tak' : 'Nie';
  2. $zgoda = isset($_POST['zgoda']) ? 'Tak' : 'Nie';


  1. <div class="checkbox">
  2. <label for="regulamin">
  3. <input type="checkbox" checked="checked" class="form-control-regulamin" id="regulamin" name="regulamin">Akceptuję regulamin uczestnictwa *
  4. </div>
  5. <div class="checkbox">
  6. <label for="zgoda">
  7. <input type="checkbox" checked="checked" class="form-control-zgoda" id="zgoda" name="zgoda">Zgadzam się na przetwarzanie moich danych w procesie rezerwacji *
  8. </div>


Ten post edytował senior.pol 2.03.2015, 00:33:01
Go to the top of the page
+Quote Post
tzm
post
Post #2





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


ups, nie tu. sorki

Ten post edytował tzm 2.03.2015, 00:40:02
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Z formularzem jest wszystko w porządku, sprawdź dokładnie czy na pewno masz taki błąd.
Go to the top of the page
+Quote Post
senior.pol
post
Post #4





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

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


Cytat(SmokAnalog @ 2.03.2015, 00:47:53 ) *
Z formularzem jest wszystko w porządku, sprawdź dokładnie czy na pewno masz taki błąd.


Niestety błąd dalej jest.

Sprawa obrazowo wygląda tak ( dla przykładu mam pole A i B )
opcja 1: A - zaznaczone, B niezaznaczone: po wysyłce wszystko pasuje: A "Tak", B "Nie"
opcja 2: A - niezaznaczone, B - zaznaczone: po wysyłce błąd: A "Tak", B "Nie" (powinno być na odwrót)
opcja 3: A - zaznaczone, B - zaznaczone: po wysyłce błąd: A "Tak", B "Nie" (powinno być w obu "Tak")
opcja 4: A - niezaznaczone, B - niezaznaczone: po wysyłce błąd: A "Tak", B "Nie" (powinno być w obu "Nie")

Ten post edytował senior.pol 2.03.2015, 15:00:32
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Pokaż cały formularz i cały skrypt PHP, gdzie testujesz te wartości.
Go to the top of the page
+Quote Post
senior.pol
post
Post #6





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

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


Cytat(SmokAnalog @ 2.03.2015, 15:42:05 ) *
Pokaż cały formularz i cały skrypt PHP, gdzie testujesz te wartości.

  1. <?php
  2.  
  3. if(!$_POST) exit;
  4.  
  5. if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
  6.  
  7. $regulamin = isset($_POST['regulamin']) ? 'Tak' : 'Nie';
  8. $zgoda = isset($_POST['zgoda']) ? 'Tak' : 'Nie';
  9.  
  10. $address = "xxx@xxx.pl";
  11.  
  12. $e_body = "$imie $nazwisko\n\nDane adresowe: $adres, $kod $miasto\nLiczba miejsc rezerwowanych: $liczba\nAkceptuję regulamin uczestnictwa: $regulamin\nZgadzam się na przetwarzanie danych w procesie rezerwacji: $zgoda\n";
  13.  
  14. $msg = wordwrap( $e_body . $e_content . $e_reply, 70 );
  15.  
  16. $headers = "From: $email" . PHP_EOL;
  17. $headers .= "Reply-To: $email" . PHP_EOL;
  18. $headers .= "MIME-Version: 1.0" . PHP_EOL;
  19. $headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
  20. $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
  21.  
  22. if(mail($address, $e_subject, $msg, $headers)) {
  23.  
  24. 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 oddzielnej wiadomości e-mail.</p></div>';
  25.  
  26. } else {
  27.  
  28. echo 'ERROR!';
  29.  
  30. }
  31. ?>
  32.  

  1. <form role="form" action="rezerwacja.php" class="pi-contact-form" method="post">
  2. <div class="checkbox">
  3. <label for="regulamin">
  4. <input type="checkbox" checked="checked" class="form-control-regulamin" id="regulamin" name="regulamin">Akceptuję regulamin uczestnictwa *
  5. </label>
  6. </div>
  7. <div class="checkbox">
  8. <label for="zgoda">
  9. <input type="checkbox" checked="checked" class="form-control-zgoda" id="zgoda" name="zgoda">Zgadzam się na przetwarzanie moich danych w procesie rezerwacji *
  10. </label>
  11. </div>
  12. <div class="pi-error-container"></div>
  13. <p>
  14. <button class="btn pi-btn-base pi-btn-wide pi-uppercase pi-weight-700 pi-letter-spacing">
  15. Rezerwuję miejsce <i class="icon-check pi-icon-left"></i>
  16. </button>
  17. </p>
  18. </form>

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();

            var
                $regulamin = $form.find('.form-control-regulamin'),
                $zgoda = $form.find('.form-control-zgoda'),

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

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

        });

        return false;

    });

});


Ten post edytował senior.pol 2.03.2015, 17:50:40
Go to the top of the page
+Quote Post
kamil_lk
post
Post #7





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Pobieranie statusu checkboxa (zamiast .val() użyj .prop('checked'))
  1. $regulamin.prop('checked');
  2. $zgoda.prop('checked');


Ustawianie statusu checkboxa
  1. $regulamin.prop('checked', false);
  2. $zgoda.prop('checked', false);


Ten post edytował kamil_lk 2.03.2015, 19:52:15
Go to the top of the page
+Quote Post
senior.pol
post
Post #8





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

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


Cytat(kamil_lk @ 2.03.2015, 19:51:21 ) *
Pobieranie statusu checkboxa (zamiast .val() użyj .prop('checked'))
  1. $regulamin.prop('checked');
  2. $zgoda.prop('checked');


Ustawianie statusu checkboxa
  1. $regulamin.prop('checked', false);
  2. $zgoda.prop('checked', false);

Niestety nie działa (IMG:style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Osobiście nie lubię w checkboxach tego, że w formularzach niezaznaczone checkboxy nie są wysyłane wcale. Ale jak wysyłasz je jQuery, to możesz to zrobić po swojemu. Popieram kolegę kamil_lk, fajnie byłoby użyć do tego .prop("checked"), który zawsze zwraca true albo false. Może idź tym tropem i właśnie w takiej formie wysyłaj te wartości? Wtedy będziesz musiał zmienić swój skrypt PHP i operować na true/false zamiast na isset.
Go to the top of the page
+Quote Post
senior.pol
post
Post #10





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

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


Cytat(SmokAnalog @ 2.03.2015, 21:19:07 ) *
Osobiście nie lubię w checkboxach tego, że w formularzach niezaznaczone checkboxy nie są wysyłane wcale. Ale jak wysyłasz je jQuery, to możesz to zrobić po swojemu. Popieram kolegę kamil_lk, fajnie byłoby użyć do tego .prop("checked"), który zawsze zwraca true albo false. Może idź tym tropem i właśnie w takiej formie wysyłaj te wartości? Wtedy będziesz musiał zmienić swój skrypt PHP i operować na true/false zamiast na isset.

W takim razie jak powinien wyglądać kod w php? Nie jestem mocny w nim.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #11





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Jeśli pominiemy walidację póki co, to wystarczy że zamienisz:
  1. $regulamin = isset($_POST['regulamin']) ? 'Tak' : 'Nie';

na:
  1. $regulamin = $_POST['regulamin'] ? 'Tak' : 'Nie';
Go to the top of the page
+Quote Post
senior.pol
post
Post #12





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

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


Cytat(SmokAnalog @ 2.03.2015, 21:27:23 ) *
Jeśli pominiemy walidację póki co, to wystarczy że zamienisz:
  1. $regulamin = isset($_POST['regulamin']) ? 'Tak' : 'Nie';

na:
  1. $regulamin = $_POST['regulamin'] ? 'Tak' : 'Nie';

Poprawiłem kod, ale nie wiele to dało (IMG:style_emoticons/default/sad.gif) Może mam gdzieś błąd.
Kod teraz wygląda następująco:
Kod
$.post(action, {
                    regulamin: $regulamin.val(),
                    zgoda: $zgoda.val(),
                },
                function(data){
                    $error.html(data);
                    $error.slideDown('slow');

                    if (data.match('success') != null) {
                        $regulamin.prop('checked');
                        $zgoda.prop('checked');
                    }
                }

  1. $regulamin = $_POST['regulamin'] ? 'Tak' : 'Nie';
  2. $zgoda = $_POST['zgoda'] ? 'Tak' : 'Nie';

  1. <div class="checkbox">
  2. <label for="regulamin">
  3. <input type="checkbox" checked="checked" class="form-control-regulamin" id="regulamin" name="regulamin">Akceptuję regulamin uczestnictwa *
  4. </label>
  5. </div>
  6. <div class="checkbox">
  7. <label for="zgoda">
  8. <input type="checkbox" checked="checked" class="form-control-zgoda" id="zgoda" name="zgoda">Zgadzam się na przetwarzanie moich danych w procesie rezerwacji *
  9. </label>
  10. </div>
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #13





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Bo dalej wysyłasz tak samo te wartości. Poprawiłem i skomentowałem Twój JS:
[JAVASCRIPT] pobierz, plaintext
  1. $.post(
  2. action, {
  3. regulamin: $regulamin.prop("checked"), // tu wysyłasz true / false
  4. zgoda: $zgoda.prop("checked"), // i tu też
  5. },
  6. function(data){
  7. $error.html(data);
  8. $error.slideDown('slow');
  9.  
  10. if (data.match('success') != null) {
  11. $regulamin.prop('checked'); // co to ma robić? bo w tej chwili nic nie robi
  12. $zgoda.prop('checked'); // jak wyżej, tutaj sprawdzasz sobie czy jest zaznaczone i nic z tą informacją nie robisz
  13. }
  14. }
  15. );
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
senior.pol
post
Post #14





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

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


Cytat(SmokAnalog @ 2.03.2015, 21:41:59 ) *
Bo dalej wysyłasz tak samo te wartości. Poprawiłem i skomentowałem Twój JS:
[JAVASCRIPT] pobierz, plaintext
  1. $.post(
  2. action, {
  3. regulamin: $regulamin.prop("checked"), // tu wysyłasz true / false
  4. zgoda: $zgoda.prop("checked"), // i tu też
  5. },
  6. function(data){
  7. $error.html(data);
  8. $error.slideDown('slow');
  9.  
  10. if (data.match('success') != null) {
  11. $regulamin.prop('checked'); // co to ma robić? bo w tej chwili nic nie robi
  12. $zgoda.prop('checked'); // jak wyżej, tutaj sprawdzasz sobie czy jest zaznaczone i nic z tą informacją nie robisz
  13. }
  14. }
  15. );
[JAVASCRIPT] pobierz, plaintext


Poprawiłem i dalej to samo (IMG:style_emoticons/default/co_jest.gif)
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #15





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


To zdebugguj to. Zobacz czy te zmienne $zgoda i $regulamin na pewno wskazują na odpowiednie elementy itd. Bo kod wysyłający jest taki jaki powinien być.
Go to the top of the page
+Quote Post
senior.pol
post
Post #16





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

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


Cytat(SmokAnalog @ 2.03.2015, 21:54:07 ) *
To zdebugguj to. Zobacz czy te zmienne $zgoda i $regulamin na pewno wskazują na odpowiednie elementy itd. Bo kod wysyłający jest taki jaki powinien być.


Niby jest wszystko w porządku, ale nie działa tak jak powinno.
Cały formularz znajduje się tutaj
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #17





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


A gdzie masz ten skrypt podpięty?
Go to the top of the page
+Quote Post
senior.pol
post
Post #18





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

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


Cytat(SmokAnalog @ 2.03.2015, 22:16:01 ) *
A gdzie masz ten skrypt podpięty?

tutaj
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #19





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


To co mogę doradzić to żebyś się nauczył debuggować kod, bo raczej nikt Ci takiej ilości kodu nie będzie analizował. Krok po kroku sprawdzaj co się dzieje, rób console.log z róznymi wartościami.
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: 25.08.2025 - 13:06