Comunidad PHPeros

Lenguajes => PHP => (POO) Programación Orientada a Objetos => Mensaje iniciado por: Jumarras en 25 de Septiembre de 2010, 16:07:47 pm

Título: [Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Jumarras en 25 de Septiembre de 2010, 16:07:47 pm
Hola, hace mucho que no comento nada en el foro, siempre hos adelantais a las respuestas xD. Bueno, pues he estado empezando a mirar un poco el POO, y la verdad, me ha parecido sencillo (cuando he visto el sistema de login de siquillote y algun otro post). El caso es que he estado pasando mis archivos que tenia hechos, como el sistema de usuarios, a POO, y me gustaria compartirlo con vosotros. Se parece al sistema de loguin de siquillote, pero este lo hice yo usando de base mi login. Asi que esta comprobado que funciona correctamente.

Este sistema ya viene protegido contra MySQL Injection, o eso creo, porque los $_POST estan filtrados. La contraseña de los usuarios esta encriptado en MD5. Aun asi me gustaria que le hechaseis un vistazo y comentarlo para haber como puedo mejorarlo o lo que sea.

Salu2

login.php
Código: [Seleccionar]
<?php
class login
{
    public 
$user;
    public 
$post_password;
    public 
$query;
    public 
$mysql_password;
    public 
$error;
    public 
$ok;
    public 
$numrows;
    public 
$fields;

    public function 
__construct($username$password)
    {    
        include 
"config.php";
        
$this->user                 =    $username;
        
$this->post_password    =    $password;
        
$this->query             =    mysql_query("SELECT * FROM users WHERE username = &#39;".$this->user."&#39;");
        
$this->mysql_password    =    mysql_fetch_array($this->query);
        
$this->numrows            =    mysql_num_rows($this->query);
        
$this->error            =    "Nombre de usuario o contraseña incorrectos.";
        
$this->ok                =    "Bienvenido ".$this->user.". Te has logueado correctamente.";
        
$this->fields            =    "Por favor, rellena todos los campos.";
    }
    public function 
check()
    {
        if(
$this->user && $this->post_password)
        {
            if(
$this->numrows !=0)
            {
                if(
$this->mysql_password[&#39;password&#39;] == md5($this->post_password))
                
{
                    
session_start();
                    
$_SESSION[&#39;username&#39;] = $this->user;
                    
echo $this->ok;
                }
                else
                {
                    echo 
$this->error;
                }
            }
            else
            {
                echo 
$this->error;
            }
        }
        else
        {
            echo 
$this->fields;
        }
    }
}
include_once 
"clear.php";
$login = new login(clear($_POST[&#39;username&#39;]), clear($_POST[&#39;password&#39;]));
echo $login->check();
?>

login.html
Código: [Seleccionar]
<form name="login" method="post" action="login.php">
    Username: <input name="username" class="textbox" type="text"></br>
    Password: <input name="password" class="textbox" type="password"></br>                   
    <input name="login" value="Login" class="button" type="submit"></br>       
</form>

register.php
Código: [Seleccionar]
<?php
class register
{
    public 
$user;
    public 
$password;
    public 
$repassword;
    public 
$email;
    public 
$fullname;
    public 
$query;
    public 
$numrows;
    public 
$error;
    public 
$error2;
    public 
$error3;
    public 
$error4;
    public 
$ok;
    public 
$fields;
    public 
$regquery;
    
    public function 
__construct($username$password$repeatpassword,  $email$fullname)
    {
    include 
"config.php";
        
$this->user         =    $username;
        
$this->password        =    $password;
        
$this->repassword    =    $repeatpassword;
        
$this->email        =    $email;
        
$this->fullname        =    $fullname;
        
$this->query        =    mysql_query("SELECT * FROM users WHERE username = &#39;".$this->user."&#39;");
        
$this->numrows        =    mysql_num_rows($this->query);
        
$this->error        =    "Nombre de usuario en uso.";
        
$this->error2        =    "Las contraseñas no coinciden";
        
$this->error3        =    "Nombre completo y/o nombre de usuarios superan los 25 caracteres.";
        
$this->error4        =    "La contraseña debe tener un minimo de 6 caracteres y un maximo de 25";
        
$this->ok            =    "Te has registrado correctamente";
        
$this->fields        =    "Por favor, rellena todos los campos.";
    }
    public function 
check()
    {
        if(
$this->numrows!=0)
        {
            die (
$this->error);
        }
        if(
$this->user&&$this->password&&$this->email&&$this->fullname)
        {
            if(
$this->password == $this->repassword)
            {
                if(
strlen($this->username)>25||strlen($this->fullname)>25)
                {
                    echo 
$this->error3;
                }
                else
                {
                    if(
strlen($this->password)>25||strlen($this->password)<6)
                    {
                        echo 
$this->error4;
                    }
                    else
                    {
                        
$this->password md5($this->password);
                        
$register mysql_query("INSERT INTO `users` (`id`, `fullname`, `username`, `password`, `email`, `admin`) VALUES (NULL, &#39;".$this->fullname."&#39;, &#39;".$this->user."&#39;, &#39;".$this->password."&#39;, &#39;".$this->email."&#39;, &#39;0&#39;)");
                        echo 
$this->ok;
                    }
                }
            }
            else
            {
                echo 
$this->error2;
            }            
        }
        else
        {
            echo 
$this->fields;
        }
    }
}
include_once 
"clear.php";
$reg = new register(clear($_POST[&#39;username&#39;]), clear($_POST[&#39;password&#39;]), clear($_POST[&#39;repeatpassword&#39;]), clear($_POST[&#39;email&#39;]), clear($_POST[&#39;fullname&#39;]));
echo $reg->check();
?>

register.html
Código: [Seleccionar]
<form action='register.php' method='POST'>
    Fullaname: <input type='text' name='fullname' class="textbox"></br>
    Username: <input type='text' name='username' class="textbox"></br>
    Password: <input type='password' name='password' class="textbox"></br>
    Repeat Password: <input type='password' name='repeatpassword' class="textbox"></br>
    E-Mail: <input type='text' name='email' class="textbox"></br>
    <input type='submit' name='submit' value='Register' class="button">
</form>

clear.php
Código: [Seleccionar]
<?php
function clear($texto)
{
    
$limpio strip_tags($texto);
    
$limpio htmlspecialchars($limpio);
    
$limpio stripslashes($limpio);
    return 
$limpio;
}
?>

config.php
Código: [Seleccionar]
<?php

$error1 
= &#39;Problem connecting to Host&#39;;
$error2 = &#39;Problem connecting to MySQL&#39;;
$connect mysql_connect (&#39;hostmysql&#39;,&#39;usuariomysql&#39;,&#39;contraseñamysql&#39;) or die($error1);
$db mysql_select_db (&#39;basededatos&#39;) or die($error2);

?>

Mysql
Código: [Seleccionar]
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fullname` varchar(100) NOT NULL DEFAULT '',
  `username` varchar(25) NOT NULL DEFAULT '',
  `password` varchar(100) NOT NULL DEFAULT '',
  `email` varchar(100) NOT NULL DEFAULT '',
  `admin` char(1) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
)

Creditos: Siquillote (del sistema de usuarios que he aprendido poo)
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Siquillote en 25 de Septiembre de 2010, 16:11:27 pm

¡Muy bueno!. Por lo que veo, has cogido mi sistema de usuarios y le has agregado un registro pero aun así esta muy
bien. Caundo tenga tiempo lo pruebo ;P
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: CriisDark en 25 de Septiembre de 2010, 16:12:00 pm
Te has pasado  :o
Te daria karmas pero no se como se dan  :confused:


            :rstar: :rstar: :rstar: :rstar: :rstar:
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Siquillote en 25 de Septiembre de 2010, 16:13:09 pm
Te has pasado  :o
Te daria karmas pero no se como se dan  :confused:

Es cuando llegas a 25 post, te saldrá una flechita verde debajo de cada usuario y esos significa sumarle un karma.
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: CriisDark en 25 de Septiembre de 2010, 16:15:52 pm
Gracias, Siquillote     :(
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Jumarras en 25 de Septiembre de 2010, 16:18:05 pm
Bueno siquillote, no he usado tu sistema de login al 100%, solo lo he usado para aprender el poo, es asi como yo aprendo, con ejemplos, y asi es como aprendi php xD. Este sistema que he usado lo he "basado" en el tuyo, porque he aprendido de el, pero he usado el login y registro que uso yo, el que no esta en poo para hacerlo.

Pero bueno, no queria "plagiar" nada, si es por eso, te pongo los creditos.

Salu2
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Siquillote en 25 de Septiembre de 2010, 16:19:43 pm
Bueno siquillote, no he usado tu sistema de login al 100%, solo lo he usado para aprender el poo, es asi como yo aprendo, con ejemplos, y asi es como aprendi php xD. Este sistema que he usado lo he "basado" en el tuyo, porque he aprendido de el, pero he usado el login y registro que uso yo, el que no esta en poo para hacerlo.

Pero bueno, no queria "plagiar" nada, si es por eso, te pongo los creditos.

Salu2

No tranquilo, eso no me preocupa. Si solo lo comentaba nada mas.
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Physlet en 28 de Septiembre de 2010, 13:11:53 pm
Hay pequeñas cosas que valen la pena modificar para ahorrarnos líneas innecesarias.

Por ejemplo, esto:

else
{
   echo $this->error;
}

Es lo mismo que:

else
   echo $this->error;

PD: Creo que los atributos de la clase se verían mejor como privados, ya que en realidad dudo que utilices dichos atributos fuera de la clase.
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Siquillote en 28 de Septiembre de 2010, 14:45:25 pm

Physlet, lo de las llaves es cuestión de cada uno. No es que sean obligatorias, pero si asi requiere mas organización,
pues mejor para el ¿No crees?.

Y sí, pienso que las variables deberían ser privadas.
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: gink en 28 de Septiembre de 2010, 18:08:29 pm
Perdon por meterme, ¿Pero como funciona el POO en Php? Me tiene intrigado  :confused:
Edito: Soy un toto, no mire en el foro que estamos. ¡Perdon!
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Physlet en 28 de Septiembre de 2010, 22:59:18 pm
Physlet, lo de las llaves es cuestión de cada uno. No es que sean obligatorias, pero si asi requiere mas organización,
pues mejor para el ¿No crees?.

Y sí, pienso que las variables deberían ser privadas.
No es que sea cuestión de cada quién, es que es más correcto. Otra cosa sería usar if: endif; en vez de if{}, eso sí depende del programador.
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: Jumarras en 30 de Septiembre de 2010, 10:27:26 am
He hecho unos arreglillos, no funcionaba la session correctamente, no se registrabacomo tal. Este era el error: session_start; no funciona, debe ser session_start();

Salu2
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: CarlosRdrz en 30 de Septiembre de 2010, 22:42:47 pm
Hombre... esta bien sintácticamente pero no sigue el modelo de programación orientado a objetos.
Registrar y hacer login no son objetos, son acciones, y por lo tanto no tiene sentido crear una clase para cada uno.

Saludos!
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: seyder120 en 01 de Octubre de 2010, 00:09:11 am
esta muy bien hecho bonito tutorial, por cierto que tiene que ver programacion orientada a objetos con este tutorial
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: danywar95 en 01 de Octubre de 2010, 16:28:05 pm
se ve muy bueno lo probare ahora y interare acer uno aver si me sale  :)
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: arvillo en 23 de Octubre de 2010, 20:41:25 pm
exlente login y registro, mira pero te falto algo, muestra el codigo para que si no estan conectados no puedan ver una iformacion, y si esta conectados si la ven:

Código: [Seleccionar]
<?

if($_SESSION['username'] && $_SESSION['password']){
echo"informacion que se vera si esta conectado...";

} else {

echo 'informacion que se vera si no esta conectado...'; } ?>

Creo que es Haci o si no quitales la sesiiones y ponles COOKIE o $row[/b]
Título: Re:[Aporte] Sistema de Usuarios (Login+Registro)
Publicado por: SoyDani. en 30 de Noviembre de 2010, 10:32:26 am
Tiene un error en el archivo register.php y en login.php

No das los echos y los ifs estan mal colocados.  :(