rtgx

Dynamický formulár generovaný v PHP

Skript pozná dva druhy vstupných polí - input a textarea. Konfiguračné pole pre tvorbu formulára je vyznačené červenou ($form), vysvetlenei konfigurácie je v komentároch. Pre priebežnú kontrolu povinných vstupov sa generuje jednoduchý javascript. Trieda ponúka možnosti rozšírenia o ďalšie typy vstupných polí (checkbox, radio...).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Formulár 01</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Keywords" content="">
<meta name="description" content="">
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" language="JavaScript" src="java.js"></script>
</head>

<body>

<?php

// Script generuje formular, kontroluje vyplnenie povinnych poli //
// na urovni javascriptu aj php //
// odstranuje prebytocne medzery na zac. a konci retazcov //
// zneskodnuje vlozene html tagy //

// Definition form fields // ---------------------------------------------------
// toto definicne pole ($form) urcuje vzhlad formulara
//
// definicia jednej polozky
// 0 => array (
// "type" => "input", - typ pola; hodnoty: input, textarea
// "require" => TRUE, - povinne vyplnenie; TRUE, FALSE
// "name" => "name", - nazov pola; napr: <input name="name" ...
// "description" => "Meno", - popis; nieco ako label pred <input ...
// "size" => 30 - rozmer; <input size="30" ...
// ),
//
// definicia textarea, pribudnu tieto polozky
// "cols" => 30, - pocet stlpcov (znakov)
// "rows" => 4 - pocet riadkov
//
$form = array (
0 => array (
"type" => "input",
"require" => TRUE,
"name" => "name",
"description" => "Meno",
"size" => 30
),
1 => array (
"type" => "input",
"require" => TRUE,
"name" => "lastname",
"description" => "Priezvisko",
"size" => 30
),
2 => array (
"type" => "input",
"require" => FALSE,
"name" => "job",
"description" => "Zamestnanie",
"size" => 20
),
3 => array (
"type" => "textarea",
"require" => FALSE,
"name" => "adress",
"description" => "Adresa",
"cols" => 30,
"rows" => 4
),
4 => array (
"type" => "textarea",
"require" => FALSE,
"name" => "text",
"description" => "Text",
"cols" => 30,
"rows" => 3
)
);

////////////////////////////////////////////////////////////////////////////////
// Create <input ... /> // -----------------------------------------------------
class cHtml_input
{
private $name = ''; // nazov v input name aj v databaze //
private $description = ''; // popis //
private $size = 10; // velkost input //

// Constructor // -------------------------------------------------------------
function __construct (
$_name = '', $_description = '', $_size = 10 )
{
$this->name = $_name;
$this->description = $_description;
$this->size = $_size;
echo '
<tr><td>'.$_description.' </td><td>
<input type="text" name="'.$_name.'" size="'.$_size.'" value="" />
</td></tr>';
}

// Creating input box with parameters // --------------------------------------
static function html_input (
$_name = '', $_description = '', $_size = 10 )
{
$value = '';

if( isset( $_POST[$_name] ) )
$value = $_POST[$_name];

$out = '
<tr><td>'.$_description.' </td><td>
<input type="text" name="'.$_name.'" size="'.$_size.'" value="'.trim( $value ).'" />
</td></tr>';
return $out;
}

} // end class cHtml_input // --------------------------------------------------

////////////////////////////////////////////////////////////////////////////////
// Create <textarea ... /> // --------------------------------------------------
class cHtml_textarea
{

// Creating textarea box with parameters // -----------------------------------
static function html_textarea (
$_name = '', $_description = '', $_cols = 10, $_rows = 3 )
{
$value = '';

if( isset( $_POST[$_name] ) )
$value = $_POST[$_name];

echo '
<tr><td>'.$_description.' </td><td>
<textarea name="'.$_name.'" cols="'.$_cols.'" rows="'.$_rows.'">'.htmlspecialchars( trim( $value ) ).'
</textarea></td></tr>';
}

} // end class cHtml_textarea // -----------------------------------------------

////////////////////////////////////////////////////////////////////////////////
// Create Form // --------------------------------------------------------------
// Nacita definicne udaje z pola $_def //
// a podla toho vytvoti formular formatovany to tabulky //
class cForm
{
private $name = ''; // nazov v input name aj v databaze //
private $out = ''; // vystupny retazec //
private $ok = FALSE; // vystupny retazec //

// Constructor //
function __construct ( $_name, $_action, $_def )
{
$this->name = $_name;

// Kontrola odoslanych udajov //
if( isset($_POST['submit']) ) {
$this->ok = TRUE;
foreach( $_def as $box ) { // nacitanie poli formulara //
if( $box['require'] && ( $_POST[$box['name']] == "" ) ) {
echo 'Vyplňte chýbajúce pole '.$box['description'].'<br />';
// nastavenie priznaku chyby //
$this->ok = FALSE;
}
}
}

// Ak neboli data odoslane, alebo boli nespravne - zobrazi formular //
if( !$this->ok ) {

// Javascript Validator //
echo '
<script language="javascript" type="text/javascript"><!--
function checkValidator() {
var i = 0;
var ok = 0;
var missing = new Array();
var error = "";
';

// Kontrola required poli javascriptom //
// Pre kazde required pole sa generuje podmienka //
foreach( $_def as $box ) { // nacitanie poli formulara //
if( $box['require'] ) { // zisti ci je pole potrebne //
echo ' if( '.$_name.'.'.$box['name'].'.value == "" ) { missing[ok++] = "'.$box['description'].'"; }';
}
}

// Alert okno v pripade ak niektore required pole nie je vyplnene //
// vypise aj nazvy nevyplnenych poli //
echo '
if( ok > 0 ) {
for( i=0; i<ok; i++ )
error += missing[i] + ", ";
error = error.substring( 0, ( error.length - 2 ) );
alert( "Potrebné polia nie sú vyplnené!\nVyplňte prosím " + error );
return false;
} else
return true;
}
--></script>'; // End Javascript Validator //

// Formular Begin //
echo '
<!-- Form 1 begin -->
<form name="'.$_name.'" action="'.$_action.'" method="post" onsubmit="return checkValidator();">
<table border="0" cellspacing="2" cellpadding="0">';

foreach( $_def as $box ) { // nacitanie poli formulara //
switch( $box['type'] ) { // z definicneho pola //
case "input" :
echo cHtml_input::html_input
( $box['name'], $box['description'], $box['size'] );
break;
case 'textarea' :
cHtml_textarea::html_textarea
( $box['name'], $box['description'], $box['cols'], $box['rows'] );
break;
}
}

echo '
<tr><td></td><td>
<input type="submit" name="submit" value="Odoslať" />
</td></tr></table>
</form>
<!-- Form 1 end -->';

} else { // end if( !$this->ok ) //

echo 'Údaje boli odoslané na spracovanie.<br /> <br />';

foreach( $_def as $box ) { // nacitanie poli formulara //
$value = '';
if( isset( $_POST[$box['name']] ) )
$value = htmlspecialchars( trim( $_POST[$box['name']] ) );
echo $box['description'].' - '.$value.'<br />';
}

} // end else { end if( !$this->ok ) //
}

} // end class cForm // --------------------------------------------------------

// Vytvorenie formulara //
// 'formular' - nazov formulara; <form name="formular" ...
// 'index.php' - skript, ktory spracuje formular
// $form - definicne pole, podla ktoreho sa postavi formular
$formular = new cForm( 'formular', 'index.php', $form );

?>

</body></html>
 
Žiadne dokumenty ani odkazy k tejto stránke.

Generátor typoscriptu

Vytvára typoscript pre bežné použitie. Generátor je jednoduchý na obsluhu, stačí vyplniť zopár položiek formulára.

Odkazy