New question

Question:

Date: 05-02-2015 07:30:29 (In Spanish)

Ayuda para completar una función de sanitización[Resolved]

Hola, estoy completando un codigo que me servirá para satinizar variables de un formulario, quisiera que me ayuden a completar, el primero está, es para comprobar que en una variable solo tenga datos tipo enteros, la segunda necesito para comprobar que sea una cadena pero que solo contenga de la a a la z y la ñ, nada mas, y la tercera para comprobar que sea un correo electronico.
Modo de uso:

$Var_Correo = "Hola@gmail.com";

if(sanitizar($Var_Correo, 3)
{
    print("Si es valido");
}else print("No es valido el correo");

function sanitizar($valor,$clase)
{
	if($clase ==1)
	{	
		if(is_int($valor))
		{
			//si el valor informado es integer, se retorna sin problemas
			return true;
		}
		else
		{
			//si no es integer, se hace un casting a integer, si no puedes hacer el casting devuelve 0
			return false;
		}
	}
	else if($clase ==2)
	{
		//nombres de [A-Za-z]{3,24} minimo 3 caracteres maximo 24
	}
	else if($clase ==3)
	{
		//ayudenme para comprobar un correo electronico de una variable.
	}
} 	
Tags: PHP - Question - Sanitation - Security - Validaciones Votes: 0 - Answers: 11 - Views: 8 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 05-02-2015 18:04:30 Hola Jose,
    Te recomiendo utilizar POO pues tu código puede ser más legible.
    Te paso un ejemplo:

    <?php
    /**
      * Clases y funciones de sanitización
      * Archivo: sanitize.php
      * @package Sanitize
    */
    namespace Sanitize;
    
    class SanitizeClass{
        const INT = 1;
        const STRING = 2;
        const EMAIL = 3;
    
        public static function checkInt($value){
            return filter_var($value, FILTER_VALIDATE_INT);
        }
    
        public static function checkString($value){
            $options = array('options'=>array('regexp'=>'/[a-zA-Z]{3,24}/'));
            return filter_var($value, FILTER_VALIDATE_REGEXP, $options);
        }
    
        public static function checkEmail($value){
            return filter_var($value, FILTER_VALIDATE_EMAIL);
        }
    
        public static function checkValue($value, $type){
            $returnValue = false;
            switch($type){
                case self::INT:
                    $returnValue = self::checkInt($value);
                    break;
                case self::STRING:
                    $returnValue = self::checkString($value);
                    break;
                case self::EMAIL:
                    $returnValue = self::checkEmail($value);
                    break;
                default:
                    break;
            }
            return $returnValue;
        }
    }
    


    Ya teniendo la clase lista en tu código lo mandas a llamar así:

    <?php
    require_once 'sanitize.php';
    
    use \Sanitize\SanitizeClass as SanityClass;
    
    $checaEnteroForma1 = SanityClass::checkInt(5);
    $checaEnteroForma2 = SanityClass::checkValue(5, SanityClass::INT);
    
    $checaStringForma1 = SanityClass::checkString('miCadenaDeCaracteres');
    $checaStringForma2 = SanityClass::checkValue('miCadenaDeCaracteres', SanityClass::STRING);
    
    $checaCorreoForma1 = SanityClass::checkEmail('anonimo@example.com');
    $checaCorreoForma2 = SanityClass::checkValue('anonimo@example.com', SanityClass::EMAIL);
    
    var_dump($checaEnteroForma1,$checaEnteroForma2,$checaStringForma1,$checaStringForma2,$checaCorreoForma1,$checaCorreoForma2);
    
    


    No probé el código porque no tuve tiempo pero debe de darte una idea. No hay mayor ciencia para filtrar valores.
    Personalmente te recomiendo utilizar filter_var sobre todo para validar correos pues hay muchas regexp que aunque parecen funcionar no cubren totalmente la especificación de direcciones de correo válidas.
    Espero que te sirva.
      Votes: 1 - Link answer
     
  • Date: 06-02-2015 05:02:30 Gracias ernesto, muchas gracias, tendo dudas;
    Puedo usar una de las dos? o las dos al mismo tiempo?
    $checaCorreoForma1 = SanityClass::checkEmail('anonimo@example.com');
    $checaCorreoForma2 = SanityClass::checkValue('anonimo@example.com', SanityClass::EMAIL);

    Otra cosa, me explicas que funcion realiza esto?

    var_dump($checaEnteroForma1,$checaEnteroForma2,$checaStringForma1,$checaStringForma2,$checaCorreoForma1,$checaCorreoForma2);


    Te agradesco mucho.
      Votes: 0 - Link answer
     
  • Date: 06-02-2015 06:05:17 Puedes utilizar cualquiera de las dos.

    La parte de var_dump es como ejemplo para que veas lo que tiene cada variable.
      Votes: 1 - Link answer
     
  • Date: 06-02-2015 06:13:52 var_dump es como un printf() ?   Votes: 0 - Link answer
     
  • Date: 06-02-2015 07:35:07 Similar pero no es lo mismo ;)   Votes: 0 - Link answer
     
  • Date: 06-02-2015 08:31:10 Cual es la diferencia :D ?   Votes: 0 - Link answer
     
  • Date: 06-02-2015 08:43:26 De hecho no habia leido bien y me corrijo, no son nada similares printf y var_dump.
    la funcion printf te permite darle formato a una cadena que vas a escupir mientras que var_dump te da informacion acerca de la/las variable(s) que le pasas. Generalmente var_dump se usa para propositos de debuggear un script
      Votes: 1 - Link answer
     
  • Date: 06-02-2015 10:37:28 Mmmm entonces es similar a print() ??   Votes: -1 - Link answer
     
  • Date: 06-02-2015 10:58:43 print y printf son parecidos, son para desplegar una cadena de texto.
    var_dump te da informacion de los parametros que le pases
      Votes: 0 - Link answer
     
  • Date: 06-02-2015 11:08:45 Ok, amigo muchisimas gracias, voy a ver como funciona, gracias por tu tiempo.   Votes: 0 - Link answer
     
  • Date: 06-02-2015 14:50:13 De nada, cualquier duda aquí estamos! Saludos   Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In