// include the class file
include __DIR__ . '/../FormData/FormData.php';
$FormData = new FormData();
try {
    // create the form fields and set parameters
    $FormData->setFields([['type' => 'text', 'label' => 'First name', 'name' => 'first-name', 'required' => '1', 'required_message' => 'We\'d love to know your first name!', 'max_length' => '50'], ['type' => 'select', 'label' => 'Favourite colour', 'name' => 'colour', 'required' => '1', 'option' => ['1' => 'Red', '2' => 'Yellow', '3' => 'Blue']], ['type' => 'checkbox', 'label' => 'Are you OK?', 'name' => 'ok', 'checkbox_value' => 'yes', 'checkbox_value_alt' => 'no']]);
    // check for form submission
    if ($_POST['submit'] == 'submit') {
        // search POST array for all fields that were set above and check submitted data
        $FormData->checkPost();
        /* ********************************* Adding some custom error messages ********************************* */
        // add a generic error that is not linked to any fields, these will always be added to the end of the list
        $FormData->setError(NULL, 'A generic error message');
        // perform further, custom checks on submitted data, for example - create an error if 'first-name' is Paul
        if (!$FormData->hasError('first-name')) {
            $submitted = $FormData->getClean('first-name');
            if (strtolower($submitted) == 'paul') {
                $FormData->setError('first-name', 'cannot be Paul, sorry');
                // message will be prefixed with field label
            }
        }
        // assign an error to a field without generating a message - for example - create an error if the 'colour' is yellow (ID = 2) but the checkbox is not checked
        if ($FormData->getClean('colour') == '2' && $FormData->getClean('ok') == 'no') {
            $FormData->setError('colour');
            // this field will be highlighted as having an error but no message will be logged, the next line will create the message for both fields
            $FormData->setError('ok', 'If your favourite colour is yellow then you must be OK', false);
            // to disable the field label being prefixed, add a 3rd argument 'false'
        }
        /* ***************************************************************************************************** */
        if ($FormData->hasError()) {
            // there was some errors, prepare the data for an error message
 // check for form submission
 if ($_POST['submit'] == 'submit') {
     // search POST array for all fields that were set above and check submitted data
     $FormData->checkPost();
     if ($FormData->hasError()) {
         // there was some errors - handle them here
         // an object containing all error fields with user friendly messages can be obtained as follows
         $error_obj = $FormData->getErrorList();
         // an HTML ready list of error messages (separated with '<br />') can be obtained as follows
         $error_message = $FormData->getErrorList(true);
         // just as an example, prepare the data for a confirmation message
         $form_report = '<div class="alert alert-danger" role="alert"><h4>Form report: Errors!</h4><p>' . $error_message . '</p></div>';
     } else {
         // there were no errors so the information can be processed
         // example of extracting data from the object
         $first_name = $FormData->getClean('first-name');
         $surname = $FormData->getClean('surname');
         $colour = $FormData->getClean('colour');
         $ok = $FormData->getClean('ok');
         // put the data in a confirmation message
         $form_report = '<div class="alert alert-success" role="alert">';
         $form_report .= '<h4>Form report: Success!</h4>';
         $form_report .= '<p>';
         $form_report .= 'First name: ' . htmlspecialchars($first_name) . '<br />';
         $form_report .= 'Surname: ' . htmlspecialchars($surname) . '<br />';
         $form_report .= 'Colour ID: ' . htmlspecialchars($colour) . '<br />';
         $form_report .= 'OK?: ' . htmlspecialchars($ok);
         $form_report .= '</p>';
         $form_report .= '</div>';
     }
 }