<? /* 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', true, FORM_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'=>6 ) );
// 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'] != 1 ) { 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!' ); } }
?>
|