elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Ayuda] Validacion de formularios
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Validacion de formularios  (Leído 3,182 veces)
danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
[Ayuda] Validacion de formularios
« en: 11 Enero 2017, 19:15 pm »

Hola de nuevo. !drvy hace unos dias me dijo que la primera regla del desarrollador es no confiar en lo que escriben los usuarios y que tenia que validar los formularios. Pues ayer me propuse intentar validar el formulario de registro de mi proyecto (Aunque solo lo voy a usar yo) y descubrí que es más dificil de lo que pensaba.
Intenté algo como
Código
  1. if (!is_string($nombre))
  2.   {
  3.      echo ("El nombre solo puede contener letras");
  4.   }
  5.  
pero cuando lo probé usando numeros, los asimiló como string y me deja escribirlos. Tendría entonces que validar diciendo que si es int de error, si es float de error y así por cada tipo o hay formas más sutiles y útiles de hacerlo? También está la opción de usar javascript para validar los formularios, pero me gustaría hacer el proyecto lo más puro que pueda en cuanto a los lenguajes. Usar HTML, CSS y PHP&MySqli. Es cierto que tengo 2 script agregados para porpósitos específicos, pero me gustaría validar desde PHP


En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Ayuda] Validacion de formularios
« Respuesta #1 en: 11 Enero 2017, 21:56 pm »

Hola,

is_string lo que valida es si el tipo de variable que le pasas es de tipo string. Eso quiere decir que dependiendo de como se declare la variable dará un resultado u otro.

Para que me entiendas:

Código
  1. $var = array(
  2. 1 => 'esto es un string',
  3. 2 => "esto tambien es string 123",
  4. 3 => "123456",
  5. 4 => 123456
  6. );
  7.  
  8. foreach($var as $test){
  9. var_dump($test);
  10. }

El resultado de esto va a ser:

Código:
string(17) "esto es un string"
string(26) "esto tambien es string 123"
string(6) "123456"
int(123456)

Como ves, PHP y su dynamic typing deciden que todo lo que pongas entre comillas es un string a pesar de que puedas colocar un float o un integer.

Lo mismo va para los datos obtenidos del servidor http. Todos son tipo string.



Para comprobar que una variable solo contiene letras, PHP tiene la función ctype_alpha -> http://php.net/manual/en/function.ctype-alpha.php

Código
  1. if(!ctype_alpha($nombre)){
  2.    die('El usuario debe contener solo letras !');
  3. }

Eso si, ten en cuenta que solo considera caracteres [A-Za-z], es decir, ni espacio, ni números, ni símbolos, ni nada mas que letras del latín básico (otros abecedarios tampoco, para ello debes usar set_locale) por tanto tampoco te acepta la Ç, la Ñ o palabras con acentos.

De forma similar, si quieres comprobar que tienes solo números, puedes usar ctype_digit -> http://php.net/manual/en/function.ctype-digit.php.



También puedes usar expresiones regulares (regex) lo cual en un principio te da algo más de poder en cuanto a que puede entrar y qué no.

Código
  1. $test_string = preg_match("/^[A-Za-z]+$/", $input);

Esto por ejemplo dara true (>0) si el texto solo contiene A-Za-z es decir, latín básico tanto mayúsculas como minúsculas. Es prácticamente igual al ctype_alpha

Si queremos por ejemplo que acepte la ñ y otros puedes añadirlos a la expresión:

Código
  1. $test_string = preg_match("/^[A-Za-zñÑçÇáéóúíÁÉÓÚÍ]+$/", $input);

Mas info sobre expresiones regulares:

http://www.regular-expressions.info/tutorial.html
https://developer.mozilla.org/es/docs/Web/javascript/Guide/Regular_Expressions



La validación de formularios es una tarea bastante tediosa si se hace a mano, por eso cuando pases a usar librerias y frameworks vas a agradecerlo xD

Citar
También está la opción de usar javascript para validar los formularios,

No uses solo javascript. Recuerda que javascript se ejecuta en el lado del cliente y este tiene total libertad sobre lo que puede hacer y lo que no.. en un dado momento, podria deshabilitar por si mismo todas las validaciones si quiere.

Lo ideal es usar ambos. Se agradece mucho que no tenga que volver a introducir todos los datos si es que me he equivocado en algo (y eso con javascript se soluciona) y también se agradece no tener que esperar a que la pagina cargue para que me informe de que he tenido un error.


De todos modos, aparte de javascript tambien tienes HTML5. La mayoria de los navegadores modernos soportan tipos de campo (input) como email, numeric, date, etc.. y tambien soportan expresiones regulares.

Por ejemplo
Código
  1. <!-- Regex -->
  2. <input type='text' name='usuario'
  3. pattern='[A-Za-z]' placeholder='Introduce tu usuario, solo letras.'>
  4.  
  5. <!-- Tipo de campo (solo email) -->
  6. <input type='email' name='correo' placeholder='ejemplo@ejemplo.com'>

Si quieres saber más:

https://developer.mozilla.org/es/docs/Web/HTML/Elemento/input

Saludos


En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [Ayuda] Validacion de formularios
« Respuesta #2 en: 12 Enero 2017, 18:43 pm »

Muchas gracias y perdon por no responder ayer, pero me tuve que ir y no me dio tiempo ni a copiar las cosas. Pero estuve revisando en la casa el manual de PHP que lo descargue en chm y no hay forma de validar las fechas ni los datos booleanos. Por suerte yo puse un calendario que descargue para la fecha que no te deja escribir en el campo. Pero no hay una funcion que lo haga. Aparte de eso, vi que no se puede usar más de un string en el ctype

Código
  1. if (!ctype_alpha($nombre, $apellido))
eso no se puede hacer, hay que hacer algo asi
Código
  1. if (!ctype_alpha($nombre) || !ctype_alpha($apellido)
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: [Ayuda] Validacion de formularios
« Respuesta #3 en: 12 Enero 2017, 21:04 pm »

No evidentemente no se puede hacer aunque con is_string tampoco puedes hacerlo. Puedes crearte un wrapper para estos casos..

Código
  1. function ctype_alpham(){
  2.  
  3.    $args = func_get_args();
  4.  
  5.    foreach($args as $arg){
  6.        if(!ctype_alpha($arg)){
  7.            return false;
  8.        }
  9.    }
  10.  
  11.    return true;
  12. }


o si usas >= PHP 5.6

Código
  1. function ctype_alpham(...$args){
  2.  
  3.    foreach($args as $arg){
  4.        if(!ctype_alpha($arg)){
  5.            return false;
  6.        }
  7.    }
  8.  
  9.    return true;
  10. }


Código
  1. if (!ctype_alpham($nombre, $apellido)) {

En este caso si uno de los argumentos no cumple, toda la función devuelve false.. más o menos como isset.

Saludos
« Última modificación: 12 Enero 2017, 21:08 pm por #!drvy » En línea

danny920825

Desconectado Desconectado

Mensajes: 175


Ver Perfil WWW
Re: [Ayuda] Validacion de formularios
« Respuesta #4 en: 19 Enero 2017, 14:26 pm »

Gracias again. Cada dia algo nuevo que aprender. Ahora estoy un poco enfrascado porque estoy tratando de comprender todos los conceptos de POO para usar CoideIgniter y digamos que me cuesta trabajo. Ya descargue TODA la documentacion de la página de PHP sobre clases. Son cerca de 19 pdf y ni porque está en español. Algo siempre se aprende pero el proceso es lento
En línea

"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda en validacion
Programación C/C++
josue_tux 2 2,472 Último mensaje 25 Mayo 2010, 02:49 am
por nicolas_cof
Ayuda con validacion de formulario PHP « 1 2 »
PHP
oscarj24 10 6,155 Último mensaje 10 Junio 2010, 02:51 am
por oscarj24
Ayuda con doble validacion
Programación C/C++
alvaritoCABJ 1 2,078 Último mensaje 4 Abril 2012, 23:00 pm
por david_BS
AYUDA VALIDACION
Java
taos19 4 2,868 Último mensaje 21 Marzo 2014, 16:06 pm
por taos19
[Ayuda] Ideas para Validacion
PHP
danny920825 2 3,449 Último mensaje 19 Junio 2017, 21:48 pm
por danny920825
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines