|
|
|
PHP Form Generator
12
Generates select boxes, text boxes, check boxes and radio buttons. Via a handful of functions.
<?
/***************************************************************************************************
class: form_HTML
author: chris case - chrisc@brc2.com
purpose: provide a library of HTML form elements and acts as a container for the elements.
public functions:
addSelect (name)
addSelect_item (id,value,description)
addTextBox (name,value)
addCheckBox (name,value,description)
addRadioButton (name,value,description)
***************************************************************************************************/
class form_HTML {
var $method;
var $action;
var $name;
var $class;
var $elements;
var $getStatus;
/* default constructor
** purpose: sets the globals */
function form_HTML($method,$action,$name,$class) {
$this->method = $method;
$this->action = $action;
$this->name = $name;
$this->class = $class;
$elements = array();
$this->getStatus = 0;
}
/* add new element
** purpose: adds an entity to the container */
function addElement( $element ) {
$element['id'] = $this->nextElementID();
$location = $element['id'];
$this->elements[$location] = $element;
return $element['id'];
}
/* update element
** purpose: updates an existing form element */
function updateElement( $updatedElement ) {
$id = $updatedElement['id'];
$this->elements[$id] = $updatedElement;
}
function nextElementID() { return count( $this->elements ); }
function getElement($id) { return $this->elements[$id]; }
function numElements() { return count( $this->elements ); }
/* get the next element
** purpose: each time this is called it gets the next element until the end is reached */
function getNext() {
if( $this->getStatus == $this->numElements() ) { // is this the end of the elements?
$this->getStatus = 0; // reset the sentinal return false; // indicate ending
}
$element = $this->getElement( $this->getStatus );
$this->getStatus++;
return $element;
}
/* add a select box entity to the form
** purpose: adds a select box to the container */
function addSelect($name,$description) {
$element['type'] = 'select';
$element['name'] = $name;
$element['selections'] = array();
$element['description'] = $description;
$element['beginCode'] = "<select name='{$element['name']}'>";
$element['endCode'] = "</select>";
return $this->addElement($element);
}
/* add item to a select box instance
** purpose: adds an option to a select box entity */
function addSelect_item($id,$val,$description) {
// get the element from the array of elements
$element = $this->getElement($id);
if( $element['type'] != 'select' ) {
return false;
}
$selections = $element['selections'];
$location = count( $selections );
$selections[$location]['value'] = $val;
$selections[$location]['description'] = $description;
$selections[$location]['code'] =
"\t\t<option value='{$selections[$location]['value']}'>{$selections[$location]['description']}</option>\n";
$element['selections'] = $selections;
$this->updateElement($element);
}
function getSelectItems( $element ) {
if( $element['type'] != 'select' ) { return false; }
$selections = $element['selections'];
for( $i = 0; $i < count( $selections ); $i++ ) {
$outp .= $selections[$i]['code'];
}
return $outp;
}
/* add a text box
** purpose: adds a text box to the container */
function addTextBox($name,$value,$description) {
$element['type'] = 'text';
$element['name'] = $name;
$element['value'] = $value;
$element['description'] = $description;
$element['code'] = "<input type='text' name='{$element['name']}' value='{$element['value']}'>";
return $this->addElement($element);
}
/* add a check box
** purpose: adds a check box to the container */
function addCheckBox($name,$value,$description) {
$element['type'] = 'checkbox';
$element['name'] = $name;
$element['value'] = $value;
$element['description'] = $description;
$element['code'] = "<input type='checkbox' name='{$element['name']}' value='{$element['value']}'>";
return $this->addElement($element);
}
/* add a radio button
** purpose: adds a radio button to the container */
function addRadioButton($name,$value,$description) {
$element['type'] = 'radio';
$element['name'] = $name;
$element['value'] = $value;
$element['description'] = $description;
$element['code'] = "<input type='radio' value='{$element['value']}' " .
"name='{$element['name']}'>";
return $this->addElement($element);
}
/* add a textarea
** purpose: adds a textarea to the container */
function addTextArea($name,$value,$description) {
$element['type'] = 'textarea';
$element['name'] = $name;
$element['value'] = $value;
$element['description'] = $description;
$element['code'] = "<textarea name='{$element['name']}'>{$element['value']}</textarea>";
return $this->addElement($element);
}
/* add a submit button
** purpose: add a submit button to the container */
function addSubmitButton($name,$value) {
$element['type'] = 'submit';
$element['name'] = $name;
$element['value'] = $value;
$element['code'] = "<input class='submit' type='submit' name='{$element['name']}' value='{$element['value']}'>";
return $this->addElement($element);
}
/* add a hidden field
** purpose: add a hidden field to the container */
function addHiddenField($name,$value) {
$element['type'] = 'hidden';
$element['name'] = $name;
$element['value'] = $value;
$element['code'] = "<input type='hidden' name='{$element['name']}' value='{$element['value']}'>";
return $this->addElement($element);
}
/* get HTML output as a table
** purpose: returns the HTML data from the container with the descriptions on the left
and the form elements on the right */
function getTableOfElements_1() {
$outp .= "<form method='{$this->method}' action='{$this->action}' name='{$this->name}'>\n";
$outp .= "<table class='{$this->class}' cellspacing=0>\n";
$element = $this->getNext();
while( $element ) {
$outp .= "\t";
switch($element['type'])
{
case 'select':
$selectItems = $this->getSelectItems( $element );
$outp .=
"<tr>" .
"\n\t<td class='description'>{$element['description']}</td>\n" .
"\t<td>\n" .
"\t" . $element['beginCode'] . "\n" .
$selectItems .
"\t" . $element['endCode'] . "\n" .
"\t</td>\n\t</tr>";
break;
case 'text':
$outp .= "<tr><td class='description'>{$element['description']}</td><td style='text-align:left;' class='formElement'>{$element['code']}</td></tr>";
break;
case 'checkbox':
$outp .= "<tr><td class='description'>{$element['description']}</td><td style='text-align:left;' class='formElement'>{$element['code']}</td></tr>";
break;
case 'radio':
$outp .= "<tr><td class='description'>{$element['description']}</td><td style='text-align:left;' class='formElement'>{$element['code']}</td></tr>";
break;
case 'textarea':
$outp .= "<tr><td class='description'>{$element['description']}</td><td style='text-align:left;' class='formElement'>{$element['code']}</td></tr>";
break;
case 'submit':
$outp .= "<tr><td> </td><td class='formElement' style='text-align:left;'>{$element['code']}</td></tr>";
break;
case 'hidden':
$outp .= $element['code'];
}
$outp .= "\n";
$element = $this->getNext();
}
$outp .= "</table>\n";
$outp .= "</form>\n";
return $outp;
}
/* get HTML output as a table
** purpose: returns the HTML data from the container with the descriptions on the right
and the form elements on the left */
function getTableOfElements_2() {
$outp .= "<form method='{$this->method}' action='{$this->action}' name='{$this->name}' class='{$this->class}'>\n";
$outp .= "<table>\n";
$element = $this->getNext();
while( $element ) {
$outp .= "\t";
switch($element['type'])
{
case 'select':
$selectItems = $this->getSelectItems( $element );
$outp .=
"<tr>\n" .
"\t<td class='formElement'>\n" .
"\t" . $element['beginCode'] . "\n" .
$selectItems .
"\t" . $element['endCode'] . "\n" .
"\t</td>\n" .
"\t<td>{$element['description']}</td>\n" .
"\t</tr>";
break;
case 'text':
$outp .= "<tr><td class='formElement'>{$element['code']}</td><td class='description'>{$element['description']}</td></tr>";
break;
case 'checkbox':
$outp .= "<tr><td class='formElement'>{$element['code']}</td><td class='description'>{$element['description']}</td></tr>";
break;
case 'radio':
$outp .= "<tr><td class='formElement'>{$element['code']}</td><td class='description'>{$element['description']}</td></tr>";
break;
case 'textarea':
$outp .= "<tr><td class='formElement'>{$element['code']}</td><td class='description'>{$element['description']}</td></tr>";
break;
case 'submit':
$outp .= "<tr><td class='formElement'>{$element['code']}</td><td> </td></tr>";
break;
}
$outp .= "\n";
$element = $this->getNext();
}
$outp .= "</table>\n";
$outp .= "</form>\n";
return $outp;
}
}
/** test code
$form = new form_HTML('post','index.php','mainBody','formClass');
$selectId = $form->addSelect('select test','description of the select box');
$form->addSelect_item($selectId,'item1val','item1description');
$form->addSelect_item($selectId,'item2val','item2description');
$form->addTextBox('text_test','text_value_test','description of the text box');
$form->addCheckBox('cb_name','cb_value','cb_description');
$form->addRadioButton('rb_name','rb_value','rb_description');
$form->addTextArea('ta_name','ta_value','description of the textarea');
echo $form->getTableOfElements_1();
echo $form->getTableOfElements_2();
/**/
?>




If you just need a static form, then I agree, this would be overkill.
I also have to give kudos for the object-oriented programming. Most PHP developers are procedural programmers.
Line 55 ( getNext() ) method:
move the latter part of the line ( return false; ) onto a new line, uncommenting it.
Also a another problem was:
remove the "." from the first line of the getTableOfElements_1/2() method so the $outp variable is declared and not concatenated to.
Apart from that, cheers for the code!