Multiple Select naar Database
bijvoorbeeld:
<select multiple="multiple">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
Hoe zorg ik ervoor dat ik meerdere waarden bijvoorbeeld 1 en 3 naar de database stuur en ze ook weer ophaal? Ik weet zelf niet waar ik moet beginnen.
Alvast bedankt
Maak gebruik van checkboxes ipv een select.
Met multiple houdt je crtl in zo selecteer je meerdere waarden met de select.
Om te beginnen, de name van de select eindig je met [], dan wordt de $_POST variabele een array.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Wat ben je ermee van plan? Geef eens een voorbeeld van een sql-string, dat we weten waar je naartoe wil
Gewijzigd op 30/08/2012 12:43:41 door Kris Peeters
Maar om antwoord te geven op je vraag.
Code (php)
1
2
3
4
5
2
3
4
5
<select name="geef_het_maar_een_naam[]" multiple="multiple">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
$_POST['geef_het_maar_een_naam'] is nu een array met daarin al je gekozen opties.
Ik neem aan dat je weet wat een array is?
Edit: Te laat.
Gewijzigd op 30/08/2012 12:44:39 door - Mark -
Nee, maar ... je moet inderdaad wel denken aan de gebruiker. Ik denk dat veel gebruikers niet spontaan weten hoe ze met een multiple select moeten omgaan.
Checkboxes komen sowieso meer natuurlijk over.
Je zal zelf moeten zien of het opportuun is.
@Mark checkboxes vind ik ook mooier maar het is een lijst van 100+ en ja ik weet wat een array is.
Of je verdeeld de checkboxen over meerdere kolommen.
Je hebt gelijk maar dan dezelfde vraag hoe zet ik meerdere waarden in 1 veld in de database?
Anyway.
Code (php)
EDIT: Teveel copy and paste, foutje bij de explode.
Gewijzigd op 30/08/2012 13:08:08 door - Mark -
SQL statement om meerdere waardes in te voeren:
Code (php)
1
2
2
INSERT INTO table_name(column_name)
VALUES('something1'), ('something2'), ('something3'), ('something4');
VALUES('something1'), ('something2'), ('something3'), ('something4');
Mag je zelf proberen dit statement in 1 keer met een implode van je array te maken ;-)
P.S. zo zet je dus wel in hetzelfde veld, maar wel in verschillende rijen!
Gewijzigd op 30/08/2012 13:10:09 door Erwin H
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// let er dus op; enkel de waarden die geselecteerd zijn, worden naar de server gestuurd.
// Als er niets geselecteerd is, komt $_POST['mijn_veld'] niet voor in dit script
if (!empty($_POST['mijn_veld'])) {
$sql = "INSERT INTO mijn_tabel (mijn_veld) VALUES ";
foreach ($_POST['mijn_veld'] as $key => $item) {
$sql .= ($key > 0 ? ", " : ""); // dit zet een komma tussen de items
$sql .= "('" . mysql_real_escape_string($item) . "')";
}
echo $sql;
}
}
echo '
<form action="" method="post">
<select multiple="multiple" name="mijn_veld[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input value="GO" type="submit">
</form>
';
?>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// let er dus op; enkel de waarden die geselecteerd zijn, worden naar de server gestuurd.
// Als er niets geselecteerd is, komt $_POST['mijn_veld'] niet voor in dit script
if (!empty($_POST['mijn_veld'])) {
$sql = "INSERT INTO mijn_tabel (mijn_veld) VALUES ";
foreach ($_POST['mijn_veld'] as $key => $item) {
$sql .= ($key > 0 ? ", " : ""); // dit zet een komma tussen de items
$sql .= "('" . mysql_real_escape_string($item) . "')";
}
echo $sql;
}
}
echo '
<form action="" method="post">
<select multiple="multiple" name="mijn_veld[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input value="GO" type="submit">
</form>
';
?>
Bedankt allemaal ik kom er zo wel uit.
Er is geen enkele reden waarom je de value van een checkbox of select minder goed zou beschermen als die van andere input elementen.
Gewijzigd op 30/08/2012 13:21:48 door Kris Peeters
Overigens, als het integers zijn zoals in het voorbeeld dan is het nog makkelijker, dan heb je dat hele mysql_real_escape_string niet eens nodig!
En dan voor de beste optie van allemaal: werk met prepared statements in mysqli of pdo. Helemaal omdat je nu meerdere waardes wil invoeren achter elkaar. Precies waar prepared statements voor gemaakt zijn.
Erwin H op 30/08/2012 13:28:55:
... Tuurlijk kan je het ook met implode beschermen. ...
Ja, het kan. Maar het is niet wat gebeurd is.
Elke keer iemand iets post in de trend
wordt er onmiddellijk moord en brand geroepen. LEK! injection! Pas op! ...
maar exact het zelfde fenomeen wordt telkens door de vingers gezien wanneer de $_POST-variabele een array is.
Ik zie niet in waarom.
Gewijzigd op 30/08/2012 13:51:01 door Kris Peeters
Iets wat je met een <select> wel hebt (selecteer maar eens 30 willekeurige rijen en klik naast de <select>... En probeer dan je selectie eens te wijzigen. Dat gaat met checkboxes veel makkelijker.
En met de komst van CSS3 zijn kolommen heel eenvoudig te gebruiken.
Eddy Erkelens op 30/08/2012 15:19:03:
.. ben je niet je selectie kwijt.
Iets wat je met een <select> wel hebt (selecteer maar eens 30 willekeurige rijen en klik naast de <select>... En probeer dan je selectie eens te wijzigen.
Iets wat je met een <select> wel hebt (selecteer maar eens 30 willekeurige rijen en klik naast de <select>... En probeer dan je selectie eens te wijzigen.
Hier even snel getest. Geen problemen mee.
Gewijzigd op 30/08/2012 15:30:36 door - SanThe -
Dus negeer mijn voorgaande bericht aub.