PHP Classes

File: test_ajax_form.php

Recommend this page to a friend!
  Classes of Manuel Lemos   PHP Forms Class with HTML Generator and JavaScript Validation   test_ajax_form.php   Download  
File: test_ajax_form.php
Role: Example script
Content type: text/plain
Description: Example to show how to define and process a form with AJAX submit plug-in
Class: PHP Forms Class with HTML Generator and JavaScript Validation
HTML forms generation and validation.
Author: By
Last change: Enabled the AJAX debug console.
Date: 11 years ago
Size: 6,912 bytes
 

Contents

Class file image Download
<?php
/*
 * test_ajax_form.php
 *
 * @(#) $Header: /opt2/ena/metal/forms/test_ajax_form.php,v 1.7 2007/02/19 23:44:20 mlemos Exp $
 *
 */

/*
 * Include form class code.
 */
   
require("forms.php");
    require(
"form_ajax_submit.php");

/*
 * Create a form object.
 */
   
$form=new form_class;
   
$form->NAME="subscription_form";
   
$form->METHOD="POST";
   
$form->ACTION="";
   
$form->debug="error_log";
   
$form->AddInput(array(
       
"TYPE"=>"text",
       
"NAME"=>"description",
       
"ID"=>"description",
       
"LABEL"=>"<u>D</u>escription",
       
"ACCESSKEY"=>"D",
       
"ValidateAsNotEmpty"=>1,
       
"ValidationErrorMessage"=>"It was not specified a valid description."
   
));
   
$form->AddInput(array(
       
"TYPE"=>"file",
       
"NAME"=>"file",
       
"ID"=>"file",
       
"LABEL"=>"<u>F</u>ile",
       
"ACCESSKEY"=>"F",
       
"ValidateAsNotEmpty"=>1,
       
"ValidationErrorMessage"=>"It was not specified a valid file."
   
));
   
$form->AddInput(array(
       
"TYPE"=>"submit",
       
"NAME"=>"doit",
       
"ID"=>"doit",
       
"VALUE"=>"Submit"
   
));
   
$form->AddInput(array(
       
"TYPE"=>"custom",
       
"NAME"=>"sender",
       
"ID"=>"sender",
       
"CustomClass"=>"form_ajax_submit_class",
       
"FeedbackElement"=>"feedback",
       
"SubmitFeedback"=>
           
'<img src="indicator.gif" width="16" height="16" /> Submitting form ...',
       
"TimeoutFeedback"=>'The communication with the server has timed out.',
       
"Timeout"=>60,
       
"ONTIMEOUT"=>"",
       
"DebugConsole"=>"debug_console"
   
));

   
/*
     * Connect the doit submit button to the sender AJAX submit input
     */
   
$form->Connect("doit", "sender", "ONCLICK", "Submit", array());

   
/*
     * Handle client side events on the server side.
     * Do not output anything before these lines.
     */
   
$form->HandleEvent($processed);
    if(
$processed)
        exit;

   
/*
     * Did the AJAX submit post any notification message to the application?
     */
   
if($form->GetNextMessage($message))
    {

       
/*
         * Process and reply to notification messages
         */
       
do
        {
            switch(
$message["Event"])
            {
                case
"submit":

                   
$message["Actions"]=array();
                   
                   
/*
                     * Client side form submission request
                     */
                   
$form->LoadInputValues();
                   
$error_message=$form->Validate($verify);

/*
                    $form->GetFileValues("file", $values);
                    $form->SetInputProperty("sender", "Feedback", serialize($values));
                    sleep(3);
*/
                    /*
                     * Are there any form validation errors?
                     */
                   
if(strlen($error_message))
                    {

                       
/*
                         * Tell the form submitter input to send to the browser
                         * an order to display validation error feedback message.
                         */
                       
$title = "Validation error";
                       
$output = HtmlSpecialChars($error_message);
                       
$active = 0;
                       
$icon = '';
                       
ob_start();
                        require(
'templates/message.html.php');
                       
$content = ob_get_contents();
                       
ob_end_clean();
                       
$form->SetInputProperty("sender", "Feedback", $content);
                    }
                    else
                    {

                       
/*
                         * The form was processed without errors.
                         * Lets execute the form processing actions
                         * and show some progress feedback.
                         */
                       
$active = 1;
                       
$title = "Status";
                       
$output = '<center>Operation in progress: '.
                           
'<tt><span id="progress">0</span>%</tt></center>';
                       
$icon = '&nbsp;';
                       
ob_start();
                        require(
'templates/message.html.php');
                       
$content = ob_get_contents();
                       
ob_end_clean();

                       
/*
                         * Send an action order to replace the form contents
                         * by a progress feedback window.
                         */
                       
$form->SetInputProperty("sender", "FeedbackElement",
                           
"wholeform");
                       
$form->SetInputProperty("sender", "Feedback", $content);
                       
$form->SetInputProperty("sender", "FeedbackElement",
                           
"progress");
                        for(
$progress = 1 ; $progress<=100; $progress++)
                        {

                           
/*
                             * Pretend to execute an operation that takes time to complete.
                             * Here you would actually execute a a step of your
                             * lengthy processing action.
                             */
                           
usleep(50000);

                           
/*
                             * Update the progress display.
                             */
                           
$form->SetInputProperty("sender", "Feedback",
                               
sprintf("%0d",$progress));
                        }
                       
/*
                         * A little delay before the final message.
                         */
                       
sleep(1);
                       
$output = '<center><b>Operation completed!</b><br />'.
                           
'Going to redirect to the initial page in a few moments'.
                           
'...</center>';
                       
ob_start();
                        require(
'templates/message.html.php');
                       
$content = ob_get_contents();
                       
ob_end_clean();

                       
/*
                         * Display the final message and wait a few more seconds
                         */
                       
$form->SetInputProperty("sender", "FeedbackElement", "wholeform");
                       
$form->SetInputProperty("sender", "Feedback", $content);
                       
sleep(3);
                       
                       
/*
                         * Redirect to the form start script page
                         */
                       
$redirect="/test_ajax_form.php";

                       
/*
                         * This is just for testing purposes
                         */
                       
if(defined('AJAX_REDIRECT_URI'))
                           
$redirect=AJAX_REDIRECT_URI;

                       
$message["Actions"][]=array(
                           
"Action"=>"Redirect",
                           
"URL"=>"http://".GetEnv("HTTP_HOST").
                               
dirname(GetEnv("REQUEST_URI")).$redirect
                       
);
                    }
                    break;
            }

           
/*
             * Reply to the form submit event to tell which actions the
             * AJAX submit input should execute on the browser side.
             */
           
if(strlen($form->ReplyMessage($message, $processed)))
                exit;
        }
       
/*
         * Loop until there are no more event messages
         * or the processing was finished
         */
       
while(!$processed
       
&& $form->GetNextMessage($message));
        if(
$processed)
            exit;
    }

/*
 * Normal non-AJAX form processing
 */

/*
 * Load form input values eventually from the submitted form.
 */
   
$form->LoadInputValues($form->WasSubmitted("doit"));

   
$verify=array();

    if(
$form->WasSubmitted("doit"))
    {

        if((
$error_message=$form->Validate($verify))=="")
        {

           
/*
             * Process the form if it was submitted without validation errors.
             */
           
$doit=1;

        }
        else
        {
           
$doit=0;
           
$error_message=HtmlEntities($error_message);
        }
    }
    else
    {
       
$error_message="";
       
$doit=0;
    }
  if(
$doit)
  {
     
$form->ReadOnly=1;
  }

   
$form->StartLayoutCapture();
   
$title="Form class AJAX submit test";
   
$body_template="form_ajax_body.html.php";
    require(
"templates/form_frame.html.php");
    
$form->EndLayoutCapture();
    
$form->AddInputPart('sender');

    if(!
$doit)
    {
        if(
strlen($error_message))
        {
           
Reset($verify);
           
$focus=Key($verify);
        }
        else
           
$focus='description';
       
$form->ConnectFormToInput($focus, 'ONLOAD', 'Focus', array());
    }

   
$onload=HtmlSpecialChars($form->PageLoad());

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test for Manuel Lemos' PHP form class
using the AJAX form submit plug-in</title>
</head>
<body onload="<?php echo $onload; ?>" bgcolor="#cccccc">
<center><h1>Test for Manuel Lemos' PHP form class
using the AJAX form submit plug-in</h1></center>
<hr />
<?php
    $form
->DisplayOutput();
?>
<div id="debug_console"></div>
<hr />
</body>
</html>