Re: Forms validation and creation- easier solution?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Daniele Grillenzoni" <daniele@xxxxxxxxxxxxxxxx> wrote in message 
news:16.1E.28112.84CA51A4@xxxxxxxxxxxxxxx
> On 20/05/2009 9.03, Angelo Zanetti wrote:
>> Hi all.
>>
>>
>>
>> We have done quite a few projects and we are looking to find better ways 
>> to
>> implementing forms.
>>
>>
>>
>> Forms seem to be quite time consuming and repetitive.
>>
>>
>>
>> Generally are there any classes or libraries that will assist with:
>>
>>
>>
>> 1. Easy creation of forms (fields and layout)
>>
>> 2. Validation of specific fields within the forms (server side not JS)
>>
>> 3. Decrease in time required to setup the forms pages
>>
>> any other comments are welcome.
>>
>>
>>
>> Thanks in advance
>>
>> Angelo
>>
>>
>> Elemental
>> http://www.elemental.co.za<http://www.elemental.co.za/>
>>
>> Dynamic Web and Mobile Solutions
>>
>>
>>
>>
>>
>>
>
> Personally I created a little Class that handles it.
>
> First I create an array of associative arrays, every associative array 
> represents an input of an abstract type (similar to the webforms, meaning 
> i have stuff like type="telephone").
>
> Stuff like
> $inputs[]=array(
> "name" => "foobar",
> "required" => true,
> "type" => "string",   // text is reserved to textarea
> "label" => "Foo Bar",
> "error_required" => "you need to provide a Foo Bar value, dummy",
> "group" => "main"
> );
> etc.
>
> Then I create an array for groups.
> $group["main"] = array(
> "type" = "block",     // types are either block which means div, set which 
> means fieldset, paragraph which means <p> or a raw html opening tag.
> "parent" = NULL //optional of course, if set to the name of another group, 
> then the group becomes a child of the referenced group.
> )
>
> Then I create an associative array of options for the form.
> Finally, I call the class constructor with the three arrays as params.
>
> The class provides me with a few nifty functions:
> * toHtml();
> (do I need to explain?)
> * toArray();
> Returns the inputs, options, and groups inside a single array, with the 
> value altered when necessary
> * wasSubmitted();
> Does some guesswork to see if the form was submitted, there's a lot of 
> smart automagicness inside.
> * runAutoChecks();
> Runs the checks he can, like the validity of emails in 'type' = 'email' 
> inputs, pattern validation for input with a set pattern, required inputs, 
> fills the error array with error messages, sets class[]='error' to wrongly 
> filled inputs...
> * wasValidInput();
> Returns true if none of the autochecks or eventual manual checks returned 
> an error.
>
> And it works like this:
> [...]
> if ($form->wasSubmitted()){
> $form->runAutoChecks();
> /* Additional non-automatable controls */
> // None in this case
> if ($form->wasValidInput()){
> // success, do stuff
> } else {
> // show errors and form again
> }
> } else {
> echo $form->toHtml();
> }
>
> There are other things I didn't list, like the fact that ever input has 
> options to specify a wrapper (class and id are associated to the wrapper 
> if it's defined), the form encoding automatically changes in case of a 
> file input, etc etc etc...
>
> The types are abstracted enough that one could easily make a function that 
> automatically creates the code for a first draft of the forum out of the 
> db schema of an eventual table. Of course you'd have to provide error 
> messages, remove unnecessary inputs, adding new ones...

Your ideas are similar to mine, but I have a much more advanced 
implementation which involves the use of a Data Dictionary. After building a 
database table I import the structure into my data dictionary, then export 
it to create a database table class and a table structure file. Still using 
the data dictionary I can then build the family of transactions to maintain 
that database table. This uses a standard set of page controllers and XSL 
templates to build the HTML. So within 5 minutes I can run the transactions 
to list, search, add, enquire, delete and update that database table without 
having to write a single line of SQL or HTML. In most cases I don't even 
have to write a single line of PHP. Is your method as fast as that?

All this functionality exists within the Radicore framework, so you can 
download it and try it for yourself.

-- 
Tony Marston
http://www.tonymarston.net
http://www.radicore.org 



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux