OOP form

Door Jan Koehoorn, 14 jaar geleden, 6.658x bekeken

Ook zo moe van elke keer maar weer die formulieren in elkaar sleutelen? En niet alleen dat; je moet ook nog zorgen dat de verplichte velden gecontroleerd worden (met een foutmelding naar de user) en dat alle waarden onthouden worden als het formulier nog een keer getoond moet worden voor correctie.

Met dit script kun je complete en uitgebreide formulieren genereren aan de hand van 1 multi-array. Je kunt verplichte velden opgeven. Als de user vergeet een verplicht veld in te vullen krijgt hij een foutmelding. De waardes van alle tekstvelden, radio's checkboxen, selects en textareas worden onthouden.

Er zit ook een check op of er niet met het formulier geklooid is door middel van JavaScripts en (bijvoorbeeld) de GreaseMonkey extensie. Deze check is niet helemaal waterdicht, dus daar is nog uitbreiding mogelijk.

Mogelijke uitbreiding: je zou regexen kunnen meegeven als extra argument aan de multi-array, zodat niet alleen gecontroleerd wordt of een veld wel is ingevuld, maar ook of het correct is ingevuld.

Voorbeeld: http://www.jankoehoorn.nl/oopform.php

Gesponsorde koppelingen

PHP script bestanden

  1. oop-form

 

Er zijn 15 reacties op 'Oop form'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Han eev
Han eev
14 jaar geleden
 
0 +1 -0 -1
Bedankt! Ik denk dat ik hier wel wat aan ga hebben!
Jan Koehoorn
Jan Koehoorn
14 jaar geleden
 
0 +1 -0 -1
Zo, DAT is snel ;-)
- -
- -
14 jaar geleden
 
0 +1 -0 -1
Misschien een maxlength toevoegen? En als er maar één error is, er geen lijst van maken.
Jan Koehoorn
Jan Koehoorn
14 jaar geleden
 
0 +1 -0 -1
@ Herjan: ik vind zo'n lijst met 1 item niet zo erg. Maxlength is inderdaad wel een optie ja. Je multi-array wordt dan wel een beetje onoverzichtelijk als er steeds meer argumenten bijkomen. Dan zou ik bij versie 2 van dit script meer in de richting gaan denken van classes voor elk type formelement.
Dutch Caffeine
Dutch Caffeine
14 jaar geleden
 
0 +1 -0 -1
NICE.

Ik ga morgen of maandag er even verder naar kijken, heb nu niet zo veel tijd en wil nog even aan men hobby werken (sa:mp).

Even snel er door heen gekeken ziet hete er aardig uit :)
Klaasjan Boven
Klaasjan Boven
14 jaar geleden
 
0 +1 -0 -1
Maxlength toevoegen is imo zinloos omdat als ik wil ik die toch zo uitschakel. Je kan beter met strlen() testen of iets te lang is.

Jan het ziet er voor de rest prima uit
Dutch Caffeine
Dutch Caffeine
14 jaar geleden
 
0 +1 -0 -1
Klaas, Maxlength is zeer handig. Waarom:

Als ik op een site kom en moet een formulier in vullen en er staat enkel bij "Maximaal aantal tekens zijn 60" uhm leuk en aardig maar ik ga men tekens echt niet tellen, zet de webmaster nou een maxlength er bij dan wordt het veel leuker want dan zie je wanneer je tot het einde ben. Waar of niet?

En dat jij nou die weg gaat halen Waarom? is het dan zo handig, is het zo leuk. uhm nee denk het niet, er is geen nut voor. Toch?

Maxlength is leuk voor de bezoeker, en strlen belangrijk voor de webmaster.

Dus zet maxlength er bij ik vind het altijd handig :)
PHP Newbie
PHP Newbie
14 jaar geleden
 
0 +1 -0 -1
Alleen een strlen() vind ik niet zo'n goed idee. Een gebruik kan intikken wat hij wil, en vervolgens krijgt hij de melding dat de string te lang is...

@Jan,

Ziet er goed uit, zoals ik al in het topic zei, en "mijn" bug is nog steeds niet opgelost?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
...

    [geslacht] => Array
        (
            [1] => man
            [2] => vrouw
            [3] => weetniet
        )

...
  


Misschien moet je toch zelf even die regex functie erin bouwen, en daar één voorbeeldje van geven (Bij een postcode, daar heb je ondertussen wel een goede regex voor n.a.v. je vorige script.
Jelmer -
Jelmer -
14 jaar geleden
 
0 +1 -0 -1
Je mist nog de htmlentities($this->value, ENT_QUOTES) voor je velden. Hierdoor kan ik bijvoorbeeld al in je voorbeeld geen aanhalingstekens gebruiken.

Kleinigheidjes voor een eventuele update:
- Klassen extenden voor functionaliteit is over het algemeen een Bad Thing. Ik zou gaan voor compositie (instantie van klasse met de functionaliteit, je errorhandler-achtig-iets hier, binnen je klasse gebruiken)
- Waarom sla je je formulier op in $this->html, en niet gewoon in een $html? Je doet er verder niet echt iets meer mee, behalve teruggeven.
- en inderdaad, zoals je zelf al aangaf, het is waarschijnlijk handiger en overzichtelijker om aparte (sub)klassen voor de typen elementen te gebruiken.
Pieter van Linschoten
Pieter van Linschoten
14 jaar geleden
 
0 +1 -0 -1
Superhandig :)

In het voorbeeld zou ik zelf de voorwaarden een target='_blank' o.i.d. meegeven.
Marvin S
Marvin S
14 jaar geleden
 
0 +1 -0 -1
Beste Jan,

Dit is een zeer makkelijk script en zeker bruikbaar voor mijn huidige project aangezien ik met 'random' formulieren te maken heb. Elk formulier kan er anders uit gaan zien afhankelijk van de gebruikersinput dus bij deze bedankt (2 maanden te laat:P).

Ik liep tegen het volgende aan.
in class FormElement gebruik je deze constructor:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
public function __construct ($id, $name, $type, $value, $required = false)


Doordat je required false als default waarde meegeeft is het toch overbodig dat je bij de aanroep van je functie overal aangeeft NOT REQUIRED.. dit is tenslotte overbodig.. (Alleen nodig bij REQUIRED)

Schoonheidsfoutje.. maar verder een 10 waard..
Jan Koehoorn
Jan Koehoorn
14 jaar geleden
 
0 +1 -0 -1
Hoi Marvin,

klopt, maar ik vind het vaak overzichtelijker om waarden expliciet op te geven. Mooi dat je wat hebt aan mijn script ;-)

groeten, Jan
Manaus
Manaus
14 jaar geleden
 
0 +1 -0 -1
waarom je dit:
protected $errs;
protected $msgs;

/*
* constructor
*/
public function __construct () {
$this->errs = array ();
$this->msgs = array ();
}
ip van protected $msgs = array();?
Jan Koehoorn
Jan Koehoorn
14 jaar geleden
 
0 +1 -0 -1
@ Manaus: geen speciale reden; ik vind het overzichtelijker om alles in de constructor te doen. Dan heb je 1 plek waar al je vars gedeclareerd worden en 1 plek waar ze geinitialiseerd worden.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Bart C
Bart C
11 jaar geleden
 
0 +1 -0 -1
Hoi, ik heb het ook op het forum gegooid: ik ben toch op zoek naar een manier om een naam aan een submit te geven. Ik wil namelijk 2 submit's in één formulier. Om de correcte actie aan te duiden heb ik een name nodig. Hoe kan ik dat nog toevoegen? Ik krijg steeds een foutmelding tegen de veldnamen van het formulier.

grtz, Bart

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. oop-form

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.