Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: trzy warunki dla checkboxa
Forum PHP.pl > Forum > PHP
InosU31
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
andrew654
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
InosU31
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
NickOver
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.
andrew654
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
celbarowicz

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.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.