# Een formulier bouwen

Op het tabblad **Bouwen** van de formuliereditor geef je de vragen vorm. Het heeft drie delen: de lijst **Stappen** en het palet **Veld toevoegen** links, de actieve stap in het midden, en de instellingen van de geselecteerde stap of vraag rechts. Wijzigingen zijn een concept tot je **Opslaan** en **Publiceren** gebruikt (zie [Opslaan, publiceren en activeren](/nl/docs/forms/index#opslaan-publiceren-en-activeren)).

## Stappen

Een formulier bestaat uit één of meer stappen; een bezoeker ziet één stap tegelijk en gaat verder met **Volgende**. Een contactformulier heeft meestal één stap, een offerteaanvraag meerdere.

- **Stap toevoegen** voegt een stap aan het eind toe. Een formulier heeft maximaal 20 stappen.
- Sleep een stap aan zijn greep, of gebruik de pijltjes omhoog en omlaag, om de volgorde te wijzigen.
- Klik op een stap in de lijst om hem in het midden te tonen. Elke stap toont hoeveel velden hij heeft, en een vertakkingsicoon als hij alleen bij bepaalde antwoorden wordt getoond.
- Klik op de titel van de stap boven de vragen om rechts de stapinstellingen te openen: **Titel van de stap**, **Logica** (zie [Vragen alleen bij bepaalde antwoorden tonen](/nl/docs/forms/logic)) en, onder **Geavanceerd**, de **Sleutel** van de stap ("Herkent de stap in regels en in de API.").
- **Stap verwijderen** verwijdert de stap en de vragen erin nadat je hebt bevestigd. Een formulier houdt altijd minstens één stap. Op je site verandert niets tot je opslaat en publiceert.

## Een vraag toevoegen

Klik op een veldtype in **Veld toevoegen** om het aan het eind van de actieve stap toe te voegen. Een formulier heeft maximaal 150 invoervelden (**Kop** en **Alinea** tellen niet mee); het palet toont hoeveel je er hebt gebruikt.

| Groep | Veldtype | Wat de bezoeker doet |
| --- | --- | --- |
| Tekst en getallen | **Korte tekst** | Typt één regel (maximaal 255 tekens). |
| | **Lange tekst** | Typt een langer bericht (maximaal 10000 tekens). |
| | **Getal** | Typt een getal. |
| | **E-mail** | Typt een e-mailadres. De eerste E-mail-vraag bepaalt waar de bevestigingsmail heen gaat. |
| | **Telefoon** | Typt een telefoonnummer. |
| | **Datum** | Kiest een datum. |
| | **Link** | Typt een webadres. |
| Keuzes | **Keuzelijst** | Kiest één optie uit een lijst. Opties staan er zoals je ze schrijft, in elke taal. |
| | **Keuzekaarten** | Kiest één optie, of meerdere als **Meerdere antwoorden toestaan** aan staat. Opties kunnen een omschrijving en een icoon hebben. |
| | **Toestemming** | Vinkt een vakje aan, bijvoorbeeld om je privacybeleid te accepteren. |
| Bestanden en gegevens | **Adres** | Typt een postcode en huisnummer; straat en plaats kunnen worden aangevuld (zie [Adresvragen](#adresvragen)). |
| | **Bestand uploaden** | Voegt afbeeldingen of pdf's toe (zie [Bestanden uploaden](#bestanden-uploaden)). |
| | **Verborgen** | Niets: de waarde komt uit de pagina-URL of van je site en wordt met de inzending opgeslagen. |
| Weergave | **Kop** | Niets: toont een kop. |
| | **Alinea** | Niets: toont een stuk tekst. |

Klik in het midden op een vraag om hem te selecteren en rechts te bewerken. Sleep vragen aan hun greep, of gebruik de pijltjes, om ze binnen de stap te verplaatsen. Elke vraag heeft ook **Veld dupliceren** en **Veld verwijderen**.

Het midden toont elke vraag ongeveer zoals de bezoeker hem ziet, met een paar hints: **Uit URL** bij vragen die vanuit het paginaadres kunnen worden ingevuld, "Getoond als ..." bij vragen met een regel, en bijvoorbeeld "Geen EN-tekst" als een tekst ontbreekt in de taal die je bekijkt.

## Instellingen van een vraag

De instellingen rechts zijn in secties gegroepeerd. Met meer dan één contenttaal schrijf je met de taaltabbladen bovenaan elke tekst per taal; de standaardtaal heeft een tekst nodig.

### Inhoud

- **Vraag**: de tekst van de vraag. Bij een **Kop** is het de **Kop**, bij een **Alinea** de **Tekst**, bij **Toestemming** de **Toestemmingstekst** en bij **Verborgen** de **Naam in de inbox**.
- **Hulptekst** en **Placeholder** voor de vragen die een bezoeker beantwoordt.

Een **Toestemmingstekst** mag één link bevatten, geschreven als `[privacybeleid](https://example.com/privacy)`. De link moet met `https://` beginnen.

### Antwoord

- **Verplicht**: de bezoeker moet antwoorden voordat hij verder kan. Bij **Toestemming** betekent het "Het vakje moet aangevinkt zijn om het formulier te versturen." Een verplichte vraag die door een regel verborgen is, is nooit verplicht.
- **Opties** voor **Keuzelijst** en **Keuzekaarten** (zie hieronder).
- **Meerdere antwoorden toestaan** voor **Keuzekaarten**, met **Minimaal** en **Maximaal** om te beperken hoeveel de bezoeker mag kiezen.
- Bij **Adres**: **Land**, **Adres opzoeken** en **Werkgebied** (zie [Adresvragen](#adresvragen)).
- Bij **Bestand uploaden**: **Toegestane bestanden** (**Afbeeldingen**, **PDF** of allebei), **Max. bestanden** (1 tot 10) en **Max. MB per bestand** (1 tot 20).
- Bij **Verborgen**: **Waarde komt uit** **De pagina-URL** (ingevuld vanuit `?key=` in het adres van de pagina met het formulier, waarbij `key` de sleutel van de vraag is) of **Je site** (je site geeft de waarde mee wanneer het formulier wordt getoond).

### Logica

Wie deze vraag ziet. Zie [Vragen alleen bij bepaalde antwoorden tonen](/nl/docs/forms/logic).

### Geavanceerd

- **Sleutel**: "Het antwoord wordt onder deze sleutel opgeslagen en regels verwijzen ernaar." Kleine letters, cijfers en underscores, te beginnen met een letter, maximaal 50 tekens, en uniek binnen het formulier. Als je een sleutel hernoemt, worden de regels die hem gebruiken bijgewerkt.
- **Invullen vanuit de pagina-URL**: een link met `?key=…` vult dit antwoord in, bijvoorbeeld `?email=ada@example.com` voor de vraag met sleutel `email`. De bezoeker kan het nog wijzigen.

Geef de vraag naar de naam van de bezoeker de sleutel `name`: de inbox, de meldingsmail en de plaatshouder `{name}` lezen de naam uit die sleutel. Het e-mailadres en telefoonnummer in de inbox komen uit de eerste **E-mail**- en de eerste **Telefoon**-vraag.

## Opties

Opties van **Keuzekaarten** hebben elk een label, een regel **Omschrijving (optioneel)**, een icoon en een **Waarde**. De waarde wordt opgeslagen en regels vergelijken ermee; het label is wat de bezoeker leest en kan per taal verschillen. **Optie toevoegen** voegt er een toe (maximaal 30); gebruik de pijltjes om de volgorde te wijzigen en het kruisje om er een te verwijderen. Klik op het icoonvakje om een icoon te kiezen: **Iconen zoeken**, kies er een, of **Geen icoon**.

Verwijder je een optie die een regel gebruikt, dan worden de voorwaarden die haar gebruikten ook verwijderd, en een melding vertelt je hoeveel. Hernoem je de waarde van een optie, dan worden de regels die ermee vergelijken bijgewerkt.

Opties van een **Keuzelijst** zijn gewone teksten, in elke taal hetzelfde. Typ er een in **Nieuwe optie** om hem toe te voegen (maximaal 50).

### Opties uit een collectie

**Keuzekaarten** kunnen hun opties uit een collectie halen (een objecttype onder **Objecten**) in plaats van uit een lijst die je zelf typt. Schakel onder **Opties** van **Handmatig** naar **Uit een collectie** en kies dan:

- **Collectie**: **Kies een collectie** (zoek met **Zoek een collectie**). Zonder collecties staat er "Je hebt nog geen collecties. Maak er een aan onder Objecten."
- **Label**: het tekstveld dat als optietekst wordt getoond (**Kies een veld**). Een collectie zonder tekstveld toont "Deze collectie heeft geen tekstveld om als label te gebruiken."
- **Omschrijving**: een tekstveld voor de tweede regel, of **Geen**.
- **Sorteren op**: een getalveld, laagste eerst en items zonder getal als laatste, of **Aanmaakdatum**.
- **Max. opties**: hoeveel opties worden aangeboden, 1 tot 100 (standaard 30).

Onder de instellingen zie je hoeveel items de collectie toont, bijvoorbeeld "Toont 12 gepubliceerde items.", of "Sla op om de items van deze collectie te laden." zolang je niet hebt opgeslagen. Alleen gepubliceerde items verschijnen: concepten en ingeplande items blijven buiten beschouwing. De lijst volgt de collectie, dus je hoeft het formulier niet opnieuw te publiceren als een item wordt toegevoegd, hernoemd of gedepubliceerd; wijzigingen in deze instellingen vragen zoals altijd een nieuwe publicatie. In het midden staat onder de vraag "Opties uit de collectie “{type}”".

"Elk antwoord wordt opgeslagen als de slug van het item, zodat regels blijven werken als een titel verandert." Bij een collectie waarvan de items geen adres hebben wordt in plaats daarvan het id van het item opgeslagen. Met **Meerdere antwoorden toestaan** kunnen **Minstens** en **Hoogstens** tot **Max. opties** gaan. Een regel die nog vergelijkt met een item dat niet meer bestaat, toont "“{value}” is geen optie meer. Kies een ander antwoord."

## Adresvragen

Een vraag **Adres** vraagt in één blok om **Postcode**, **Huisnummer**, **Toevoeging**, **Straat** en **Plaats**, bijvoorbeeld voor een offerteaanvraag of een levering. Postcode, huisnummer, straat en plaats zijn verplicht als de vraag verplicht is. Onder **Antwoord** stel je in:

- **Land**: **Kies een land** (zoek met **Zoek een land**). Het postcodeformaat volgt het land. Nieuwe adresvragen beginnen met Nederland.
- **Adres opzoeken**: "Bezoekers vullen postcode en huisnummer in, straat en plaats worden aangevuld." De bezoeker ziet "Adres opzoeken…" en kan het resultaat nog aanpassen. Opzoeken kan alleen voor Nederland ("Adres opzoeken kan alleen voor Nederland."); voor andere landen blijft de schakelaar uit. Als er niets wordt gevonden of de adresdienst niet bereikbaar is, ziet de bezoeker "Geen adres gevonden. Vul straat en plaats zelf in." of "Het adres kon niet worden opgezocht. Vul straat en plaats zelf in." en typt ze zelf.
- **Werkgebied**: "Controleer de afstand van een startpunt tot het adres." Dit toont meer instellingen:
  - **Startpunt**: klik op **Bedrijfsadres gebruiken** om het adres uit **Instellingen** → **Bedrijf** te nemen ("Vul eerst een postcode en huisnummer in onder Instellingen > Bedrijf." als het er geen heeft), of zoek een ander adres op onder "Of zoek een ander adres op:" door een **Postcode** en **Huisnummer** te typen en op **Opzoeken** te klikken ("Geen adres gevonden bij deze postcode en dit huisnummer.").
  - **Straal (km)**: hoe ver een adres van het startpunt mag liggen.
  - **Buiten het gebied**: **Een melding tonen** ("De bezoeker ziet de melding en kan het formulier toch versturen.") of **Verzenden blokkeren** ("De bezoeker ziet de melding en kan het formulier met dit adres niet versturen."). Blokkeren werkt alleen met **Adres opzoeken** aan ("Blokkeren kan alleen met adres opzoeken, dat de locatie controleert."), omdat alleen een opgezocht adres gecontroleerde coördinaten heeft. Een adres dat niet kan worden gevonden of gecontroleerd wordt nooit geblokkeerd.
  - **Melding buiten het gebied**: de tekst die de bezoeker ziet, per taal. Verplicht.

De afstand is hemelsbreed, niet de rijafstand. In een regel kan een vraag Adres alleen worden getest met **is ingevuld** of **is niet ingevuld**. In de [Inbox](/nl/docs/forms/inbox#een-inzending) staat het adres op één regel, met de afstand als het buiten het gebied ligt.

## Bestanden uploaden

Met een vraag **Bestand uploaden** voegt de bezoeker bestanden toe, bijvoorbeeld foto's van een klus of een pdf met een briefing. Kies onder **Antwoord**:

- **Toegestane bestanden**: **Afbeeldingen** (JPEG, PNG, WebP en HEIC, het formaat van iPhone-foto's), **PDF**, of allebei.
- **Max. bestanden**: hoeveel bestanden de bezoeker bij deze vraag mag toevoegen, 1 tot 10.
- **Max. MB per bestand**: 1 tot 20.

In het midden staan deze limieten onder de vraag, bijvoorbeeld "Afbeeldingen · maximaal 3 bestanden, 10 MB per stuk". Zet **Verplicht** aan om minstens één bestand te vereisen.

Borkol controleert elk bestand op de inhoud, niet op de naam: een bestand dat niet echt een afbeelding of pdf is, wordt geweigerd, en een te groot bestand ook. Een bezoeker kan maximaal 30 bestanden per formulier per uur uploaden. De bestanden komen met de inzending binnen in je [Inbox](/nl/docs/forms/inbox#bestanden). In **Voorbeeld** kun je bestanden kiezen, maar er wordt niets geüpload. Je developer vindt de upload-call op het tabblad **Gebruiken op je site**. Zie [Spambescherming en bestanden](/nl/docs/forms/spam-and-files#bestanden) voor hoe bestanden worden opgeslagen en wanneer ze worden verwijderd.
