Meerdere keuzes opslaan in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bollie Zwollie

Bollie Zwollie

13/02/2018 21:30:02
Quote Anchor link
Goedenavond,

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?
 
PHP hulp

PHP hulp

22/11/2024 07:11:13
 
- Ariën  -
Beheerder

- Ariën -

13/02/2018 22:24:40
Quote Anchor link
Je moet er een array van maken door je name de open- en sluitbrackets mee te geven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


Vervolgens kan je met foreach je $_POST['cars']-array doorlopen, ervanuitgaande dat je POST gebruikt.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/02/2018 23:40:29
Quote Anchor link
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.
Gewijzigd op 13/02/2018 23:45:53 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

13/02/2018 23:51:24
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

14/02/2018 00:33:03
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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).
 
Bollie Zwollie

Bollie Zwollie

17/02/2018 21:56:19
Quote Anchor link
Ik heb nu dit gemaakt, maar krijg nu telkens de fout:

Notice: Array to string conversion in C:\xampp\htdocs\development\index.php on line 23

Wat doe ik hier nu fout?



Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<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>
 
- Ariën  -
Beheerder

- Ariën -

17/02/2018 22:10:57
Quote Anchor link
Een array is een container met waardes. Deze kan je onmogelijk als enkele waarde in een veld aanbieden.

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.
 
Bollie Zwollie

Bollie Zwollie

17/02/2018 22:18:11
Quote Anchor link
Dat komt omdat ik meerdere codes samen gevoegd heb. Ik probeer het te leren :)

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

include ("config.php");
if(isset($_POST['submit'])) {
$checkBox =  implode(",", $_POST['Days']);


      $query = "INSERT INTO check1 (id, orange) VALUES ('" . $checkBox . "')";
      echo "" . $checkBox . "";
    }

else {
    echo "ERROR";
}


?>
 
Thomas van den Heuvel

Thomas van den Heuvel

17/02/2018 23:12:24
Quote Anchor link
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.
 
Bollie Zwollie

Bollie Zwollie

17/02/2018 23:26:57
Quote Anchor link
Allemaal bedankt voor de hulp. Dit werkt inmiddels.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2018 23:33:18
Quote Anchor link
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 ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

18/02/2018 15:36:55
Quote Anchor link
@Zwollie Misschien wil je ook nog even vermelden hoe je het opgelost hebt, zodat anderen hier ook iets van op kunnen steken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.