30/07/2011, 01:36
|
| | Fecha de Ingreso: noviembre-2009
Mensajes: 226
Antigüedad: 15 años Puntos: 19 | |
Respuesta: [aporte] sistema de validación de datos Hola a todos! Código PHP: <?php
/* This script remains free until these lines are changed or removed
// +------------------------------------------------------------------------------------+
// | class.Validation.php : Allows you to validate any type of data sent by users |
// |------------------------------------------------------------------------------------|
// | This program is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU General Public License |
// | as published by the Free Software Foundation of the License |
// | |
// | This program is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// | GNU General Public License for more details. |
// |------------------------------------------------------------------------------------|
// | Name of the script : class.Validate.php |
// | Author : Magd Kudama <[email protected]> |
// | Version : v1.0 |
// | URL : magdkudama.com/blog |
// +------------------------------------------------------------------------------------+
*/
class Validation
{
var $error_level;
var $enviornment;
var $count_elements=0;
var $accnum="0";
var $accsp="0";
var $add_called=false;
var $dec="<strong>ERROR:</strong> ";
var $elements=array();
var $errors_in_validation="";
var $count;
var $field;
var $type;
var $min;
var $max;
var $numdec;
var $sql="0";
var $sep;
var $only;
var $minchr;
var $maxchr;
var $tfh;
var $like;
var $minsize;
var $maxsize;
var $accformats;
var $mindate;
var $maxdate;
var $element_separator="|";
function is_assoc($arr)
{
return array_keys($arr)!==range(0,count($arr)-1);
}
private function showErrors($error)
{
die($error);
}
private function showValidation($text="")
{
$sep=$this->element_separator;
return empty($text) ? "1".$sep : ($this->error_level=="specific" ? $text.$sep : "0".$sep);
}
public function __construct($error_level,$enviornment="development")
{
$this->setErrorLevel($error_level);
$this->setEnviornment($enviornment);
}
private function setErrorLevel($error_level)
{
if(in_array($error_level,array("specific","general")))
$this->error_level=$error_level;
else
$this->showErrors($this->dec."You are not assigning a correct <strong>ERROR_LEVEL</strong>!");
}
private function setEnviornment($enviornment)
{
if(in_array($enviornment,array("development","production")))
$this->enviornment=$enviornment;
else
$this->showErrors($this->dec."You are not assigning a correct <strong>ENVIORNMENT</strong>!");
}
public function numberOfElements()
{
if($this->add_called)
return $this->count;
else
$this->showErrors($this->dec."You must call <em>addArray</em> before you call <em>numberOfElements</em>");
}
private function checkProperties($array)
{
$required_properties=array("type","force","name","value");
if(!is_array($array))
$this->showErrors($this->dec."You must give an <em>array</em> of elements in order to check properties correctly");
if(!$this->is_assoc($array))
$this->showErrors($this->dec."You must give an <em>array</em> of properties!");
$array_keys=array_keys($array);
if(in_array("valid",$array_keys) && count($array_keys)!=4) {
if(count($array_keys)!=4)
$this->showErrors($this->dec."If you declare an array of valid values, you must only specify <em>name</em>, <em>force</em>, <em>valid</em> and the <em>value</em>");
if(!is_array($array["valid"]))
$this->showErrors($this->dec."The propertie <em>value</em> must be an array");
}
if(in_array("valid",$array_keys))
array_shift($required_properties);
else {
if($array["type"]=="hour" && !isset($array["sep"]))
$this->showErrors($this->dec."You must give the propertie <em>sep</em> with an hour");
}
for($i=0;$i<count($required_properties);$i++)
if(!in_array($required_properties[$i],$array_keys))
$this->showErrors($this->dec."An element of the <em>array</em> has no ".$required_properties[$i]." declared");
if(count($array_keys)>8)
$this->showErrors($this->dec."Maximum of 8 properties per element exceeded");
foreach($array as $key => $propertie)
{
switch($key)
{
case ($key=="min" || $key=="max" || $key=="numdec"):
if(!is_numeric($propertie))
$this->showErrors($this->dec."The properties <em>min</em>, <em>max</em> and <em>numdec</em> must be numeric");
break;
case "sep":
if(strlen($propertie)!=1)
$this->showErrors($this->dec."The properties <em>sep</em> must only have 1 character");
break;
case ($key=="sql" || $key=="tfh" || $key=="acc_num" || $key=="force"):
if(!in_array($propertie,array("1","0")))
$this->showErrors($this->dec."The properties <em>sql</em>, <em>acc_num</em>, <em>force</em> and <em>24h</em> must be in (0,1)");
case ($key=="minchr" || $key=="maxchr"):
if($propertie<0)
$this->showErrors($this->dec."The properties <em>$key</em> must be higher than 0");
if($key=="minchr")
if((isset($array["maxchr"]) && $array["maxchr"]<$propertie))
$this->showErrors($this->dec."The properties <em>minchr</em> must be smaller than <em>maxchr</em>");
else
if(isset($array["minchr"]) && $array["minchr"]>$propertie)
$this->showErrors($this->dec."The properties <em>maxchr</em> must be greater than <em>minchr</em>");
break;
case ($key=="minsize" || $key=="maxsize"):
if($propertie<0)
$this->showErrors($this->dec."The properties <em>$key</em> must be higher than 0");
if($key=="minsize")
if((isset($array["maxsize"]) && $array["maxsize"]<$propertie))
$this->showErrors($this->dec."The propertie <em>minsize</em> must be smaller than <em>maxsize</em>");
else
if(isset($array["minsize"]) && $array["minsize"]>$propertie)
$this->showErrors($this->dec."The propertie <em>maxsize</em> must be greater than <em>minsize</em>");
break;
case ($key=="mindate" || $key=="maxdate"):
if($key=="mindate")
if((isset($array["maxdate"]) && $array["maxdate"]<$propertie))
$this->showErrors($this->dec."The propertie <em>mindate</em> must be smaller than <em>maxdate</em>");
else
if(isset($array["mindate"]) && $array["mindate"]>$propertie)
$this->showErrors($this->dec."The propertie <em>maxdate</em> must be greater than <em>mindate</em>");
break;
case "like":
if(substr($propertie,0,1)!="%" && substr($propertie,-1)!="%")
$this->showErrors($this->dec."The propertie <em>like</em> must have at least 1 character '%'");
break;
case "only":
if(!in_array(strtolower($propertie),array("ipv4","ipv6")))
$this->showErrors($this->dec."The propertie <em>only</em> must be in (ipv4,ipv6)");
break;
case "type":
$types=array("integer","float","date","dni","email","url","string","file","ip","pass","hour");
if(!in_array($propertie,$types))
$this->showErrors($this->dec."The type <em>".$propertie."</em> is unknown!");
break;
case "name":
if(!ctype_alnum($propertie))
$this->showErrors($this->dec."The propertie <em>name</em> must be alphanumerical");
break;
case "value":
break;
case "valid":
if(!is_array($propertie))
$this->showErrors($this->dec."The propertie <em>valid</em> must be an array");
if($this->is_assoc($propertie))
$this->showErrors($this->dec."The propertie <em>valid</em> must not be an associative array");
break;
case "accformats":
if(!is_array($array["accformats"]))
$this->showErrors($this->dec."The propertie <em>accformats</em> must be an array");
break;
default:
$this->showErrors($this->dec."The propertie <em>$key</em> is unknown!");
}
}
}
public function addArray($array)
{
if(!is_array($array))
$this->showErrors($this->dec."You must give an <em>array</em> as parameter");
if(!$this->add_called) {
$this->count=count($array);
if($this->enviornment=="development") {
for($i=0;$i<$this->count;$i++)
$this->checkProperties($array[$i]);
}
$this->elements=$array;
$this->add_called=true;
}
else
$this->showErrors($this->dec."The method <em>addArray</em> can only be called once");
} Esta es la primera parte del code (no me deja subir más de 10000 caracteres). |