Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: mark182 en 29 Agosto 2010, 23:30 pm



Título: Problema con una clase
Publicado por: mark182 en 29 Agosto 2010, 23:30 pm
Buenas, la verdad que recien estoy arrancando con POO en PHP y me encontre con mi primer problema que nose cual puede ser la solucion ya que prove diferentes cosas. Bien paso a explicar, tengo dos clases: Validar y Persona, la idea es pasarle las variables del formulario a un metodo de Persona que setiara la variable validada, para esto, el metodo de la clases Persona, llama a metodos de la clase Validar que valida que no tenga caracteres extraños ni que este en blanco la variable. A continuacion les pongo el source de cada clase:

Persona:

Código:
<?php
include("Validar.php");

class Persona extends Validar
{
private $verificacion;

public function setUsPass($usPass)
    {
        if($this->variableVacia($usPass) == 0)
        {
            if($this->validaUsPass($usPass) == 1)
            {
                $this->verificacion= 1;
                return $this->verificacion;
            }
            else
            {
                $this->verificacion= 0;
                return $this->verificacion;
            }
        }
        else
        {
            $this->verificacion= 0;
            return $this->verificacion;
        }
    }
}

Validar:
Código:
class Validar
{
    private $bien;

public function variableVacia($variable)
    {
        if(empty($variable) == 1)
        {
            $this->bien= 1;
            return $this->bien;
        }
        else
        {
            $this->bien= 0;
            return $this->bien;
        }
    }

    public function validaUsPass($varible)
    {
        if(ereg("^[a-zA-Z0-9]{1,15}$",$variable) == 1)
        {
            $this->bien= 1;
            return $this->bien;
        }
        else
        {
            $this->bien= 0;
            return $this->bien
        }
    }
}

Main:
Código:
$usuario = $_POST["us"];
$personas= new Persona;

if($personas->setUsPass($usuario) == 0 )
{
    $msjUs=1;
    $error=1;
}

if($msjUs == 1)
    echo '<li class="error">El usuario ingresado es incorrecto.</li>';


Bien, el problema es el siguiente: Al parecer esta validando correctamente cuando la variable esta en blanco y cuando no, ya que hice varios juegos de prueba descartando la parte que hace la validacion sobre los caracteres y funciona correctamente. Pero con la parte de validar caracteres extraños me esta trayendo problemas ya que me esta dando siempre que el usuario es incorrecto, o sea que la variable tiene caracteres extraños.

Que es lo que esta ocurriendo? ya probe varias cosas y no pude solucionarlo. Muchas gracias.


Título: Re: Problema con una clase
Publicado por: novalida en 30 Agosto 2010, 11:23 am
hola, creo que encontré el fallo.
En la función validaUsPass recibes un parámetro llamado $varible y dentro de la función utilizas una variable llamada $variable por lo que siempre trabajarás con una variable (perdón por la redundancia) que no tendrá ningún contenido y de ahí que no pase la validación.
En la última línea de la clase validar faltaría también el ; (por si acaso ;))

Espero que te haya podido ayudar :)

Saludos.


Título: Re: Problema con una clase
Publicado por: ~ Yoya ~ en 30 Agosto 2010, 19:43 pm
Buenas, nose porque utilizas de esa forma una subclase, cuando se utiliza una subclase se busca optimizar pero haces lo contrario xD...

Bueno, aquí una clase que hice, que hace lo mismo pero en menos lineas xD.

validar.php
Código
  1. <?php
  2. class Persona
  3. {
  4. private $verificacion;
  5.  
  6. public function setUsPass($pass)
  7. {
  8.  if(ereg("^[a-zA-Z0-9]{1,15}$",$pass))
  9.  {
  10.    $this->verificacion=1;
  11.    return $this->verificacion;
  12.  }else{
  13.  $this->verificacion=0;
  14.  return $this->verificacion;
  15.  }
  16.  
  17. }
  18. }
  19.  
  20. ?>

Puedes verificar desde la misma expresión que hiciste si el código contiene espacio en blanco y que permita solo caracteres alfanumérico...

Main
Código
  1. <?php
  2. include("validar.php");
  3.  
  4. $usuario = $_POST["us"];
  5. $personas= new Persona;
  6.  
  7. //Definimos las variables...
  8. $msjUs = null;
  9. $error = null;
  10. if(!$personas->setUsPass($usuario))
  11. {
  12.    $msjUs=1;
  13.    $error=1;
  14. }
  15.  
  16. if($msjUs == 1){
  17.     echo '<li class="error">El usuario ingresado es incorrecto.</li>';
  18. }
  19.  
  20. ?>


Título: Re: Problema con una clase
Publicado por: mark182 en 30 Agosto 2010, 21:42 pm
Gracias por sus dos respuestas.

Citar
Buenas, nose porque utilizas de esa forma una subclase, cuando se utiliza una subclase se busca optimizar pero haces lo contrario xD

La verdad es que recien estoy comenzando con POO, y se me habia ocurrido que tener una clase que tenga varios metodos para validar distintas cosas (que es la clase Validar), por eso es que hago eso. Puede ser que no sea los mas optimo, ya que como recien arranco en POO no tengo muy en claro las formas de optimizar. Muchas gracias igualmente.