La validación de datos es una parte integral del trabajo con formularios. Los datos enviados no válidos no solo pueden llevar a problemas de seguridad, sino que también pueden dañar su página web. Hoy, analizaremos cómo eliminar caracteres ilegales y validar datos mediante la función "filter_var".
Un ejemplo se puede ver a continuación. Un usuario ha ingresado el texto "No tengo uno" como página de inicio. Si estos datos se ingresaran en una base de datos y luego se recuperaran como un enlace, el enlace se rompería.
La mayoría de las personas tienden a pensar en la validación de datos como un proceso inmensamente tedioso en el que uno:
Hay problemas obvios con lo mencionado anteriormente:
Afortunadamente, a partir de la versión 5.2, PHP ha incluido una gran función llamada filter_var
Eso quita el dolor de la validación de datos.
filter_var
Lo hará, tanto, sanear como validar los datos. Cuál es la diferencia entre los dos?
Nota: ¿Por qué sanear y no solo validar? Es posible que el usuario haya tecleado accidentalmente un carácter incorrecto o que se haya copiado y pegado incorrectamente. Al limpiar los datos, usted asume la responsabilidad de buscar el error del usuario.
filter_var
Utilizando filter_var
Es increíblemente fácil. Es simplemente una función de PHP que toma dos datos:
Por ejemplo, el siguiente código eliminará todas las etiquetas HTML de una cadena:
$ string = "Hola Mundo!
"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string ahora es" Hello, World! "
Aquí hay otro ejemplo - esta vez más difícil. El siguiente código asegurará que el valor de la variable sea una dirección IP válida:
$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip es TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip es FALSO
Así de simple es usar. filter_var
. Para obtener una lista completa de todas las reglas con las que puede verificar, vea el final de este tutorial..
A continuación se muestra un ejemplo rápido de la entrada de desinfección de dos campos: un campo de correo electrónico y un campo de página de inicio. Este ejemplo eliminará cualquier carácter que no deba aparecer en ninguno de los tipos de datos.
"; if (isset ($ _ POST ['homepage')) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"
";?>
Utilizando el FILTER_SANITIZE_EMAIL
y FILTER_SANITIZE_URL
constantes definidas por PHP, el trabajo de adivinar de saber qué personajes son ilegales se ha ido.
El hecho de que los datos estén limpios no garantiza que se formatee correctamente. En el ejemplo a continuación, los datos no tuvieron que ser limpiados, pero es obvio que la entrada del usuario no es un correo electrónico o URL..
Para garantizar que los datos estén correctamente formateados, es necesario validarlos..
"; else echo" $ email es NO una dirección de correo electrónico válida.
"; if (isset ($ _ POST ['homepage')) $ homepage = filter_var ($ _ POST ['homepage', FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ homepage es una URL válida.
"; else echo" $ homepage is NO una URL válida.
";?>
Ahora que los datos han sido validados, puede estar seguro de que la información enviada es exactamente lo que está buscando.
Ahora que el saneamiento y la validación de los datos se han cubierto, pondremos esas habilidades en uso con un formulario de envío rápido por correo electrónico. Esto de ninguna manera será de calidad de producción, por ejemplo, ninguna forma debe requerir una página de inicio, pero funcionará perfectamente para este tutorial. El formulario tomará 4 piezas de información:
Lo desinfectaremos y validaremos contra los 4 datos y solo enviaremos el correo electrónico si todos son válidos. Si algo no es válido, o si algún campo está en blanco, el formulario se presentará al usuario junto con una lista de elementos para corregir. También devolveremos los datos desinfectados al usuario en caso de que no sepan que ciertos caracteres son ilegales.
Para el primer paso, simplemente cree un elemento de formulario con 5 campos: el listado arriba y un botón de envío:
Puede verificar si se envió un formulario al ver si el botón de envío estaba "configurado". Coloque el siguiente código sobre su formulario:
if (isset ($ _ POST ['Enviar']))
Como los campos de nombre y mensaje se limpiarán y validarán de la misma manera, los haremos juntos. Primero, verifique si alguno de los campos está en blanco haciendo lo siguiente:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
A continuación, desinféctelos con el FILTER_SANITIZE_STRING
constante
$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);
Finalmente, asegúrese de que los dos campos aún no estén en blanco. Esto es para asegurarse de que después de eliminar todos los caracteres ilegales, no se quede con un campo en blanco:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
No haremos ninguna validación en estos dos campos simplemente porque no hay una manera absoluta de validar contra un Nombre o mensaje arbitrario.
El código final se ve así:
if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Por favor ingrese un nombre válido.
'; else else $ errors. = 'Por favor ingrese su nombre.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Por favor ingrese un mensaje para enviar.
'; else else $ errors. = 'Por favor ingrese un mensaje para enviar.
';
El campo de correo electrónico se saneará y validará tal como estaba anteriormente en el tutorial.
Primero, asegúrese de que no esté en blanco:
if ($ _POST ['email']! = "")
A continuación, desinfecte:
$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);
Finalmente, valídalo como una verdadera dirección de correo electrónico:
if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))
El código final se ve así:
if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errores. = "$ email es NO una dirección de correo electrónico válida.
"; else $ errors. = 'Por favor ingrese su dirección de correo electrónico.
';
Nuevamente, el campo de la página de inicio se desinfectará y validará de la misma manera que antes en el tutorial..
Primero, asegúrese de que no esté en blanco:
if ($ _POST ['homepage']! = "")
A continuación, desinfecte y elimine cualquier carácter ilegal:
$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)
Finalmente, valídalo para asegurarte de que es una verdadera URL:
if (! filter_var ($ homepage, FILTER_VALIDATE_URL))
El código final se ve así:
if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage es NO una URL válida.
"; else $ errors. = 'Ingrese su página de inicio.
';
Ahora que hemos pasado por todos los campos, es hora de informar los errores o enviar el mensaje. Comience asumiendo que no hubo errores:
si (! $ errores)
Luego construye el mensaje de correo electrónico:
$ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ mensaje = 'De:'. $ _POST ['nombre']. "\norte"; $ mensaje. = 'Correo electrónico:'. $ _POST ['email']. "\norte"; $ mensaje. = 'Página de inicio:'. $ _POST ['página de inicio']. "\norte"; $ mensaje. = "Mensaje: \ n". $ _POST ['mensaje']. "\ n \ n";
Y finalmente, enviar el mensaje:
correo ($ a, $ asunto, $ mensaje);
Sin embargo, si hubo errores, repórtelos y haga que el usuario vuelva a intentarlo:
eco ''. $ errores. '';
El proyecto completado se ve así:
'; else else $ errors. = 'Por favor ingrese su nombre.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errores. = "$ email es NO una dirección de correo electrónico válida.
"; else $ errors. = 'Por favor ingrese su dirección de correo electrónico.
'; if ($ _POST ['homepage']! = "" $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage es NO una URL válida.
"; else $ errors. = 'Ingrese su página de inicio.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Por favor ingrese un mensaje para enviar.
'; else else $ errors. = 'Por favor ingrese un mensaje para enviar.
'; si (! $ errores) $ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ mensaje = 'De:'. $ _POST ['nombre']. "\norte"; $ mensaje. = 'Correo electrónico:'. $ _POST ['email']. "\norte"; $ mensaje. = 'Página de inicio:'. $ _POST ['página de inicio']. "\norte"; $ mensaje. = "Mensaje: \ n". $ _POST ['mensaje']. "\ n \ n"; correo ($ a, $ asunto, $ mensaje); echo "Gracias por tu email!
"; else echo ''. $ errores. ''; ?>
Espero que leer este tutorial te haya dado una buena introducción a las nuevas funciones de filtrado de datos de PHP. Todavía hay muchas más funciones y reglas que no estaban cubiertas, por lo que si está interesado en aprender más, consulte la sección Filtrado de datos en el manual de PHP.