Wanneer ik een formulier gebruik, wil ik een aantal keuzes laten maken door een multi select. Enkel vraag ik mij af hoe ik dat vervolgens in de database moet opslaan. Deze informatie wil ik later weer gebruiken bij voorstellen en dergelijke. Kan iemand mij een stukje op weg helpen?
Mja, het nadeel van zo'n multiple select is dat je je selectie kwijtraakt als je niet shift-klik gebruikt, het zou dus handiger zijn als je een soort van dubbele selectbox hebt, waartussen je elementen kunt verplaatsen, eventueel met behoud van volgorde, als dat een speciale betekenis heeft.
EDIT: deze twee selectboxen tezamen (en wat JavaScript om de boel aan elkaar te lijmen) is in zekere zin opnieuw een soort van (samengesteld) formulier-element ("moveselect"). En zo kun je uit elementaire form-tags eigenlijk nog veel meer mooi spul bouwen en hergebruiken als wat exotischere -en krachtigere- formulier-elementen.
Persoonlijk zou ik liever voor checkboxes gaan, en eventueel met een overflow in CSS de boel scrollbaar maken. Nadeel is alleen dat je niet 'drag and select' kan doen.
Heren, de vraag is volgens mij: "Hoe sla ik de gemaakte keuzes op in de database".
En Thomas, je kunt de shifttoets ook vermijden door gewoon checkboxen te gebruiken.
On topic:
Bij een multiple select zul je in elk geval per keuze een Boolean nodig hebben. Dit wordt in sql ook wel aangeduid met een type INT(1). Deze kan twee waardes hebben: ja (1) of nee (0). Je zou ook kunnen zeggen aan (1) of uit (0).
Een beetje afhankelijk van de situatie kun je de database op twee manieren inrichten. Indien er een VAST aantal keuzes zijn die NOOIT zullen wijzigen kan je in een tabel uitbreiden met een aantal kolommen van het type INT(1). Elke kolom registreert dan een keuze. Maar je kan ook de stelling aannemen dat het aantal keuzes dat gebruikers kunnen maken kan verschillen. In dat geval zul een een aparte tabel moeten inrichten om de keuzes op te slaan en tevens zul je een koppeltabel nodig hebben. Hier een voorbeeld:
tabel choices:
- id
- description
tabel users:
- id
- name
- email
tabel users_choices
- user_id
- choice_id
In die laatste tabel komt te staan welke user welke keuze geselecteerd heeft. (Enkel die keuzes die met een 'ja' beantwoordt worden worden opgeslagen. Keuzes met een 'nee' worden niet opgeslagen).
Je voert ook nergens een query uit :). Dan bevat $checkbox een rij van komma-gescheiden waarden zonder quotes, en $query bevat per value-paar twee argumenten, namelijk een "id" en "orange", wat dat ook moge zijn. Als je $query had ge-echo'd dan had je dit kunnen zien. En je doet er verstandig aan om de waarden te escapen.
De vraag is, wat probeer je waaraan te koppelen? En waar komt die informatie vandaan.
Verder is het op lijn 11 een beetje onnodig een lege string te koppelen aan een variabele.
Dat is zo'n beetje als een leeg melkpak weer in de koelkast te zetten voor diegene die expliciet geen melk willen. :-P
Niet dat het kwaad kan, maar het staat een beetje onopgeruimd ;-)