logo   Checkboxe.




Checkboxe kan anvendes på forskellige måder:


xIntegreret med database
xMultiple choise


Checkboxe adskiller sig fra alle andre typer "input types". Det normale er, at der altid etableres en record i $_POST-arrayen for hvert felt i formen. Det er derfor ikke nødvendigt at undersøge i $_POST om de enkelte records eksisterer. Checkboxe afviger derved, at der kun etableres en record i $_POST-arrayen, når de er aktiverede. Ved udpakning af $_POST-arrayen er det derfor nødvendigt at afklare den enkelte checkbox's tilstedeværelse.


En checkbox skal endvidere have tilknyttet en 'value', der medtages i $_POST-arrayen, når checkboxen er blevet aktiveret. Det gøres i den aktuelle sitution ved at bruge et 'INT'-felt i databasen.




Integreret med database


En checkbox, der anvendes til interaktiv vedligehold af et databasefelt, opbygges således (her: 0 = unchecked/ikke aktiv og 1 = checked / aktiv):


  • Databasefelt
    Skal være type INT.

  • Variabel
    I programmets indledende definition af variabler etableres checkboxens variabel som:
    $checkboxnavn = 1;


  • Input type
    Checkboxens 'input type'-linie anvendes forskelligt ved 'insert' og 'update'
    • Insert
      Ved insert opbygges koden på helt normal vis:
      <tr><td>Tekst</td><td><input type='checkbox' name='checkboxnavn' value="<?php echo $checkboxnavn; ?>" /></td></tr>
    • Update
    • Ved update 'knækkes' kodelinien, og der indsættes php-kode, der får checkboxen til at være overensstemmende med den aktuelle værdi i databasen:
      <tr><td>Tekst</td><td><input type='checkbox'
      <?php
      if($checkboxnavn == 1)
      {echo "checked";}
      ?>

      name='checkboxnavn' value="<?php echo $checkboxnavn; ?>" /></td></tr>


  • Udpakning fra $_POST array
    Checkboxe skal altid håndteres på en speciel måde under udpakning fra $_POST:
    if (isset ($_POST['checkboxnavn']) && $_POST['checkboxnavn'] != "")
       { $checkboxnavn = 1; }
    else
       { $checkboxnavn = 0; }




Multiple choise


En databsasetabel kan eksempelvis indeholde en record for hver dansk kommune. Et 'int'-felt i den enkelte record fortæller, hvilken region kommunen indgår i. En anden tabel indeholder identer og navne på regionerne.


I forbindelse med en søgning skal brugerne via checkbokse kunne vælge, om de vil se alle kommuner, eller kun dem i en eller nogle af regionerne.


I stedet for at skulle etablere en checkbox individuelt for hver region anvendes funktionaliteten 'multiple checkboxes' (I nogle situationer kan antallet af checkboxe endvidere være dynamisk. Den situation klares automatisk med 'multiple checkboxes').


Med multiple checkboxes etableres / vises en individuel checkbox for hver record i hjælpetabellen (her Regioner).


Det vil være typisk at anvende checkboxene i relation til hovedtabellen (her regionsfeltet i Kommuner). Koden til den del ligger dog udenfor regie af multiple checkboxes'.


Koden til anvendelse af multiple checkboxes består af 3 dele:


  • 'input type' i form
    Henter og viser checkboxene.
    <label for="checkboxe">Overskrift for cbx-gruppen:</label>
    <?php
    $query_cbx = "SELECT * FROM checkboxe";
    $result_cbx = mysqli_query($db_link, $query_cbx);
    while($row_cbx = mysqli_fetch_assoc($result_cbx))
    {
    $cbx_id = $row_cbx['cbx_id'] ;
    $cbx_titel = $row_cbx['cbx_titel'];
    echo '<input type="checkbox" name="checkboxe[]" value="' . $row_cbx['cbx_id'] . ']"
    style="display: inline; margin-right:5px" />'.$row_cbx['cbx_titel'].'<br />';
    }
    ?>
    Med SELECT hentes de relevante data (ident og navn) fra hjælpetabellen.
    For hver $row-record i WHILE-løkken etableres:
    - to variabler: $cbx_id og $cbx_title
    - knyttet til 'echo' opbygges en input-type rocord.
    De opbyggede Input type records er specielle derved at:
    - de har alle samme navn og er defineret som en array '[]'
    - ved submit vil arrayen (grundet den måde chexkboxe fungerer på) kun indeholde data for de checkboxe, brugeren har aktiveret.

  • Udpak fra $_GET eller $_POST
    Arrayen udpakkes som en normal variabel og bliver ved at være en array.
    $checkboxe = $_GET['checkboxe'];


  • På brugsstedet.
    På stedet, hvor arrayen skal bruges til at opbygge en sql WHERE:
    $string_checkboxe = implode(",", array_keys($checkboxe));
    echo $string_checkboxe;
    $where_checkboxe_in = "AND tabelfelt IN ($string_checkboxe)";
    - arrayen udpakkes til en kommasepareret liste med implode()'
    - IN medfører, at den modellerede WHERE-streng ("AND ....) etableres en gang for hvert udpakket kommasepareret element.




















x
x