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>