Php Programming Code Examples
Php > Php Classes Code Examples
Form is a utility class for generating html forms. It provides form initialization
Form is a utility class for generating html forms. It provides form initialization
and regex based data validation (both server and client side) with a convenient interface
<?php
// This function is needed because unset is current (3.0b6) buggy
// when used for associative arrays.
function myunset($a,$key) {
reset($a);
while ($i = current($a)) {
if ($key != ($k = key($a)))
$t[$k] = $i;
next($a);
}
$a=$t;
}
class form {
var $elements;
var $hidden;
function load_defaults($deflist= "") {
if ($deflist) {
reset($deflist);
$el = $this->elements[current($deflist)];
} else {
reset($this->elements);
$el = current($this->elements);
}
while ($el) {
if (!($eltype = $el[ "type"])) {
$el = current($el);
$eltype = $el[ "type"];
}
$elname = $el[ "name"];
global $$elname;
$elval = $$elname;
switch ($eltype) {
case "text":
case "pass":
case "textarea":
$this->elements[$elname][ "value"] = $elval;
break;
case "checkbox":
if (isset($elval))
$this->elements[$elname][ "checked"] = "yes";
else
$this->elements[$elname][ "checked"] = "no";
break;
case "radio":
reset ($this->elements[$elname]);
while ($temp = current($this->elements[$elname])) {
$temp[ "checked"] = "no";
next($this->elements[$elname]);
}
$this->elements[$elname][$elval][ "checked"] = "yes";
break;
case "select":
case "select multiple":
$this->elements[$elname][ "value"] = $elval;
$elops = $this->elements[$elname][ "options"];
if (is_array($elops)) {
reset($elops);
$elops = current($elops);
if (isset($this->elements[$elname][ "valid_e"]) &&
!((is_array($elops) && (($elops[ "label"] == $elval) ||
($elops[ "value"] == $elval))) ||
($elops == $elval))) {
myunset(&$this->elements[$elname][ "options"],0);
unset($this->elements[$elname][ "valid_e"]);
}
}
break;
}
if ($deflist) {
next($deflist);
$el = $this->elements[current($deflist)];
} else {
next($this->elements);
$el = current($this->elements);
}
}
}
function start($jsv_name= "",$method= "",$action= "",$target= "") {
global $PHP_SELF;
if (!$method) $method = "POST";
if (!$action) $action = $PHP_SELF;
if (!$target) $target = "_self";
if ($jsv_name) {
echo "<script language=\"javascript\">\n<!--\n";
echo "function ${jsv_name}_Validator(f) {\n";
reset($this->elements);
while ($el = current($this->elements)) {
if (!$el[ "type"])
$el = current($el);
$elname = $el[ "name"];
$eltype = $el[ "type"];
switch ($eltype) {
case "text":
case "password":
$el_e = $el[ "length_e"];
if ($elmin = $el[ "min_l"]) {
echo "if (f.${elname}.value.length < $elmin) {\n";
echo "alert(\"$el_e\");\n";
echo "f.${elname}.focus();\n";
echo "return(false);\n}\n";
}
if ($el_e = $el[ "valid_e"]) {
$el_re = $el[ "valid_regex"];
echo ( "if (window.RegExp) {\n");
echo "var reg = new RegExp(\"$el_re\");\n";
echo "if (!reg.test(f.${elname}.value)) {\n";
echo "alert(\"$el_e\");\n";
echo "f.${elname}.focus();\n";
echo "return(false);\n";
echo "}\n}\n";
}
break;
case "radio":
if ($el_e = $el[ "valid_e"]) {
echo "var l = f.${elname}.length;\n";
echo "var radioOK = false;\n";
echo "for (i=0; i<l; i++)\n";
echo "if (f.${elname}[i].checked) {\n";
echo "radioOK = true;\n";
echo "break;\n";
echo "}\n";
echo "if (!radioOK) {\n";
echo "alert(\"$el_e\");\n";
echo "return(false);\n";
echo "}\n";
}
break;
case "select":
if ($el_e = $el[ "valid_e"]) {
echo "if (f.${elname}.selectedIndex == 0) {\n";
echo "alert(\"$el_e\");\n";
echo "f.${elname}.focus();\n";
echo "return(false);\n";
echo "}\n";
}
break;
}
next($this->elements);
}
echo "}\n//-->\n</script>\n";
echo "<form method=\"$method\" ";
echo "action=\"$action\" ";
echo "target=\"$target\" ";
echo "onsubmit=\"return ${jsv_name}_Validator(this)\">\n";
}
else
echo "<form method=\"$method\" action=\"$action\" target=\"$target\">";
}
function finish() {
if ($this->hidden) {
reset($this->hidden);
while ($elname = current($this->hidden)) {
$elval = $this->elements[$elname][ "value"];
echo "<input type=\"hidden\" name=\"$elname\" value=\"$elval\">\n";
next($this->hidden);
}
}
echo "</form>\n";
}
function validate($default,$vallist= "") {
if ($vallist) {
reset($vallist);
$el = $this->elements[current($vallist)];
} else {
reset($this->elements);
$el = current($this->elements);
}
while ($el) {
if (!$el[ "type"])
$el = current($el);
$elname = $el[ "name"];
$eltype = $el[ "type"];
global $$elname;
$elval = $$elname;
switch ($eltype) {
case "text":
case "password":
$el_e = $el[ "length_e"];
if (($elmin = $el[ "min_l"]) && strlen($elval) < $elmin)
return $el_e;
$elreg = $el[ "valid_regex"];
if (($el_e = $el[ "valid_e"]) && !ereg($elreg,$elval))
return $el_e;
break;
case "radio":
if (($el_e = $el[ "valid_e"]) && !$elval)
return $el_e;
break;
case "select":
if ($el_e = $el[ "valid_e"]) {
$elops = $el[ "options"];
reset($elops);
$elops = current($elops);
if (is_array($elops))
$elops = $elops[ "value"];
if ($elval == $elops)
return $el_e;
}
break;
}
if ($vallist) {
next($vallist);
$el = $this->elements[current($vallist)];
} else {
next($this->elements);
$el = current($this->elements);
}
}
return($default);
}
function add_element($el) {
if (($el[ "type"] != "radio") && ($el[ "type"] != "submit"))
$this->elements[$el[ "name"]] = $el;
else
$this->elements[$el[ "name"]][$el[ "value"]] = $el;
if ($el[ "type"] == "hidden")
$this->hidden[] = $el[ "name"];
}
function show_element($name,$value= "") {
if ($value)
$el = $this->elements[$name][$value];
else
$el = $this->elements[$name];
$eltype = $el[ "type"];
$elname = $el[ "name"];
$elvalue = $el[ "value"];
$elextrahtml = $el[ "extra_html"];
switch ($eltype) {
case "text":
case "password":
echo "<input type=\"$eltype\" name=\"$elname\" value=\"$elvalue\"";
if ($el[ "max_l"]) {
$elmaxl = $el[ "max_l"];
echo " maxlength=\"$elmaxl\"";
}
if ($elsize = $el[ "size"])
echo " size=\"$elsize\"";
echo " $elextrahtml>\n";
break;
case "image":
echo "<input type=\"$eltype\" name=\"$elname\" value=\"$elvalue\"";
$elsrc = $el[ "src"];
echo "src=\"$elsrc\" $elextrahtml>\n";
break;
case "checkbox":
case "radio":
if (($elchk = $el[ "checked"]) && $elchk != "no")
$elextrahtml .= " checked";
case "hidden":
case "submit":
case "reset":
echo "<input type=\"$eltype\" name=\"$elname\" value=\"$elvalue\"";
echo " $elextrahtml>\n";
break;
case "textarea":
$elrows = $el[ "rows"];
$elcols = $el[ "cols"];
$elwrap = $el[ "wrap"];
echo "<textarea name=\"$elname\" ";
echo "rows=\"$elrows\" cols=\"$elcols\" wrap=\"$elwrap\"";
echo " $elextrahtml>\n";
echo "$elvalue";
echo "</textarea>";
break;
case "select":
case "select multiple":
$elsize = $el[ "size"];
$elops = $el[ "options"];
echo "<$eltype name=\"$elname";
if ($eltype == "select multiple")
echo "[]\"";
else
echo "\"";
if ($elsize)
echo " size=\"$elsize\"";
echo " $elextrahtml>\n";
if (is_array($elops))
while ($curop = current($elops)) {
echo "<option";
if (is_array($curop)) {
$curval = $curop[ "value"];
$curop = $curop[ "label"];
echo " value=\"$curval\"";
}
if (is_array($elvalue)) {
reset($elvalue);
while ($temp = current($elvalue)) {
if ($temp == $curval || $temp == $curop)
echo " selected";
next($elvalue);
}
} elseif ((isset($curval) && ($elvalue == $curval))
|| strval($elvalue) == strval($curop))
echo " selected";
echo ">$curop</option>\n";
next($elops);
}
echo "</select>\n";
break;
}
}
}
?>