SlideShare a Scribd company logo
1 of 17
Download to read offline
Form Validation NG
João Prado Maia
Lead Software Developer, Alert Logic



8/2/2007
Introduction
• Background
   – Form validation is always a pain to
     implement
       • Too many moving parts
       • Not always standardized
   – Built prototype in 2006
       • Used JavaScript/AJAX for client-side
         validation
       • Not complete when doing fallback
         server-side validation
       • Required lots of small changes to forms




                             Slide: 2
Goals
• Validation both on client and server sides
   – Avoid form/HTTP-request spoofing
   – Validation rules are generated from the same
     centralized source
   – No duplication of validation code
• Works well with pre-existing Smarty templates
   – Minimum amount of changes required on each form
   – Not enough time to re-architect a complete data-model
     form generation code
• Easy to understand code



                           Slide: 3      Source: IP Development Network. Understanding Your Business Customers
Final look and feel




               Slide: 4   Source: Strategy Analytics
Overview of client-side
{validation}
<form name=quot;test_formquot; ... >
...
</form>
{/validation}


Simple steps:
1.    Add extra {validation} tags around the form
2.    ???
3.    Profit!


                         Slide: 5
But wait, there’s more!
•       Not really, the {validation}
        function is all you need
    –      Done as a Smarty block function
    –      Parses XHTML content of form
    –      Sets up proper onBlur/onChange
           event handlers to re-validate
           error’ed-out forms
    –      Sets up onSubmit to process form
           validation




                             Slide: 6
Diagram of client-side




              Slide: 7
Diagram of client-side (2)




               Slide: 8
It’s all in the XML
• Both client and server sides use XML rules to
  validate the form input
   – One XML file per template
   – Easy to define validation rules per form and form field
   – Multiple validation rules per form fields also possible
• Stores error messages as well
   – Easy to extend into i18n error messages
• Adding a new validation rule is as easy as
  implementing it in PHP – client-side comes for
  free



                            Slide: 9
Example XML file
<?xml version=quot;1.0quot; encoding=quot;iso-8859-1quot;?>
<!DOCTYPE form_validation SYSTEM quot;form_validation.dtdquot;>
<form_validation>
    <form name=quot;case_creation_formquot;>
        <field stop_on_errors=“true” name=“user_emailquot;>
            <validation type=quot;non_emptyquot;>
                <error_msg>Enter your email address to be notified about this case.</error_msg>
            </validation>
            <validation type=quot;e-mailquot;>
                <error_msg>Summary must be a valid e-mail address.</error_msg>
            </validation>
        </field>
        <field name=quot;descriptionquot;>
            <validation type=quot;non_emptyquot;>
                <error_msg>Enter a description for this case.</error_msg>
            </validation>
        </field>
        <field name=quot;priorityquot;>
            <validation type=quot;non_emptyquot;>
                <error_msg>Define a priority for this case.</error_msg>
            </validation>
        </field>
    </form>
</form_validation>




                                          Slide: 10
Overview of server-side
• Small changes needed
• Wrap form handling code with validation routine

<?php
$validation = new Form_Validation('template_name', 'form_name');
if ($validation->isValid()) {
    /* Process form submission */
}
?>


• No need to handle errors, just display the template
  again with the {validation} function



                              Slide: 11
Diagram of server-side




            Slide: 12
Smarty magic




           Slide: 13
Smarty magic (2)
• Smarty/plugins/block.validation.php
<?php
function smarty_block_validation($params, $content, &$smarty)
{
    // ...

     $doc = new DOMDocument();
     @$doc->loadHTML($content);

     foreach ($doc->getElementsByTagName('form') as $form) {
         $form_name = $form->getAttribute('name');
         $form->setAttribute('onsubmit',
                 'javascript: return validateForm(t_name, this.name)');
     }

     if (!empty($errors)) {
         $div = $doc->createElement(quot;DIVquot;);
         $div->setAttribute('id', 'header_error_validation');
         // ...
     }

     // include <script> tags
     // ...

     return $changed_html;
}
?>




                                           Slide: 14
Potential improvements
• Change the Form_Validation class to
  use the DOM extension
  – currently using SimpleXML
  – only 1 required extension, instead of 2




                   Slide: 15
Features
• Works with or without JavaScript
  enabled on browser
• Validation code is centralized – no more
  duplication
• Dead-simple to implement




                  Slide: 16
Last slide
PHP extensions
    JSON
           http://us3.php.net/manual/en/ref.json.php
    SimpleXML
           http://us3.php.net/manual/en/ref.simplexml.php
    DOM
           http://us3.php.net/manual/en/ref.dom.php

Other tools
    Smarty
           http://smarty.php.net
    Smarty – Block functions
           http://smarty.php.net/manual/en/plugins.block.functions.php
    Smarty PHP Template Programming and Applications
           http://smartybook.com




                                             Slide: 17

More Related Content

Similar to Form Validation NG

Spring MVC Intro / Gore - Nov NHJUG
Spring MVC Intro / Gore - Nov NHJUGSpring MVC Intro / Gore - Nov NHJUG
Spring MVC Intro / Gore - Nov NHJUGTed Pennings
 
London SF Developers: Custom Lightning Component Error Handling
London SF Developers: Custom Lightning Component Error HandlingLondon SF Developers: Custom Lightning Component Error Handling
London SF Developers: Custom Lightning Component Error HandlingRichard Clark
 
BITM3730Week11.pptx
BITM3730Week11.pptxBITM3730Week11.pptx
BITM3730Week11.pptxMattMarino13
 
Web internship Yii Framework
Web internship  Yii FrameworkWeb internship  Yii Framework
Web internship Yii FrameworkNoveo
 
Zembly Programming Language
Zembly Programming LanguageZembly Programming Language
Zembly Programming Languagezembly
 
CICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your MindCICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your Mindciconf
 
Continously delivering
Continously deliveringContinously delivering
Continously deliveringJames Cowie
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4Javier Eguiluz
 
HTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PMHTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PMDean Hamstead
 
Debugging - Figuring it out yourself (WordCamp Dublin 2019)
Debugging - Figuring it out yourself (WordCamp Dublin 2019)Debugging - Figuring it out yourself (WordCamp Dublin 2019)
Debugging - Figuring it out yourself (WordCamp Dublin 2019)Damien Carbery
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Codescidept
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin GeneratorJohn Cleveley
 
Streamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web FrameworksStreamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web Frameworksguestf7bc30
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performanceEngine Yard
 

Similar to Form Validation NG (20)

Spring MVC Intro / Gore - Nov NHJUG
Spring MVC Intro / Gore - Nov NHJUGSpring MVC Intro / Gore - Nov NHJUG
Spring MVC Intro / Gore - Nov NHJUG
 
London SF Developers: Custom Lightning Component Error Handling
London SF Developers: Custom Lightning Component Error HandlingLondon SF Developers: Custom Lightning Component Error Handling
London SF Developers: Custom Lightning Component Error Handling
 
BITM3730Week11.pptx
BITM3730Week11.pptxBITM3730Week11.pptx
BITM3730Week11.pptx
 
Web internship Yii Framework
Web internship  Yii FrameworkWeb internship  Yii Framework
Web internship Yii Framework
 
Zembly Programming Language
Zembly Programming LanguageZembly Programming Language
Zembly Programming Language
 
Yii Introduction
Yii IntroductionYii Introduction
Yii Introduction
 
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
 
mean stack
mean stackmean stack
mean stack
 
CICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your MindCICONF 2012 - Don't Make Me Read Your Mind
CICONF 2012 - Don't Make Me Read Your Mind
 
Continously delivering
Continously deliveringContinously delivering
Continously delivering
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
 
HTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PMHTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PM
 
Asp.net tips
Asp.net tipsAsp.net tips
Asp.net tips
 
Debugging - Figuring it out yourself (WordCamp Dublin 2019)
Debugging - Figuring it out yourself (WordCamp Dublin 2019)Debugging - Figuring it out yourself (WordCamp Dublin 2019)
Debugging - Figuring it out yourself (WordCamp Dublin 2019)
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 
Streamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web FrameworksStreamlining Your Applications with Web Frameworks
Streamlining Your Applications with Web Frameworks
 
Java script
Java scriptJava script
Java script
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 

More from joaopmaia

AFNetworking
AFNetworking AFNetworking
AFNetworking joaopmaia
 
Core Data presentation
Core Data presentationCore Data presentation
Core Data presentationjoaopmaia
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniquesjoaopmaia
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniquesjoaopmaia
 
Meetup uikit programming
Meetup uikit programmingMeetup uikit programming
Meetup uikit programmingjoaopmaia
 
Web App Testing With Selenium
Web App Testing With SeleniumWeb App Testing With Selenium
Web App Testing With Seleniumjoaopmaia
 
Eventum Presentation
Eventum PresentationEventum Presentation
Eventum Presentationjoaopmaia
 

More from joaopmaia (7)

AFNetworking
AFNetworking AFNetworking
AFNetworking
 
Core Data presentation
Core Data presentationCore Data presentation
Core Data presentation
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniques
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniques
 
Meetup uikit programming
Meetup uikit programmingMeetup uikit programming
Meetup uikit programming
 
Web App Testing With Selenium
Web App Testing With SeleniumWeb App Testing With Selenium
Web App Testing With Selenium
 
Eventum Presentation
Eventum PresentationEventum Presentation
Eventum Presentation
 

Recently uploaded

How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfSrushith Repakula
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty SecureFemke de Vroome
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxDavid Michel
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlPeter Udo Diehl
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...CzechDreamin
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyJohn Staveley
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoUXDXConf
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCzechDreamin
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka DoktorováCzechDreamin
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfFIDO Alliance
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceSamy Fodil
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxJennifer Lim
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfFIDO Alliance
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIES VE
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Julian Hyde
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024Stephanie Beckett
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftshyamraj55
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKUXDXConf
 
THE BEST IPTV in GERMANY for 2024: IPTVreel
THE BEST IPTV in  GERMANY for 2024: IPTVreelTHE BEST IPTV in  GERMANY for 2024: IPTVreel
THE BEST IPTV in GERMANY for 2024: IPTVreelreely ones
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge
 

Recently uploaded (20)

How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, Ocado
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
THE BEST IPTV in GERMANY for 2024: IPTVreel
THE BEST IPTV in  GERMANY for 2024: IPTVreelTHE BEST IPTV in  GERMANY for 2024: IPTVreel
THE BEST IPTV in GERMANY for 2024: IPTVreel
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 

Form Validation NG

  • 1. Form Validation NG João Prado Maia Lead Software Developer, Alert Logic 8/2/2007
  • 2. Introduction • Background – Form validation is always a pain to implement • Too many moving parts • Not always standardized – Built prototype in 2006 • Used JavaScript/AJAX for client-side validation • Not complete when doing fallback server-side validation • Required lots of small changes to forms Slide: 2
  • 3. Goals • Validation both on client and server sides – Avoid form/HTTP-request spoofing – Validation rules are generated from the same centralized source – No duplication of validation code • Works well with pre-existing Smarty templates – Minimum amount of changes required on each form – Not enough time to re-architect a complete data-model form generation code • Easy to understand code Slide: 3 Source: IP Development Network. Understanding Your Business Customers
  • 4. Final look and feel Slide: 4 Source: Strategy Analytics
  • 5. Overview of client-side {validation} <form name=quot;test_formquot; ... > ... </form> {/validation} Simple steps: 1. Add extra {validation} tags around the form 2. ??? 3. Profit! Slide: 5
  • 6. But wait, there’s more! • Not really, the {validation} function is all you need – Done as a Smarty block function – Parses XHTML content of form – Sets up proper onBlur/onChange event handlers to re-validate error’ed-out forms – Sets up onSubmit to process form validation Slide: 6
  • 9. It’s all in the XML • Both client and server sides use XML rules to validate the form input – One XML file per template – Easy to define validation rules per form and form field – Multiple validation rules per form fields also possible • Stores error messages as well – Easy to extend into i18n error messages • Adding a new validation rule is as easy as implementing it in PHP – client-side comes for free Slide: 9
  • 10. Example XML file <?xml version=quot;1.0quot; encoding=quot;iso-8859-1quot;?> <!DOCTYPE form_validation SYSTEM quot;form_validation.dtdquot;> <form_validation> <form name=quot;case_creation_formquot;> <field stop_on_errors=“true” name=“user_emailquot;> <validation type=quot;non_emptyquot;> <error_msg>Enter your email address to be notified about this case.</error_msg> </validation> <validation type=quot;e-mailquot;> <error_msg>Summary must be a valid e-mail address.</error_msg> </validation> </field> <field name=quot;descriptionquot;> <validation type=quot;non_emptyquot;> <error_msg>Enter a description for this case.</error_msg> </validation> </field> <field name=quot;priorityquot;> <validation type=quot;non_emptyquot;> <error_msg>Define a priority for this case.</error_msg> </validation> </field> </form> </form_validation> Slide: 10
  • 11. Overview of server-side • Small changes needed • Wrap form handling code with validation routine <?php $validation = new Form_Validation('template_name', 'form_name'); if ($validation->isValid()) { /* Process form submission */ } ?> • No need to handle errors, just display the template again with the {validation} function Slide: 11
  • 13. Smarty magic Slide: 13
  • 14. Smarty magic (2) • Smarty/plugins/block.validation.php <?php function smarty_block_validation($params, $content, &$smarty) { // ... $doc = new DOMDocument(); @$doc->loadHTML($content); foreach ($doc->getElementsByTagName('form') as $form) { $form_name = $form->getAttribute('name'); $form->setAttribute('onsubmit', 'javascript: return validateForm(t_name, this.name)'); } if (!empty($errors)) { $div = $doc->createElement(quot;DIVquot;); $div->setAttribute('id', 'header_error_validation'); // ... } // include <script> tags // ... return $changed_html; } ?> Slide: 14
  • 15. Potential improvements • Change the Form_Validation class to use the DOM extension – currently using SimpleXML – only 1 required extension, instead of 2 Slide: 15
  • 16. Features • Works with or without JavaScript enabled on browser • Validation code is centralized – no more duplication • Dead-simple to implement Slide: 16
  • 17. Last slide PHP extensions JSON http://us3.php.net/manual/en/ref.json.php SimpleXML http://us3.php.net/manual/en/ref.simplexml.php DOM http://us3.php.net/manual/en/ref.dom.php Other tools Smarty http://smarty.php.net Smarty – Block functions http://smarty.php.net/manual/en/plugins.block.functions.php Smarty PHP Template Programming and Applications http://smartybook.com Slide: 17