Lunes, 14 Julio 2014 19:52

Validando datos con PHP

Escrito por 
Valora este artículo
(0 votos)

Una de  las tareas de todo programador a la hora de  abocar un desarrollo es imprescindible la validación en la entrada de datos, no se puede dejar que el usuario introduzca cualquier cosa en campos con formato establecido, esto puede causar grandes problemas en la ejecución de la aplicación.

En cuanto a las aplicaciones web podemos decir que tenemos dos posibilidades a la hora de validar entradas.

  • Del lado del cliente
     
  • Del lado del servidor
     

En cuanto a la validación del lado del cliente, para aplicaciones html, podemos usar Java Script, lo cual nos dará la ventaja de interactuar en la misma máquina con el cliente de manera rápida,  sin tener que enviar datos al servidor, pero por otra parte esto es una gran desventaja ya que se puede falsear el código java script  de la pagina y hacer que se envíen datos erróneos al servidor. Fácilmente un informático podría hacer esto con solo modificar el código java script y mandar una respuesta al servidor, modificando parámetros de conexión establecida.
La otra versión de validación es del lado del servidor, que ofrece la ventaja de ser  mucho más segura ya que entrar como un intruso al mismo no es tarea fácil con los mecanismos de seguridad de la actualidad, se tendría que ser un muy buen hacker para entrar al servidor y hacer desastres. La única  pequeña desventaja que se deben enviar datos al servidor pero no es gran cosa esto con el ancho de banda de hoy o con  ajax.
Una conjunción de estas dos maneras de validar datos es una gran idea, ya que primeramente se los puede validar con java script para ofrecer al usuario una buena interacción con  la aplicación (si este no tiene malas intenciones)  y luego revalidar del lado del servidor una vez enviado los datos (para comprobar si realmente son fehaciente los datos y no hubo un falseo de código java script),  así nos aseguramos que los datos son correctos y no hubo ninguna alteración.
En este post veremos cómo validar entrada de datos del lado del servidor con php.
A partir de PHP 5.2.0 y versiones superiores, existe la extensión Filter que ofrece una serie de funciones que facilitan mucho el trabajo de validación y filtrado. La más usada será filter_var(). Osea en php ya están hechas la validaciones, cosa que ya no nos tenemos que preocupar en realizar funciones que validen fatos mas comunes como ser una dirección de correo, una ip, una url etc.
La función tiene el siguiente formato

filter_var($variable, $filter, $options);

En donde

 $variable es la variable a validar
 $filter es el fitro que le aplicaremos a la varialble. Es una constante numérica
 $options (opcional) , conjunto de opciones que modificarán el funcionamiento del filtro. Será una constante numérica o un array

Esta función en caso de pasar la validación (corrrecta) devuelve un valor verdadero, caso contrario falso

A continuación un listado de filtros de validación posibles, para $filter:

FILTER_VALIDATE_BOOLEAN Valida la variable como un booleano.
FILTER_VALIDATE_EMAIL Valida la variable como una dirección de correo electrónico correcta.
FILTER_VALIDATE_FLOAT Valida que la variable sea del tipo float.
FILTER_VALIDATE_INT Valida la variable como un número entero.
FILTER_VALIDATE_IP Valida la variable como una dirección IP.
FILTER_VALIDATE_REGEXP Valida la variable contra una expresión regular enviada en la variable de opciones.
FILTER_VALIDATE_URL Valida el valor coma una URL.

A continuación veremos algunos ejemplos en php
Validando un mail, para esto hacemos uso como siempre de Netbeans
Creamos un proyecto, y en nuestro index.php colocamos las siguientes líneas para ver el funcionamiento de la validación explicada.

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.",FILTER_VALIDATE_EMAIL);
  10. 			if ($var)
  11. 			echo 'MAIL VALIDO';
  12. 			else
  13. 			echo 'MAIL NO VALIDO';
  14. 			?>
  15. 			</body>
  16. 			</html>
  17. 			 
  18. 			 

La función nos devuelve verdadero ya que es un mail valido, la salida es la siguiente

Ahora le sacamos el arroba
 

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("rafahotmail.com",FILTER_VALIDATE_EMAIL);
  10. 			if ($var)
  11. 			echo 'MAIL VALIDO';
  12. 			else
  13. 			echo 'MAIL NO VALIDO';
  14. 			?>
  15. 			</body>
  16. 			</html>

 


Nos  de vuelve falso, al ser un mail invalido, la salida obviamente es la siguiente


Ahora comprobaremos una expresión regular (la utilización de la función mas versátil) por ejemplo en este caso que solo me acepte una cadena de caracteres, sin espacios y sin caracteres especiales ni numericos. Copiamos el siguiente código a nuestro index.php

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("argentina",FILTER_VALIDATE_REGEXP,array('options' => array('regexp' => "/^[a-z\d_]{2,28}$/i")));
  10. 			if ($var)
  11. 			echo 'CADENA VALIDA';
  12. 			else
  13. 			echo 'CADENA NO VALIDA';
  14. 			?>
  15. 			</body>
  16. 			</html>
  17. 			 

Observamos la salida, ya que la función nos devuelve true


Agregamos un arroba a la cadena

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("arge@ntina",FILTER_VALIDATE_REGEXP,array('options' => array('regexp' => "/^[a-z\d_]{2,28}$/i")));
  10. 			if ($var)
  11. 			echo 'CADENA VALIDA';
  12. 			else
  13. 			echo 'CADENA NO VALIDA';
  14. 			?>
  15. 			</body>
  16. 			</html>
  17. 			 

La salida es



Agregamos un espacio

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("arge ntina",FILTER_VALIDATE_REGEXP,array('options' => array('regexp' => "/^[a-z\d_]{2,28}$/i")));
  10. 			if ($var)
  11. 			echo 'CADENA VALIDA';
  12. 			else
  13. 			echo 'CADENA NO VALIDA';
  14. 			?>
  15. 			</body>
  16. 			</html>
  17. 			 

Y la salida es


Por último comprobaremos una dirección IP, tenemos en siguiente código

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("192.3.2.134",FILTER_VALIDATE_IP);
  10. 			if ($var)
  11. 			echo 'DIR IP VALIDA';
  12. 			else
  13. 			echo 'DIR IP NO VALIDA';
  14. 			?>
  15. 			</body>
  16. 			</html>
  17. 			 

Como la dirección IP es valida, la salida es la siguiente


Ahora cambiamos la dirección IP a una no valida

  1. 			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. 			<html>
  3. 			<head>
  4. 			<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. 			<title></title>
  6. 			</head>
  7. 			<body>
  8. 			<?php
  9. 			$var=filter_var("192.333.2.134",FILTER_VALIDATE_IP);
  10. 			if ($var)
  11. 			echo 'DIR IP VALIDA';
  12. 			else
  13. 			echo 'DIR IP NO VALIDA';
  14. 			?>
  15. 			</body>
  16. 			</html>
  17. 			 

La salida es


La función nos devuelve falso ya que  cada octeto binario no debe superar el valor 255 decimal, en este caso “333”.
Bien esto es todo por ahora, la conclusión es que ya no tenemos que realizar funciones nosotros mismos en el caso de PHP, ya están hechas, no vale la pena perder el tiempo inventando algunas, a menos que sea una muy especial…. espero que haya sido de tu ayuda.


 

Visto 501 veces

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.