Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> trzy warunki dla checkboxa
InosU31
post 12.11.2015, 22:16:30
Post #1





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

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


Witam

Postanowiłem tu napisać i poprosić was o pomoc ponieważ siedzę już kilka dni nad jedną rzeczą i nie mogę sobie z tym poradzić :-(

Mam checkboxa :
  1. <form action="?page={$_pag}&ram={$_ram}&chkp={$chkp}&chku={$chku}&lid={$lid}&plid={$plid}&mc={$mc}&cs={$cs}&ile={$ile}&str={$str}" method="POST" enctype="multipart/form-data" id="prod_uslugi">
  2. <div id="ramka_prod_usl">
  3. <div id="lab_produkt_usl"> Produkty</div>
  4. <div id="check_produkt_usl">
  5.  
  6. <div class="onoffswitch">
  7. <input type="checkbox" name="onoffprodukty" value="on" class="onoffswitch-checkbox" id="myonoffprodukty" {$_check_produkty} onChange="this.form.submit('')" >
  8. <label class="onoffswitch-label" for="myonoffprodukty">
  9. <span class="onoffswitch-inner"></span>
  10. <span class="onoffswitch-switch"></span>
  11. </label>
  12. </div>
  13.  
  14. </div>
  15. </div>
  16. <div id="ramka_prod_usl">
  17. <div id="lab_produkt_usl" style="padding-bottom:10px;">Usługi</div>
  18. <div id="check_produkt_usl">
  19.  
  20. <div class="onoffswitch">
  21. <input type="checkbox" name="onoffuslugi" value="on" class="onoffswitch-checkbox" id="myonoffuslugi" {$_check_uslugi} onChange="this.form.submit('')">
  22. <label class="onoffswitch-label" for="myonoffuslugi">
  23. <span class="onoffswitch-inner"></span>
  24. <span class="onoffswitch-switch"></span>
  25. </label>
  26. </div>
  27.  
  28. </div>
  29. </div>
  30.  
  31. </form>


i chciałbym aby ten formularz spełniał 3 kryteria:
1. Oba są zaznaczone (checked) - możemy także oba włączać
2. Jeśli pierwszy checkbox jest wyłączony i próbujemy wyłączyć drugi to automatycznie włącza się ten pierwszy
3. Jeśli drugi jest wyłączony i próbujemy wyłączyć pierwszy to drugi się włącza


podsumowując nie ma możliwości by oba były wyłączone.

Po części udało mi się to zrobić z tym że nie do końca bo gdy wyłączę pierwszy checkbox i próbuje wyłączyć drugi to ten pierwszy się włącza ale jak chce zrobić odwrotnie to przycisk nr 1 się blokuje i nie można go wyłączyć - dopiero jak jest włączony drugi to można go wyłączyć. Mam nadzieję że nie namieszałem za bardzo ;-)

a oto mój kod php:

  1. if (isset($_POST['onoffprodukty']) && $_POST['onoffprodukty'] == "on")
  2. {
  3. echo "post jest on: ".$_POST['onoffprodukty']."<br>";
  4. $news_login->tassign['_check_produkty'] = "checked";
  5. }
  6. else
  7. {
  8. echo "post jest off: ".$_POST['onoffprodukty']."<br>";
  9. $news_login->tassign['_check_produkty'] = "";
  10. //$_POST['onoffuslugi'] = "on";
  11. $news_login->tassign['_check_uslugi'] = "checked";
  12. }
  13.  
  14. if (isset($_POST['onoffuslugi']) && $_POST['onoffuslugi'] == "on")
  15. {
  16. echo "post1 jest on: ".$_POST['onoffuslugi']."<br>";
  17. $news_login->tassign['_check_uslugi'] = "checked";
  18. }
  19. else
  20. {
  21. echo "post1 jest off: ".$_POST['onoffuslugi']."<br>";
  22. $news_login->tassign['_check_uslugi'] = "";
  23. //$_POST['onoffprodukty'] = "on";
  24. $news_login->tassign['_check_produkty'] = "checked";
  25. }
  26.  
  27. if (empty($_POST['onoffprodukty']) && empty($_POST['onoffuslugi']))
  28. {
  29. $_POST['onoffprodukty'] = "on";
  30. $_POST['onoffuslugi'] = "on";
  31.  
  32. }


byłbym wdzięczny za wszelkie wskazówki :-)

Pozdrawiam serdecznie
Go to the top of the page
+Quote Post
andrew654
post 17.11.2015, 23:37:27
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 9
Dołączył: 16.11.2012

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


Nie wiem, czy da się to zrobić bez użycia zapisu stanu checkboxów do sesji. Pusty checkbox nie wysyła żadnych danych. Jeśli masz np. wyłączony pierwszy i chcesz wyłączyć drugi checkbox to tak naprawdę wysłany formularz nie przekazuje zmiennych z tych checkboxów. Nie wiadomo w tym momencie który był wyłączony a który przed chwilą wyłączyłeś. Możesz wybrać w przypadku wyłączenia dwóch jednocześnie który ma sie domyślnie zaznaczyć.

Mam nadzieję, że nie namieszałem wink.gif
Go to the top of the page
+Quote Post
InosU31
post 20.11.2015, 21:41:30
Post #3





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

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


Witaj snitch.gif

Próbuje to zrobić za pomocą headera i przesyłać dane po GET. Zobaczymy co z tego wyjdzie bo jak dotąd nie udało mi się osiągnąć takiego rezultatu jak bym chciał. Myślałem nad tymi sesjami ale na razie próbuje innych metod.

Próbowałem powyższe działanie zrobić za pomocą switcha zamiast if ale tak jak napisałeś gdy oba są puste to php nie wie który był później wyłączony sad.gif

Dzięki za zainteresowanie

Pozdrawiam
Go to the top of the page
+Quote Post
NickOver
post 21.11.2015, 01:10:39
Post #4





Grupa: Zarejestrowani
Postów: 332
Pomógł: 10
Dołączył: 13.03.2014
Skąd: Bydgoszcz

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


Po pierwsze czemu chcesz to zrobić po stronie serwera? Nie łatwiej (i czytelniej dla użytkownika) było by to zrobić po stronie klienta (javascript)? Skąd użytkownik ma wiedzieć że musi być jakiś zaznaczony? A jeśli odznaczył 2 to który ma być włączony? Skąd php ma wiedzieć co robił użytkownik na stronie? Chyba że przy każdym kliknięciu będziesz wysyłał request ajaxem, ale to i tak bez sensu. Powiedź jaki cel chcesz osiągnąć takim działaniem.
Go to the top of the page
+Quote Post
andrew654
post 22.11.2015, 08:21:34
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 9
Dołączył: 16.11.2012

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


Po Get może Ci się udać, tylko trzeba to jakoś sprytnie przemyśleć. Za każdym razem musisz ostatnie ustawienie wysłać w header Get do formularza a w formularzu podstawić w miejscu
  1. <form method="post" action="index.php?check_1=<?php $_GET['ostatni_stan1']?>&amp;check_2=<?php $_GET['ostatni_stan2];?>>


EDIT:
Przemyślałem to. Z GET i header niepotrzebne mieszanie. Jeśli możesz do formularza dodać dwa pola hidden, gdzie będziesz zapisywał ostatnie ustawienie checkboxów to chyba już będzie z górki smile.gif

Ten post edytował andrew654 22.11.2015, 08:39:56
Go to the top of the page
+Quote Post
celbarowicz
post 28.11.2015, 10:37:29
Post #6





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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



KOd nie jest optymalny. Spełnia wymagane warunki. Wydaje mi się, że wszystko jest OK.
  1. <head>
  2. <script type="text/javascript">
  3.  
  4. function zaznacz1()
  5. {
  6. if((document.getElementById('x1').checked==false)&&(document.getElementById('x2').checked==true)){document.getElementById('t1').value=document.getElementById('x1').checked=false;
  7.  
  8. }
  9. if((document.getElementById('x1').checked==true)&&(document.getElementById('x2').checked==true)){document.getElementById('t1').value=document.getElementById('x1').checked=true;
  10.  
  11. }
  12. if((document.getElementById('x2').checked==false)&&(document.getElementById('x1').checked==false)){
  13. document.getElementById('t2').value=document.getElementById('x2').checked=true;
  14. document.getElementById('t1').value=false;
  15. }
  16. }
  17.  
  18.  
  19. function zaznacz2()
  20. {
  21. if((document.getElementById('x2').checked==false)&&(document.getElementById('x1').checked==true)){
  22. document.getElementById('t2').value=document.getElementById('x2').checked=false;
  23.  
  24. }
  25. if((document.getElementById('x2').checked==true)&&(document.getElementById('x1').checked==true)){
  26. document.getElementById('t2').value=document.getElementById('x2').checked=true;
  27. }
  28. if((document.getElementById('x2').checked==false)&&(document.getElementById('x1').checked==false)){
  29. document.getElementById('t1').value=document.getElementById('x1').checked=true;
  30. document.getElementById('t2').value=false;
  31. }
  32.  
  33.  
  34. }
  35.  
  36. </script>
  37. </head>
  38. <body >
  39. <form name="moj">
  40.  
  41. <input name="x1" id="x1" type="checkbox" name="grupa1" value="1" onClick="zaznacz1()"; checked="true" />
  42. <input type="text" id="t1" value="true"/>
  43. <input name="x2" id="x2" type="checkbox" name="grupa1" value="2" onClick="zaznacz2()"; checked="true" />
  44. <input type="text" id="t2" value="true"/>
  45. </form>
  46. </body>
  47. </html>
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  


Ten post edytował celbarowicz 28.11.2015, 10:39:47
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: 14.08.2025 - 14:38