Login   Register  
PHP Classes
elePHPant
Icontem

File: more_dml.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Alex D.  >  Formslib4PHP  >  more_dml.php  >  Download  
File: more_dml.php
Role: Example script
Content type: text/plain
Description: Medium complexity example script
Class: Formslib4PHP
Generate and validate Web forms
Author: By
Last change:
Date: 2006-11-03 06:52
Size: 5,738 bytes
 

Contents

Class file image Download
<?
/*
Example file using Formslib4PHP
More dml operations (insert, update) using a dropdown as navigation
Requires: MySQL database
*/

require( '../formslib.php' );
$oDB ADONewConnection'mysqli' );
$oDB->Connect'localhost''root'false'test' );

// Doing some security stuff
$id = (int)$oDB->GetOne'SELECT id FROM person WHERE id='.(int)$_REQUEST['id'] );

// Setting up the data block
$oBlock = new DataBlock'myblock'"SELECT * FROM person where id = $id"DATA_DB$oDB'person''id' );

// This will be our template.
$template "
<html>
    <title>A test form</title>
    <body>
        <center>%_form[TITLE]%</center>
        <center>
        %sometext[FIELD]%<br />
        %id[LABEL]%: %id[FIELD]% <br />    
        %hr1[FIELD]%
        %now[LABEL]%: %now[FIELD]% <br /><br />
        %age[LABEL]%: %age[FIELD]%%age[ERROR]% <br />
        %name[LABEL]%: %name[FIELD]%%name[ERROR]% <br />
        %memo[LABEL]%: %memo[FIELD]% <br /><br />
        %save[FIELD]%
        %hr1[FIELD]%
    </center>
    </body>
</html>
"
;

// Let's create the main form object.
// You can enter the form title as the second construction argument, or simply use the method
//  ::set_title() after construction
$form = new HTMLForm'test' );
$form -> set_title('Persons');

// Adding some controller for different behaviour when we're just navigating
$form->add_control'navigation'trueFORM_INIT'GET' );

// Defining some fields and setting properties and validators for our example

// We just use a dropdown for navigation
$f = new HTMLFormList'dropdown''id''Records'$id );
$f->populate'SELECT id, name FROM person'false$oDB );
$f->set_property'empty', array( 'new'=>'--- Insert new record ---' ) );
$f->add_attr( array ( 'onchange'=>"javascript:document.test.action='?navigation=1'; document.test.submit();" ) );
$f->set_property 'readonly' );

// A database field with simply internal validation
// The validation will only occur if the field ist not empty, because it's not defined as required.
$f = new HTMLFormInput'text''age''Age' );
$f->add_validation'int_abs''Please enter a number greater than zero!'V_INTERNAL );

// A normal text input field which we'll map to the data block
// We assign 2 validations to this field, an internal and an user specific
$f = new HTMLFormInput'text''name''Full name' );
$f->set_property'required''"%LABEL%" is a required field!' );
$f->add_validation('personal_name''"%LABEL%" contains disallowed characters.'V_INTERNAL);
$f->add_validation('my_validate_function''The first letter should be uppercase.'V_USER); // Just an example

// A textarea field. Note the extra added HTML attributes
$f = new HTMLFormInput'textarea''memo''Description' );
$f->add_attr( array( 'cols'=>20'rows'=>) );

// Another HTML only field (span)
$f = new HTMLFormInput 'htmltext''sometext' );
$f->set_value"This is a wonderful text!" );
$f->add_attr( array( 'style'=>'color:green;' ) ); 

// This is not a database field, we just create it for fun. We won't map it to our block,
// so it always initialize itself with the value given at creation time (or by ::init() or ::set_value())
// which is here the current time.
$f = new HTMLFormDate'now''Actual time'time() );
$f->set_language'uk' );

// Our submit button. Even with no primary reference variable, you can immediately
// access it after creation using FLIB::HTML('save'). 
new HTMLFormControl'save''Update it!''submit' );

// A simple non functional tag. 
$h1 = new HTMLElement 'hr'HT_NOENDTAG, array ( 'noshade'=>true ) );
$h1->set_key'hr1' );

/* Main execution part */
$form->set_template$template );
$form->add_blocks();
$form->add_fields();

// We map some defined fields to the database block, so the library knows how to update them
// Note how the formslib field "memo" is mapped to the column "description" in the database block,
// because of its different name.
$form->map'myblock', array( 'id''name''age''memo'=>'description' ) );
$form->setup();
/* End of main execution part */

// This is a very simple method of displaying some errors that occured.
// Normally, you will want make this in a more beautiful manner ;)
if ( sizeof ($form->get_errors() ) ) {
    print 
"Errors occured: ";
    
print_r$form -> get_errors() );
}

// This is some other stuff we want to do before outputting the code (it's user specific and not
// directly related to the formslib!)
post_actions();

// This is the output function for creating the HTML code
print $form->out();

// Defining a field trigger which modifies a value just before inserting
// or updating the field named "id" into the database. We want to try to insert
// "null" on new id records (forcing mysql to use the auto increment function for this column).
function _test_id_success $id ) {
    return ( 
$id == 'new' null $id );
}

// This trigger is called automatically AFTER updating the data blocks.
function _test_success() {
    if ( 
$_GET['navigation'] != ) {
        
FLIB::HTML('id')->populate'select id, name from person'false$GLOBALS['oDB'] );
        if ( ! (int)
$GLOBALS['id'] ) {
            
$GLOBALS['id'] = (int)$GLOBALS['oDB']->GetOne("select max(id) from person");
            
FLIB::HTML('id')->set_value$GLOBALS['id'] );
            
post_actions();
        }
    }
}

// An user specified validation function
function my_validate_function $str )
{
    return ( 
$str{0} == strtoupper $str{0} ) );
}

// We just pack this code into one function, because it is executed from 2 different locations
function post_actions()
{
    
// Playing around with the button value depending on the record type ( new or update )
    // Have a look at the way we're accessing the field objects inside the form
    
if ( ! $GLOBALS['id'] || $GLOBALS['id'] == 'new' ) {
        
FLIB::HTML('save')->set_value'Insert it!' );
    }
}

?>