Easyform Test
Functions used:
<?PHP
/*
Easyform developer edition
version 1.0 01.05.2003
written by Chris Heilmann
more info: http://www.onlinetools.org/articles/easyform/
*/
function check(){
if ($_POST!=''){
$sentarray=array();
$tocheck=explode(',',$_POST['required']);
$error[0]="Errors:";
foreach ($tocheck as $t){if(!array_key_exists($t,$_POST)){$error[]=$t;}}
foreach (array_keys($_POST) as $p){
if(!preg_match('/initvalue/',$p) and !preg_match('/required/',$p)){
$sentarray[$p]=$_POST[$p]==$_POST[$p.'initvalue']?'':$_POST[$p];
}
foreach ($tocheck as $c){
if ($p==$c and $sentarray[$p]==''){
$error[]=$_POST[$p.'initvalue'];
}
}
}
return $error[1]==''?$sentarray:$error;
}
}
function add($f){
global $errorindicator,$errorclass,$Javascript;
$tocheck=explode(',',','.$_POST['required']);
preg_match('/id="(.*?)"/i',$f,$i);
preg_match('/name="(.*?)"/i',$f,$n);
preg_match('/type="(.*?)"/i',$f,$t);
preg_match('/value="(.*?)"/i',$f,$iv);
$n=$n[1];$iv=$iv[1];$i=str_replace('_',' ',$i[1]);
if(preg_match('/<textarea/',$f)){
$v=$_POST[$n]==''?$i:$_POST[$n];
$f=preg_replace('/<textarea(.*?)>(.*?)<\/textarea>/',
'<textarea\\1>'.stripslashes(htmlentities($v)).'</textarea>',$f);
if($Javascript){$f=preg_replace('/<textarea/','<textarea
onfocus="this.value=this.value==\''.$i.'\'?\'\':this.value"',$f);}
}
if(preg_match('/<select/',$f)){
preg_match('/<select.*?>/',$f,$st);
preg_match_all('/<option
value="(.*?)">(.*?)<\/option>/',$f,$allopt);
foreach ($allopt[0] as $k=>$a){
if($_POST[$n]==$allopt[1][$k] || ($_POST[$n]=='' && $k==0)){
$preg='/<option value="';
$preg.=$allopt[1][$k].'">'.$allopt[2][$k].'<\/option>/si';
$rep='<option selected="selected" value="';
$rep.=$allopt[1][$k].'">'.$allopt[2][$k].'</option>';
$f=preg_replace($preg,$rep,$f);
}
}
}else{
switch ($t[1]){
case 'text':
$v=$_POST[$n]==''?'value="'.$i.'"':'value="'.stripslashes(htmlentities($_POST[$n])).'"';
$f=preg_replace('/<input/','<input '.$v,$f);
if($Javascript){$f=preg_replace('/<input/','<input
onfocus="this.value=this.value==\''.$i.'\'?\'\':this.value"',$f);}
break;
case 'checkbox':
$v=$_POST[$n]=='on'?' checked="checked"':'';
$f=preg_replace('/<input/','<input'.$v,$f);
break;
case 'radio':
$f=preg_replace('/checked.*?\s/','',$f);
$v=$_POST[$n]==$iv?' checked="checked"':'';
$f=preg_replace('/<input/','<input'.$v,$f);
break;
}
}
$f.='<input type="hidden" name="'.$n.'initvalue"
value="'.$i.'" />';
if (array_search($n,$tocheck) and ($_POST[$n]=='' or $_POST[$n]==$i)){
if($errorindicator!=''){$f=$errorindicator.$f;}
if($errorclass!=''){$f=preg_replace('/name=/i','class="'.$errorclass.'"
name=',$f);}
}
return $f;
}
?>
HTML and implementation:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<title>Form example</title>
<link rel="StyleSheet" href="styles.css"
type="text/css">
</head>
<body>
<h1>Easyform Test</h1>
<div id="form">
<ul>
<li><a href="showsrc.php">See the example
sources</a></li>
<li><a href="formexample.zip">Download
examples</a></li>
</ul>
<?PHP
include_once('easyform.php');
$errorindicator='<img src="alert.gif" width="20"
height="20" alt="Alert" title="Indicator for missing
form element" border="0" />';
$errorclass="error";
$Javascript=true;
$results=check();
if($results[0]=='Errors:'){
?>
<h2 class="errorhead">There has been an error:</h2>
<p>You forgot to enter the following field(s)</p>
<ul>
<?PHP foreach ($results as $i=>$e){if ($i>0){echo
"<li>$e</li>";}}?>
</ul>
<?PHP }else if ($results['Name']!=''){ ?>
<h2 class="thankshead">Thank you for sending your
data</h2>
<?PHP }?>
<form method="post"
action="<?=$_SERVER['PHP_SELF']?>">
<input type="hidden" name="required"
value="Name,SurName,live,message" />
<fieldset>
<legend>Identification</legend>
<label for="your_name">Name:</label>
<?=add('<input type="text" name="Name"
id="Your_Name" />')?><br />
<label for="your_surname">Surname:</label>
<?=add('<input type="text" name="SurName"
id="Your_Surname" />')?>
</fieldset>
<fieldset>
<legend>Gender and age</legend>
<label for="Age">Age:</label>
<?=add('
<select name="Age">
<optgroup label="Non-Teen">
<option value="5">Under 5</option>
<option value="9">Five to Ten</option>
</optgroup>
<optgroup label="Teen">
<option value="10">Aspiring Teen</option>
<option value="15">Mid Teen</option>
<option value="19">End Teen</option>
</optgroup>
<optgroup label="Twen">
<option value="20">Aspiring Twen</option>
<option value="25">Mid Twen</option>
<option value="29">End Twen</option>
</optgroup>
<optgroup label="Above">
<option value="30">30ies</option>
<option value="40">40ies</option>
<option value="over50">Above</option>
</optgroup>
</select>
')?>
<strong>Gender:</strong>
<?=add('<input type="radio" name="Gender"
id="Male" checked="checked" value="Male"
/>')?>
<label for="Male">Male</label>
<?=add('<input type="radio" name="Gender"
id="Female" value="Female" />')?>
<label for="Female">Female</label>
</fieldset>
<fieldset>
<legend>Enter your message</legend>
<p><?=add('<input type="checkbox" name="live"
id="live" />')?>
<label for="live">Publish to live</label></p>
<p><label for="your_message">Your
Message:</label></p>
<?=add('<textarea name="message" id="Your_message"
cols="30" rows="10"></textarea>')?>
</fieldset>
<p align="right"><input type="submit"
value="Send" /></p>
</form>
</div>
</body>
</html>