<?php
class Validar_campos {
public $campos = array();
public $mensaje = array();
public $html = true;
public function Validar_campos() {
$this->mostrar_error();
}
public function validar() {
$estado = 0;
foreach ($this->campos as $key => $val) {
switch ($val['tipo']) {
case "entero":
if (!$this->validar_numero($val['valor'], $key, $val['longitud'], $val['obligatorio'])) {
$estado++;
}
break;
case "decimal":
if (!$this->validar_decimal($val['valor'], $key, $val['decimales'], $val['obligatorio'])) {
$estado++;
}
break;
case "texto":
if (!$this->validar_texto($val['valor'], $key, $val['longitud'], $val['obligatorio'])) {
$estado++;
}
break;
}
if ($this->html) {
if (!$this->validar_html($val['valor'], $key)) {
$estado++;
}
}
}
if ($estado == 0) {
return true;
} else {
$this->mensaje[] = $this->error(0);
return false;
}
}
public function campo_texto($nombre, $val, $tipo = "texto", $obligatorio = "si", $longitud = 0) {
$this->campos[$nombre]['valor'] = $val;
$this->campos[$nombre]['tipo'] = $tipo;
$this->campos[$nombre]['obligatorio'] = $obligatorio;
$this->campos[$nombre]['longitud'] = $longitud;
}
public function campo_numero($nombre, $val, $tipo = "entero", $obligatorio = "si", $decimales = 0, $longitud = 0) {
$this->campos[$nombre]['valor'] = $val;
$this->campos[$nombre]['tipo'] = $tipo;
$this->campos[$nombre]['obligatorio'] = $obligatorio;
$this->campos[$nombre]['decimales'] = $decimales;
$this->campos[$nombre]['longitud'] = $longitud;
}
public function validar_numero($numero, $campo, $numero_longitud = 0, $obligatorio = "no") {
if ($numero == "") {
if ($obligatorio == "si") {
$this->mensaje[] = $this->error(1, $campo);
return false;
} else {
return true;
}
} else {
$patron = ($numero_longitud == 0) ? "/^\-?[0-9]*$/" : "/^\-?[0-9]{0,".$numero_longitud."}$/";
if (preg_match($patron, $numero)) {
return true;
} else {
$this->mensaje[] = $this->error(12, $campo);
return false;
}
}
}
public function validar_texto($texto, $campo, $texto_longitud = 0, $obligatorio = "si") {
if (empty($texto)) {
if ($obligatorio == "si") {
$this->mensaje[] = $this->error(1, $campo);
return false;
} else {
return true;
}
} else {
if ($texto_longitud > 0) {
if (strlen($texto) > $texto_longitud) {
$this->mensaje[] = $this->error(13, $campo);
return false;
} else {
return true;
}
} else {
return true;
}
}
}
public function validar_decimal($numero_decimal, $campo, $decimales = 2, $obligatorio = "no") {
if ($numero_decimal == "") {
if ($obligatorio == "si") {
$this->mensaje[] = $this->error(1, $campo);
return false;
} else {
return true;
}
} else {
$patron = "/^[-]*[0-9][0-9]*\.[0-9]{".$decimales."}$/";
if (preg_match($patron, $numero_decimal)) {
return true;
} else {
$this->mensaje[] = $this->error(12, $campo);
return false;
}
}
}
public function validar_html($valor, $campo) {
if (preg_match("/<[a-z1-6]+((\s[a-z]{2,}=['\"]?(.*)['\"]?)+(\s?\/)?)*>(<\/[a-z1-6]>)?/i", $valor)) {
$this->mensaje[] = $this->error(15, $campo);
return false;
} else {
return true;
}
}
public function mostrar_error($separador = "<br />") {
$mensaje_error = "";
krsort($this->mensaje);
reset($this->mensaje);
foreach ($this->mensaje as $valor) {
$mensaje_error .= $valor.$separador."\n";
}
return $mensaje_error;
}
public function error($numero, $campo = "") {
$campo = str_replace("_", " ", $campo);
$error[0] = "Por favor corrija los siguientes errores:";
$error[1] = "El campo <b>".$campo."</b> está vacío.";
$error[10] = "La fecha del campo <b>".$campo."</b> no es válida.";
$error[11] = "La dirección de correo electrónico del campo <b>".$campo."</b> no es válida.";
$error[12] = "El valor en el campo <b>".$campo."</b> no es válido.";
$error[13] = "El texto en el campo <b>".$campo."</b> es demasiado largo.";
$error[14] = "La URL en el campo <b>".$campo."</b> no es válida.";
$error[15] = "Hay código HTML en el campo <b>".$campo."</b>, esto no está permitido.";
return $error[$numero];
}
}
?>