Avatar billede Calle5463 Forsker
02. november 2016 - 15:47 Der er 5 kommentarer

Håndtering af data fra checkbox

Jeg har en formular der bla. indeholder en lille checkbox:


echo "<strong>Ønsket sektion (flere muligheder)</strong><br>" .
        "<input type='checkbox' name='sektion[1]' value='sektion_1'> Sektion 1 <br>" .
        "<input type='checkbox' name='sektion[2]' value='sektion_2'> Sektion 2 <br>" .
        "<input type='checkbox' name='sektion[3]' value='sektion_3'> Sektion 3 <br>" .
        "<input type='checkbox' name='sektion[4]' value='sektion_4'> Sektion 4 <br>" .
        "<input type='checkbox' name='sektion[5]' value='sektion_5'> Sektion 5 <br>" .
        "<input type='checkbox' name='sektion[6]' value='sektion_6'> Sektion 6 <br>" .
        "<input type='checkbox' name='sektion[7]' value='sektion_7'> Sektion 7 <br>" .
        "<input type='checkbox' name='sektion[8]' value='sektion_8'> Sektion 8 <br>" .
        "<input type='checkbox' name='sektion[9]' value='sektion_9'> Sektion 9 <br>" .
        "<input type='checkbox' name='sektion[10]' value='sektion_10'> Sektion 10" ;


Meningen er, at for hvert check der er sat, skal der oprettes en record i min tabel der linker medlemmer med hvilke sektioner af item (pladser) de vil stå på venteliste til at leje. Jeg har derfor oprettet et item (0, venteliste) for hver sektion (der kan sættes en begrænsning på antal der kan være på venteliste per sektion), som medlemmet skal allokeres hvis der ingen ledige pladser er i sektionen.

Er der en nemmere/smartere løsning, end at lave en løkke (det skal laves med php), også med tanke på senere at lave det dynamisk afhængig af antal oprettede sektioner.
Avatar billede olsensweb.dk Ekspert
02. november 2016 - 16:11 #1
>Er der en nemmere/smartere løsning, end at lave en løkke (det skal laves med php),
nej du kommer ikke udenom at lave en løkke i PHP
tilgengæld, skal dit array ikke have numre

"<input type='checkbox' name='sektion[1]' value='sektion_1'> Sektion 1 <br>" .
"<input type='checkbox' name='sektion[2]' value='sektion_2'> Sektion 2 <br>" .
"<input type='checkbox' name='sektion[3]' value='sektion_3'> Sektion 3 <br>" .
......

skal være
"<input type='checkbox' name='sektion[]' value='sektion_1'> Sektion 1 <br>" .
"<input type='checkbox' name='sektion[]' value='sektion_2'> Sektion 2 <br>" .
"<input type='checkbox' name='sektion[]' value='sektion_3'> Sektion 3 <br>" .
......

en anden ting er hvis du ved hvormange der kan være på ventelisten på forhånd, så test med JS, så brugeren med det sammen for at vide der er overtegnet (bare en tanke)
Avatar billede Calle5463 Forsker
02. november 2016 - 17:34 #2
#1 - arrayet har faktisk ikke numrer i programmet - ved ikke lige hvorfor jeg fik dem redigeret ind i eksemplet!!

Du har helt ret i, at jeg skal have indbygget visning af "ledige pladser/antal på venteliste" - det tænker jeg at løse sammen med, at lave checkboxen dynamisk ud fra læsning af itemgrupper og hovedgrupper (fx: hovegruppe = "pladser", itemgrupper = "sektioner")

JS skal jeg lige har jeg rodet lidt med tidligere, men det godt nok langt væk lige nu .......
Avatar billede olsensweb.dk Ekspert
02. november 2016 - 19:06 #3
hvis du skal have flere værdier pr checkbox kan du anvende data- attributten, kommer ikke med over serverside.
en lille demo hvor jeg anvender data- attributten i noget jquery, så du ikke kan selecte dem der ikke har nogle ledige pladser (burde slet ikke skrives ud)
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
        <title>demo</title>

        <style type="text/css">
        </style>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $('input[type="checkbox"]').change(function () {
                    var ledige_pladser = $(this).data('ledige_pladser');
                    if (ledige_pladser == 0) {
                        alert("desværer ikke flere ledige pladser");
                        //console.log("desværer ikke flere ledige pladser");
                        $(this).prop("checked", false); // unchecker den med det sammen
                    }
                    //console.log(ledige_pladser);
                });
            });
        </script>
    </head>
    <body>
        <?php
        if (isset($_POST['sektion'])) {
            $sektion = $_POST['sektion'];
            $str = "";
            for ($i = 0, $lng = count($sektion); $i < $lng; $i++) {
                // her kunne være en switch

                $str .= "hvad skal vi dog gøre med " . $sektion[$i] . "<br>";
            }
            echo $str;
            // print_r($_POST['sektion']);
        }
        ?>
        <form method="post" action ="#">
            <?php
            // man bør vel ikke udskrive den med mindre der er ledige pladser ??
            echo "<strong>Ønsket sektion (flere muligheder)</strong><br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_1' data-ledige_pladser='1' > Sektion 1 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_2' data-ledige_pladser='1'> Sektion 2 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_3' data-ledige_pladser='1'> Sektion 3 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_4' data-ledige_pladser='1'> Sektion 4 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_5' data-ledige_pladser='0'> Sektion 5 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_6' data-ledige_pladser='1'> Sektion 6 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_7' data-ledige_pladser='0'> Sektion 7 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_8' data-ledige_pladser='1'> Sektion 8 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_9' data-ledige_pladser='1'> Sektion 9 <br>" .
            "<input type='checkbox' name='sektion[]' value='sektion_10' data-ledige_pladser='1'> Sektion 10 <br>";
            ?>
            <input type="submit">
        </form>
    </body>
</html>


hvis de skal med over serverside, skal de stå som en del af value, som du så exploder på server side
Avatar billede Calle5463 Forsker
03. november 2016 - 17:06 #4
#3, fin inspiration.

Man skal kunne vælge også fuldt optaget sektioner og derved komme på venteliste.

Jeg har en lille tabel med resultatet af optalte totale pladser og antal allokerede pladser per sektion. Den opdateres ved ændringer.

Pt bruger jeg et itemnummer 0 per sektion til allokering af venteliste. Der kan sættes et max antal på itemnummeret, hvis man vil begrænse ventelistens størrelsen, og der oprettes et link mellem medlemmet og itemnummer 0.

Det lidt noget hø, at skulle have et itemnummer til det - måske jeg skulle oprette en speciel tabel til venteliste eller - måske endnu bedre - bare bruge link-tabellen og lade itemnummer være blank eller "0"?
Avatar billede Calle5463 Forsker
04. november 2016 - 20:22 #5
Har sadlet lidt om:
Indrettet link-tabellen, så den registrere medlems-, hovedgruppe-, itemgruppe- samt item-id.
Hvis item_id= NULL er det en registrering af et medlem på venteliste til den pågældende hovedgruppe og itemgruppe.
I hovedgrupper har jeg indført et felt "public" = ja/nej - hvis nej vises der ingen checkbox for hovedgruppen
Antal finder jeg i en i forvejen oprettet tabel der jævnligt bliver opdateret ....
Nu tror jeg lige jeg skal have lavet, så data lægges korrekt i linktabellen og medlemsdata når formularen submittes - dvs en record i linktabellen per check i checkboxe ........
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester