Meerdere keuzes opslaan in database
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?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<select multiple name="cars[]">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
Vervolgens kan je met foreach je $_POST['cars']-array doorlopen, ervanuitgaande dat je POST gebruikt.
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.
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 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.
Gewijzigd op 13/02/2018 23:45:53 door Thomas van den Heuvel
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
tabel choices:
- id
- description
tabel users:
- id
- name
- email
tabel users_choices
- user_id
- choice_id
- id
- description
tabel users:
- id
- name
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).
Notice: Array to string conversion in C:\xampp\htdocs\development\index.php on line 23
Wat doe ik hier nu fout?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<html>
<body>
<form method="post" action="index.php">
Flights on: <br/>
<input type="checkbox" name="Days[]" value="Daily">Daily<br>
<input type="checkbox" name="Days[]" value="Sunday">Sunday<br>
<input type="checkbox" name="Days[]" value="Monday">Monday<br>
<input type="checkbox" name="Days[]" value="Tuesday">Tuesday <br>
<input type="checkbox" name="Days[]" value="Wednesday">Wednesday<br>
<input type="checkbox" name="Days[]" value="Thursday">Thursday <br>
<input type="checkbox" name="Days[]" value="Friday">Friday<br>
<input type="checkbox" name="Days[]" value="Saturday">Saturday <br>
<input type="submit" name="submit" value="submit">
</form>
<?php
include ("config.php");
if(isset($_POST['submit'])) {
$checkBox = $_POST['Days'];
$query = "INSERT INTO check1 (orange) VALUES ('" . $checkBox . "')";
}
?>
</body>
</html>
<body>
<form method="post" action="index.php">
Flights on: <br/>
<input type="checkbox" name="Days[]" value="Daily">Daily<br>
<input type="checkbox" name="Days[]" value="Sunday">Sunday<br>
<input type="checkbox" name="Days[]" value="Monday">Monday<br>
<input type="checkbox" name="Days[]" value="Tuesday">Tuesday <br>
<input type="checkbox" name="Days[]" value="Wednesday">Wednesday<br>
<input type="checkbox" name="Days[]" value="Thursday">Thursday <br>
<input type="checkbox" name="Days[]" value="Friday">Friday<br>
<input type="checkbox" name="Days[]" value="Saturday">Saturday <br>
<input type="submit" name="submit" value="submit">
</form>
<?php
include ("config.php");
if(isset($_POST['submit'])) {
$checkBox = $_POST['Days'];
$query = "INSERT INTO check1 (orange) VALUES ('" . $checkBox . "')";
}
?>
</body>
</html>
Je zult deze bijvoorbeeld met implode() tot een string met een hele rits waardes kunnen omzetten.
Maar alsnog snap ik in je voorbeeld niet wat een maand met een sinaasappel te maken heeft.
Toevoeging op 17/02/2018 22:39:19:
Heb er nu dit van gemaakt. Krijg geen foutmeldingen meer, maar hij voegt ook niet toe aan de database.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
De vraag is, wat probeer je waaraan te koppelen? En waar komt die informatie vandaan.
Allemaal bedankt voor de hulp. Dit werkt inmiddels.
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 ;-)
@Zwollie Misschien wil je ook nog even vermelden hoe je het opgelost hebt, zodat anderen hier ook iets van op kunnen steken.