Avatar billede Klaphattens Novice
28. september 2012 - 14:40 Der er 6 kommentarer og
1 løsning

Hent data ud fra Checkbokse

Jeg vil gerne lave en side der udskriver en liste over brugere.
det i sig selv har jeg lavet og var jo ikke svært.

Jeg har ovenover listen lavet 10 checkbokse samt en knap. hver checkboks har et postnummer som data.

Hvis der ikke fra start er sat nogle hak i checkboksen, så vises hele listen.

Men hvis jeg trykker checkboks "9000" og checkboks "8000" af. og trykker på knappen, så kommer vises der kun bruger fra de to postnummer.

Hvordan gør man det nemmest.

Jeg kan næsten regne ud at for hver checkboks der bliver markeret skal jeg have indsat "AND postnr=XXXX" i slutningen af min WHERE del. ved bare ikke hvordan man praktisk kan gøre det.
Avatar billede michael_stim Ekspert
28. september 2012 - 14:48 #1
1. Du lægger dine værdier i et array
2. Du imploder dit array i en IN

$array = array('9000', '8000', '7000');
$comma_separated = implode(",", $array);

SELECT navn FROM tabel WHERE postnummer IN(".$comma_separated.")..

Noget á la det.
Avatar billede olebole Juniormester
28. september 2012 - 15:55 #2
<ole>

- og den tidssvarende og sikrere version:

<?php
$db = new mysqli('SERVER', 'BRUGER_NAVN', 'PASSWORD', 'TABEL_NAVN');

$stmt = $db->prepare('SELECT navn FROM tabel WHERE postnummer=?');
$stmt->bind_param('i', $chbox);
$stmt->bind_result($res);

$arrRows = array();
foreach ($_GET['my_chbox'] as $chbox) {
    $stmt->execute();
    while ($stmt->fetch()) {
        $arrRows[] = $res;
    }
}

var_dump($arrRows);
?>

/mvh
</bole>
Avatar billede michael_stim Ekspert
28. september 2012 - 20:21 #3
#2
Korrekt. Fy, Michael.
Avatar billede olebole Juniormester
28. september 2012 - 21:02 #4
Hehe ... vil man bruge IN, kan det kun lade sig gøre, hvis man på forhånd kender antallet af elementer i listen. Ellers kan argumenterne ikke efterfølgende bindes.

Umiddelbart kan #2 synes mindre effektiv, men her skal man tænke på, at det, der tager tid, er selve initialiseringen af funktionen nede på databasen. Når først et SQL-udtryk er prepared, så tager det 'ingen tid' at eksekvere udtrykket med nye argumenter.

Skulle der endelig være en marginal forskel i performance, må det være prisen for en væsentligt forbedret sikkerhed  *o)
Avatar billede Klaphattens Novice
11. november 2012 - 20:29 #5
Havde glemt at sige tak og lukke dette spørgsmål.

Ole, er det ikke noget med du ikke samler point?
Avatar billede olebole Juniormester
12. november 2012 - 14:55 #6
Selvtak - og du har helt ret, jeg samler ikke. Det har Michael vist heller ikke gjort det seneste årstid, så jeg tror bare, du skal lægge et svar selv og acceptere det  =)
Avatar billede Klaphattens Novice
12. januar 2013 - 17:17 #7
lukker
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