I'm trying to create one function (or a proxy function/class) for all business logic and sql sanitization.
$fields = array("username" => "text", "password" => "password", "number" => "number");
$insertValues = array("username" => "user1", "password" => "pass1", "number" => 5);
$min = array("username" => 5, "password" => 6, "number" => 0);
$max = array("username" => 10, "password" => 10 "number" => 100);
function validate($fields, $insertValues, $min, $max, $sql_safe){
$insertValues = "";
$errors = "";
while(list($fieldName, $fieldType) = each($fields)){
if($fieldType == "int"){
$valueList[$fieldName] = intval($insertValues[$fieldName]);
if($valueList[$fieldName] != $insertValues[$fieldName]){
$errors[$fieldName] = "illegal characters found";
}if((($min[$fieldName] != '') && ($valueList[$fieldName] < $min[$fieldName])) || (($max[$fieldName] != '') && ($valueList[$fieldName] > $max[$fieldName]))){
$errors[$fieldName] = "wrong size";
}else{
$errors[$fieldName] = "ok";
}
}else if($fieldType == "float"){
$valueList[$fieldName] = floatval($insertValues[$fieldName]);
if($valueList[$fieldName] != $insertValues[$fieldName]){
$errors[$fieldName] = "illegal characters found";
}if((($min[$fieldName] != '') && ($valueList[$fieldName] < $min[$fieldName])) || (($max[$fieldName] != '') && ($valueList[$fieldName] > $max[$fieldName]))){
$errors[$fieldName] = "wrong size";
}else{
$errors[$fieldName] = "ok";
}
}else{
$valueList[$fieldName] = preg_replace("/[^a-zA-Z0-9]/", "", $insertValues[$fieldName]);
$length = strlen($valueList[$fieldName]);
if($valueList[$fieldName] != $insertValues[$fieldName]){
$errors[$fieldName] = "illegal characters found";
}if((($min[$fieldName] != '') && ($length < $min[$fieldName])) || (($max[$fieldName] != '') && ($length > $max[$fieldName]))){
$errors[$fieldName] = "wrong size";
}else{
$errors[$fieldName] = "ok";
}
}if($sql_safe){
$valueList[$fieldName] = "'".mysql_real_escape_string($valueList[$fieldName])."'";
}
}
$temp["error"] = $error;
$temp["valueList"] = $valueList;
return $temp;
}
Its not quite complete but I thought I'd post what I have so far and get some input/feedback. I intend on adding more business logic ie phone number, postal code validation et al.