23. juni 2008 - 13:41Der er
11 kommentarer og 1 løsning
checkboxe mysql
hej jeg har søgt lidt efter noget og at hente nogle data ud af en mysql db og derved krydse en checkbox af men kan ikke rigtig finde noget...
jeg er ved at lave en edit side hvor jeg har 5 checkboxe med vær deres sprog, som jo gerne skulle være checked hvis brugeren har valgt det... hvordan gør jeg så de er checked? det skal måske siges at alle mulighederne hentes fra samme celle og så bruger jeg dette til at dele det med:
I det du skriver checkboxen ud, checker du om det var valgt i databasen (kig i dit array). Hvis det var, skriver du checked="checked" inde i det <input>-tag.
I øvrigt bør du kraftigt overveje at omdesigne din database - et felt bør aldrig kunne rumme mere end en værdi. Du bør have sprogene i en tabel, og så have en ekstra tabel der knytter sprog og bruger sammen (to felter i alt, et sprog-ID og et bruger-ID). Det bliver nemlig noget rod hvis du med din nuværende struktur eks. skal finde ud af hvor mange der har valgt et givent sprog.
Uanset om det er en stor eller en lille database, så vil du drage fordel af at konvertere din struktur. Selvom MySQL har en funktion der kan hjælpe på netop komma-separerede værdier, så er det på alle måder bedre at gøre det "rigtigt" - det er mere fleksibelt, det bruger mindre diskplads, det er hurtigere for MySQL at arbejde med det, og du slipper for at skulle lave din SQL om til en meget lang og træls WHERE hvis du nogensinde får lyst til at bruge noget andet end MySQL (eks. MSSQL).
Hvis du lige nu har: <input type="checkbox" name="foo" value="1">
Så skriver du i stedet: <input type="checkbox" name="foo" value="1" <?PHP if (in_array('foo',$str1)) { echo 'checked="checked"'; }?>>
så min linie kommer til at se såden ud: <input type="checkbox" name="undertekster[]" value="eng" <?PHP if (in_array('undertekster[]',$str1)) { echo 'checked="checked"'; }?>>Engelsk
Nej - for det er jo ikke teksten "undertekster[]" du gemmer i dit array, men "eng". Derfor skal du bruge in_array('eng',$str1) (og selvfølgelig tilsvarende for de andre sprog).
Jeg gættede på at du ikke brugte den metode til at returnere et array af data - det var så forkert gættet. ^_^; (Dermed ikke sagt at der er noget i vejen med at gøre det sådan - tværtimod)
For at lave det om skal du have 2 tabeller: En sprog-tabel der indeholder to felter (et sprog-ID som primærnøgle med auto-increment, og sprognavn til navnet), og så en relationstabel til at linke sprogene til din DVD, ligeledes med to felter (her skal de være et sprog-ID og et DVD-ID, begge en del af primærnøglen).
I sprog-tabellen indsætter du alle de sprog du har med at gøre. I relationstabellen indsætter du en række pr. DVD pr. valgt sprog - så hvis du har en DVD der har 3 sprog, så er der 3 rækker med den DVD's ID. Tilsvarende, hvis der fjernes et sprog fra en DVD, sletter du den række der har den tilsvarende DVD-ID og sprog-ID.
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.