Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][CSS][JavaScript]Dużo checkbox
Forum PHP.pl > Forum > Przedszkole
Fifi209
Mam coś takiego:
Kod
<script type="text/javascript">
    function set(obj) {
        if (obj.value == '0') {
            obj.value = 1;
        }else{
            obj.value = 0;
        }
    }
</script>


  1. <?php
  2.    
  3.    echo '<form method="post">';
  4.    
  5.    for ($x=0; $x < 13; $x++) {
  6.        for ($i=0; $i < 13; $i++) {
  7.            echo "<input type=\"checkbox\" name=\"area[$x][$i]\" onclick='set(this);' value='0'>\nr";
  8.        }
  9.        echo '<br>';
  10.    }
  11.    
  12.    echo '<input type="submit" name="submit" value="Zatwierdz">';
  13.    echo '</form>';
  14.    
  15.    if ($_POST['submit']) {
  16.        echo '<pre>';
  17.            print_r($_POST);
  18.        echo '</pre>';
  19.    }
  20.    
  21. ?>


To tak dla przykładu co chcę zrobić. Lecz nie podoba mi się wysyłanie tylu inputów do użytkownika (transfer?), poza tym ze strony użytkownika jest trudno się w tym połapać.

Wielkość musi być dokładnie taka jak tu, użytkownik może zaznaczyć więcej niż jedno pole - na tej podstawie po przesłaniu będę generował tablicę w LUA.

Problem pojawia się też, że js ładnie zmienia value po kliknięciu ale chciałbym też dostać w post te niezaznaczone box'y... (te o value równym 0)

Ma ktoś pomysły? biggrin.gif
golaod
No skoro Ci się nie podoba ilość checkboxów i chcesz przy okazji mieć tyle checkboxów to wybacz ale nie rozumiem.

Co do tablicy z {0,1}

  1. <input type="hidden" name="tablica[0][1]" value="0" /> <input type="checkbox=" name="0,1" value="0" />


I dla onclick w checkbox sprawdzasz wartosc checkboxa i podmieniasz ja z polem hidden, a jeśli chcesz mieć mniejszy plikt html to po prostu onsubmit i zmień przed wysłaniem wszystkie checkboxy na hidden i już.
erix
Cytat
Ma ktoś pomysły?

Zrób sobie najpierw "czystą" tablicę w PHP z samymi zerami, potem "zrównuj" odpowiednio z tym, co przychodzi w POST.
osl
nie wiem po co i dlaczego, ale tak na szybko przychodzi mi do głowy tylko onsubmit + sprawdzanie checkboxów + dodawanie x razy input[type="hidden"] symulującego checkboxa... smile.gif
Fifi209
Da się to jakoś np. graficznie za pomocą javascript, css, ajax? Naprowadźcie mnie - resztę wymyślę sam.

Erix - dobry pomysł, thx. Jakoś z wielowymiarowością sobie poradzę. ;p
erix
Cytat
Erix - dobry pomysł, thx. Jakoś z wielowymiarowością sobie poradzę. ;p

Ta, jedną funkcją z API. ;p

Cytat
Da się to jakoś np. graficznie za pomocą javascript, css, ajax? Naprowadźcie mnie - resztę wymyślę sam.

To znaczy?
golaod
Nie wiem czy korzystasz z jquery czy nie w każdym razie:
Kod
$( "input:checkbox" ).click( function() {
  $( this ).value( $( this ).value() == 1 ? 0 : 1 );
}
$( "form" ).submit( function() {
  $( this ).find( "input:checkbox" ).attr( "type", "hidden" );
}


I dzięki temu w php dostaniesz tablicę area ze wszystkimi checkboxami.
Fifi209
Cytat(golaod @ 18.06.2009, 11:35:56 ) *
Nie wiem czy korzystasz z jquery czy nie w każdym razie:
Kod
$( "input:checkbox" ).click( function() {
  $( this ).value( $( this ).value() == 1 ? 0 : 1 );
}
$( "form" ).submit( function() {
  $( this ).find( "input:checkbox" ).attr( "type", "hidden" );
}


I dzięki temu w php dostaniesz tablicę area ze wszystkimi checkboxami.


Tak korzystam. Zaraz przetestuję i dam edita.

Cytat(erix @ 18.06.2009, 11:29:40 ) *
Ta, jedną funkcją z API. ;p

Ja w planach miałem przelecieć pętlami przez te wielowymiarowe tablice, ale skoro jest funkcja. ;p
Niestety nie znalazłem niczego co by mnie zadowoliło, więc chętnie usłyszę dalsze podpowiedzi.

Cytat(erix @ 18.06.2009, 11:29:40 ) *
To znaczy?


np.

Zrobiłbym graficzne pole - jeden checkbox to byłby np. kwadrat 25X25px, tylko że po kliknięciu musiałbym albo podmienić ten obrazek albo nałożyć na niego (na to tło) kolejną warstwę.

@edit

Co do jQuery - nie działa tak jak powinno
Zrobiłem to tak:
Kod
$(document).ready(
    function() {
        $("input:checkbox" ).click(
            function() {
                $(this).val(
                    $(this).val() == 1 ? 0 : 1
                );
            }
        );
        
        
        $("form").submit(
            function() {
                $(this).find("input:checkbox").attr("type", "hidden");
            }
        );
    });


I php
  1. <?php
  2.    
  3.    echo '<form method="post">';
  4.    
  5.    for ($x=0; $x < 13; $x++) {
  6.        for ($i=0; $i < 13; $i++) {
  7.            echo "<input type=\"checkbox\" name=\"area[$x][$i]\" value='0'>\nr";
  8.        }
  9.        echo '<br>';
  10.    }
  11.    
  12.    echo '<input type="submit" name="submit" value="Zatwierdz">';
  13.    echo '</form>';
  14.    
  15.    if ($_POST['submit']) {
  16.        echo '<pre>';
  17.            print_r($_POST);
  18.        echo '</pre>';
  19.    }
  20.    
  21. ?>
erix
Cytat
Niestety nie znalazłem niczego co by mnie zadowoliło, więc chętnie usłyszę dalsze podpowiedzi.

array_merge" title="Zobacz w manualu PHP" target="_manual? tongue.gif

Cytat
Zrobiłbym graficzne pole - jeden checkbox to byłby np. kwadrat 25X25px, tylko że po kliknięciu musiałbym albo podmienić ten obrazek albo nałożyć na niego (na to tło) kolejną warstwę.

Ale po co? Uzależniać podstronę od JS?
Fifi209
Cytat(erix @ 18.06.2009, 12:08:00 ) *
Ale po co? Uzależniać podstronę od JS?


Z tego będę korzystał tylko ja i kumpel, także z js nie ma problemów.

Cytat(erix @ 18.06.2009, 12:08:00 ) *


Tak, widziałem ją w manualu - tylko czy dobrze sklei te tablice... (klucze i wartości)
erix
To wtedy generuj tabelkę przez JS, po co PHP wtedy? ;]

PHP do zapisu, masz createElement, to korzystaj. [;
Fifi209
Cytat(erix @ 18.06.2009, 12:11:50 ) *
To wtedy generuj tabelkę przez JS, po co PHP wtedy? ;]

PHP do zapisu, masz createElement, to korzystaj. [;


Moja wiedza z zakresu javascript jest ... dobra jest mała bardzo. ;d
Chyba będzie się trzeba podszkolić.

Tak na boku, co do generowania przez js da się w jQuery? (Tylko mnie nie odsyłajcie do ich durnej dokumentacji)
erix
Cytat
Tylko mnie nie odsyłajcie do ich durnej dokumentacji

Ale w czym jest durna...? Naprawdę nie rozumiem tego stwierdzenia w stosunku do tego wiki, które się często przydaje... Dokumentację akurat mają dobrą.

Cytat
Tak na boku, co do generowania przez js da się w jQuery?

Pamiętasz Ani Mru-Mru? snitch.gif

Cytat
Chyba będzie się trzeba podszkolić.

Wystarczy Ci tamta fraza, co podałem w poprzednim poście.
Fifi209
Cytat(erix @ 18.06.2009, 12:30:39 ) *
Ale w czym jest durna...? Naprawdę nie rozumiem tego stwierdzenia w stosunku do tego wiki, które się często przydaje... Dokumentację akurat mają dobrą.

Szukałem kiedyś o $.ajax znalazłem dużo, nie umiałem nic sklecić sam. Poczytałem jakiś kurs/poradnik i od razu mi wyszło. I tak z masą innych funkcji. Może piszą niezrozumiałym dla mnie językiem.

Cytat(erix @ 18.06.2009, 12:30:39 ) *
Pamiętasz Ani Mru-Mru? snitch.gif

Zależy które skecze. ;p

Cytat(erix @ 18.06.2009, 12:30:39 ) *
Wystarczy Ci tamta fraza, co podałem w poprzednim poście.


A no właściwie wystarczy.

Skleciłem póki co taki kodzik:
  1. <head>
  2. <script type="text/javascript" src="jQuery.js"></script>
  3. <script type="text/javascript">
  4. function CreateCheckBox(name) {
  5. var tag = document.createElement('input');
  6. tag.setAttribute('type', 'checkbox');
  7. tag.setAttribute('value', 0);
  8. tag.setAttribute('name', name);
  9.  
  10. var area = document.getElementById('area');
  11. area.appendChild(tag);
  12. }
  13.  
  14. function generuj() {
  15. for (x=0; x < 13; x++) {
  16. for (i=0; i < 13; i++) {
  17. CreateCheckBox('area['+x+']['+i+']');
  18. }
  19. }
  20. }
  21.  
  22. </script>
  23. </head>
  24. <body onload="generuj();">
  25. <form method="POST">
  26. <div id="area"></div>
  27. <input type="submit" name="submit" value="Generuj">
  28. </form>
  29. </body>
  30. </html>


Ale bardziej satysfakcjonowałoby mnie generowanie przez jQuery i od razu dodawanie click.

Aha próbowałem jeszcze document.write('<br>'); co jedno wykonanie pierwszej pętli - wynik - zawieszanie przeglądarki.
erix
Cytat
Zależy które skecze. ;p

da śśśśśśśśśśę... [;

A po co do czegoś takiego jQuery?
Kod
function CreateCheckBox(name) {
var tag = document.createElement('input');
tag.setAttribute('type', 'checkbox');
tag.setAttribute('value', 0);
tag.setAttribute('name', name);
tag.onclick = function(e){
      alert(this.value);
}

var area = document.getElementById('area');
area.appendChild(tag);
}


Poza tym, polecam lekturę jakichś kursów jQuery, bo przydałoby się wiedzieć, co może, a co nie. Bez tego sobie nie porozmawiamy...
Fifi209
Cytat(erix @ 18.06.2009, 12:41:54 ) *
A po co do czegoś takiego jQuery?

A jakoś głupio mi to na myśl przyszło. (Kolega tak sugerował haha.gif)

Cytat(erix @ 18.06.2009, 12:41:54 ) *
Poza tym, polecam lekturę jakichś kursów jQuery, bo przydałoby się wiedzieć, co może, a co nie. Bez tego sobie nie porozmawiamy...


Czytałem troszkę, ale polskich jest mało.

Co do <br> co wykonanie pętli wykonuję po prostu:
Kod
var nl = document.createElement('br');
                    var area = document.getElementById('area');
                    area.appendChild(nl);



A teraz jak to wszystko przedstawić jakoś ładniej - graficznie?

Aaa właśnie, te pola hidden się nie wysyłają (oczywiście dokleiłem jQuery i kod ;p)

Z moich testów wyszło, że przy onsubmit jquery bierze tylko pod uwagę te zaznaczone. Dowodzi tego:
Kod
            $(document).ready(
                function() {
                    $('form').submit(
                        function() {
                            $(this).find('input:checkbox').val('test');
                        }
                    );
                }
            );
erix
Cytat
Czytałem troszkę, ale polskich jest mało.

Chyba wiesz, że 90% dokumentacji jest tylko po angielsku i po polsku nie będzie?

Cytat
A jakoś głupio mi to na myśl przyszło. (Kolega tak sugerował )

Jeśli generujesz tylko checkboxy, to całe jQ jest bez sensu (no jeśli w grę wchodzi AJAX, to wtedy nie ma się co cykać; jQ się przyda).

Cytat
A teraz jak to wszystko przedstawić jakoś ładniej - graficznie?

Pozbyć się <br />. tongue.gif
Fifi209
Cytat(erix @ 18.06.2009, 12:58:26 ) *
Chyba wiesz, że 90% dokumentacji jest tylko po angielsku i po polsku nie będzie?

Z czasem pewnie i w języku się podszkolę.

Cytat(erix @ 18.06.2009, 12:58:26 ) *
Jeśli generujesz tylko checkboxy, to całe jQ jest bez sensu (no jeśli w grę wchodzi AJAX, to wtedy nie ma się co cykać; jQ się przyda).

Nie będzie ajax'a.

Cytat(erix @ 18.06.2009, 12:58:26 ) *
Pozbyć się <br />. tongue.gif


Mam na myśli, chcę zamiast tego obrazki ;p
golaod
  1. <html>
  2. <head>
  3.    <script src="jquery-1.3.2.js"></script>
  4.    <script>
  5.        $().ready(function() {
  6.            
  7.            $('form').submit(function(){
  8.                jQuery.each($(this).find('input:checkbox'), function(){
  9.                    $(this).attr( 'checked', 'true' ).hide();
  10.                });
  11.            });
  12.            $('input:checkbox').click(function(){
  13.                $(this).val( $(this).val() == 1 ? 0 : 1 );
  14.            });
  15.        });
  16.    </script>
  17. </head>
  18. <body>
  19. <form action="a.php?do=something" method="POST" >
  20. <?php
  21. for( $i = 0 ; $i < 10 ; $i++ )
  22.    for( $x = 0 ; $x < 10 ; $x++ ) {
  23.        
  24.        ?>
  25.        <input type="checkbox" name="area[<?php echo $i; ?>][<?php echo $x; ?>]" value="0" />
  26.        <?php
  27.        echo $x == 9 ? '<br />' : '';
  28.    }
  29. ?>
  30. <input type="submit" value="?" />
  31. </form>
  32. <?php
  33. if( isset( $_GET['do'] ) ) {
  34.    
  35.    print_r( $_POST );
  36.    
  37. }
  38. ?>
  39. </body>
  40. </html>
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.