01Hij is ook zonder muis te bedienen
De sleep-en-neerzetbouwer heeft een volledig toetsenbordequivalent: elk veld kun je alleen met het toetsenbord toevoegen, verplaatsen en verwijderen. Een bouwer die uitsluitend op slepen reageert, sluit de mensen buiten die niet kunnen slepen.
02Bijna dertig veldtypen
Tekst, e-mail, telefoon, URL, getal, datum, tijd, keuzelijst, keuzerondje, selectievakje, beoordeling, schuifregelaar, kleur, bestandsupload, naam, adres, rangschikking en pagina-einde: het gewone formulier is er al mee gedekt.
03Kolommen die de leesvolgorde niet door de war gooien
Een veld dat in een kolom staat, wordt nog steeds in veldvolgorde voorgelezen, zodat iemand met een schermlezer en een ziende bezoeker hetzelfde formulier in dezelfde volgorde tegenkomen.
04Voorwaarden worden op de server beslist
Geneste EN/OF-groepen met veertien operatoren, die bij het versturen opnieuw worden geëvalueerd. Een in de browser verborgen veld valt er niet tussen te schuiven door de pagina te bewerken, en de regels blijven gelden met JavaScript uit.
05Toegangsregels waar de browser niet mee in discussie gaat
Openen en sluiten op de kalender, het aantal inzendingen begrenzen, aanmelden of een rol verplichten, of een wachtwoord instellen. Een gesloten formulier weigert een rechtstreekse inzending op de server, niet door zijn knop te verbergen.
06Spam wordt gemarkeerd, niet verwijderd
Een honeypot en een tijdval staan standaard aan en zitten niemand in de weg; reCAPTCHA v2/v3, hCaptcha, Turnstile, Akismet en blokkeerlijsten op trefwoord, IP en e-mailadres zijn optioneel. Wat als spam wordt beoordeeld, wordt gemarkeerd en bewaard, want een vals alarm mag je geen klant kosten.
07Geüploade bestanden staan niet in de webroot
Ze worden daarbuiten weggeschreven, in een map die niemand kan raden, en gecontroleerd op wat het bestand bevat in plaats van hoe het heet. Ze worden alleen uitgeleverd via een tijdelijke link die aan één persoon is gekoppeld.
08Meldingen die je kunt controleren
Meerdere per formulier, ontvangers gestuurd door een veldwaarde, een automatisch antwoord aan de afzender en een afleverlog van wat is verstuurd, wat is mislukt en waarom, met opnieuw versturen voor wat is mislukt.