Foros del Web » Programando para Internet » PHP »

mejorar codigo

Estas en el tema de mejorar codigo en el foro de PHP en Foros del Web. buenas estoy empezando a meterme con esto de php orientado a objeto y sieguiendo algunos ejemplos quise hacer un logeo y hasta ahora va bien ...
  #1 (permalink)  
Antiguo 08/07/2010, 19:58
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
mejorar codigo

buenas estoy empezando a meterme con esto de php orientado a objeto y sieguiendo algunos ejemplos quise hacer un logeo y hasta ahora va bien pero como muestro la variable row que sale con el return?? y que podria mejorar?? agradesco de antemanos la ayuda prestada
Código PHP:
<?php 
class logeo
{    
    function 
conectar()
    {                  
        
$host="localhost";
        
$mysqlUser="carlos";
        
$mysqlPass="123";
        
$db="unefa";
        
$connec=mysql_connect($host,$mysqlUser,$mysqlPass) or die ("error al conectar con el servidor ".mysql_error());
        
mysql_select_db($db) or die ("no se encontro la base de datos ".mysql_error());
    }      
    function 
Logear($user,$password)
    {        
        
$query=mysql_query("SELECT usuario,nivel FROM usuario WHERE usuario='$user' and pass='$password'");
        if(
mysql_num_rows($query))
        {
            
$row=mysql_fetch_assoc($query);
            return 
$row;            
        }
        else
        {
            echo 
"el usuario o la contraseña son incorrectos";
        }
    }
}
$a=new logeo();
$pass=md5(123456);
$a->conectar();
$a->Logear("carlos",$pass);
echo 
$row['usuario'];
?>

Última edición por carlos_belisario; 08/07/2010 a las 20:09
  #2 (permalink)  
Antiguo 09/07/2010, 04:14
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: mejorar codigo

Por poder mejorar...

Yo añadirá una consulta count, si esta devuelve 1 hago la siguiente consulta.

Después añadiría la posibilidad de personalizar el nombre de la tabla de usuarios, el nombre de la base de datos...

Un saludo!!
  #3 (permalink)  
Antiguo 09/07/2010, 17:45
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

gracias por tu respuesta siguiendola lo hice a mi manera podrias darme la opinios si como la hice esta bien o hay una mejor manera?? graacias por la respuesta y disculpen tanto fastidio pero es que de verdad cada vez que voy a trabajar con log es un problema entonces como estube leyendo algo de clases quise hacer akgi que solko modificara un poco pero solo se lo q medio e leido pero me aventure aki dejo lo que hice por favor echenle un ojo y como les digo a mis compañeros de estudios busqmole el minimo fallo para q el codigo sea lo mejor posible
Código PHP:
<?php 
session_start
();
class 
logeo
{        
    function 
conectar($servidor,$usuario,$pass,$basededatos)
    {                  
        
        @
mysql_connect($servidor$usuario$pass) or die ("error al conectar con el servidor ".mysql_error());//conectamos con el servidor        
        
@mysql_select_db($basededatos) or die("no se encontro la base de datos ".mysql_error());//seleccionamos db
    
}      
    function 
Logear($user,$password,$tabla,$campos)
    {        
        
$query=mysql_query("SELECT $campos FROM $tabla WHERE usuario='$user' and pass='$password'");//hacemos consulta a la tabla enviada
        
if(mysql_num_rows($query))//si existe el usuario 
        
{
            
$row=mysql_fetch_assoc($query);
            if(
$row['estatus']=="habilitado")//si el usuario esta habilitado
            
{
                
$_SESSION['auten']=md5($row['user']);//autentificamos al usuario
            
}
            else
            {
                echo 
"el usuario esta deshabilitado por un administrador";//si esta deshabilitado lo avisamos
            
}    
        }
        else
        {
            echo 
"el usuario o la contraseña son incorrectos";
        }
    }
    function 
desconectar()
    {
        
mysql_close();
    }    
}
#########################################################################esto para probar################################
##########################################################
$a=new logeo();
$usuario="carlos";#campos que se deben de obtener del formulario del logueo
$pass=md5(123456);#campos que se deben de obtener del formulario del logueo
$a->conectar("localhost","carlos","123","unefa");//llamamos a la funcion conectar con pasando el host,mysqlUsuario,mysqlPass,base de datos
$campos="usuario,nivel,estatus";//decimos los campos a buscar de la tabla
$tabla="usuario";//decimos la tabla 
$reg=$a->Logear($usuario,$pass,$tabla,$campos);//llamamos a la funcion Logear 
$a->desconectar();//desconectamos
?>
  #4 (permalink)  
Antiguo 10/07/2010, 04:33
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: mejorar codigo

Hola,

Buenas de nuevo,

Para hacer el count yo prefiero hacer una consulta en lugar de un mysql_num_rows, ya que el count es más rápido y lo puedes hacer únicamente sobre un campo.

Yo opto por hacer clases más separadas, por ejemplo una para el manejo de conexión con BBDD, otra para operaciones con BBDD, otra para conectar con users, otra para filtro de contenidos... etc lo mejor que puedes hacer es seguir practicando por tí solo, aprenderás mucho más mirando ejemplos como el tuyo.

Por ejemplo métete con el tema de seguridad.

Un saludo!
  #5 (permalink)  
Antiguo 10/07/2010, 10:05
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

gracias por la ayuda y disculpa tanta molestia me podrias dar una pagina donde hablen de seguridad con clases?
  #6 (permalink)  
Antiguo 12/07/2010, 06:58
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: mejorar codigo

Como dijeron en otro post, donde la forma de programacion era bastante parecida a esta, lo que estas haciendo no es programacion orientada a objetos, sino que estas haciendo programacion estructurada dentro de funciones dentro de una clase.

No estas utilizando constructores (__construct();), no usas metodos para tratar las variables (Public, Private, Protected) y debes tratar las variables como $this->variable=$variable; en lugar de $variable="algo"; y unas cosas mas que son lo que realmente hace a la POO!

Te repito, lo que estas haciendo es reunir funciones y agruparlas en una clase, pero no es POO, yo tambien estoy empezando en esto de POO asi que te recomendaria que empezaras con manuales basicos de POO!

un abrazo y espero haberte ayudado!
  #7 (permalink)  
Antiguo 12/07/2010, 15:09
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

gracias por la respuesta podrias darme un link donde comenzar yo e estado investigando pero muchas vecos concigo lo mismo como llamo yo informacion para personas que ya tienen tiempo en esto, por lo mismo q tu me dijiste busq diferencias entre funciones publicas privadas etc y me salia informacion q no iban al caso o por lo menos no me satisfacian a mi como investigador gracias
  #8 (permalink)  
Antiguo 12/07/2010, 15:31
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: mejorar codigo

Hola Kadas99,

No es necesario utilizar constructores / destructores, estos se utilizan cuando hagan falta, tampoco es obligatorio definir public, private, ect, ya que por defecto son public, y alomejor lo necesita así, si que es verdad que no aprovecha todos los elementos de la programación orientada a objetos pero poco a poco aprenderá, lo único que debería de ser un poco más espabilado a la hora de buscar información, con google puedes encontrar lo que pides.

Un saludo!!
  #9 (permalink)  
Antiguo 12/07/2010, 15:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

tenia tiempo sin escuchar o en este caso leer la palabra espabilado y tienes algo de razon aveces no encuentro lo q kiero pero e ido buscando y dandome golpes y por eso puse eso q medio fui entendiendo de lo q es trabajar con clases gracias por sus respuestas estoy intentando investigar mas para ver si pongo otro q este mejor y como digo yo me ayuden a mejorarlo gracias por sus respuestas
  #10 (permalink)  
Antiguo 12/07/2010, 16:48
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: mejorar codigo

Cita:
Iniciado por miktrv Ver Mensaje
Hola Kadas99,

No es necesario utilizar constructores / destructores, estos se utilizan cuando hagan falta, tampoco es obligatorio definir public, private, ect, ya que por defecto son public, y alomejor lo necesita así, si que es verdad que no aprovecha todos los elementos de la programación orientada a objetos pero poco a poco aprenderá, lo único que debería de ser un poco más espabilado a la hora de buscar información, con google puedes encontrar lo que pides.

Un saludo!!
Yo difiero, en mi opinión si no se ocupa el constructor es necesario declararlo aunque sea vació, lo mismo con la visibilidad de los atributos y funciones, ademas de que si necesitas todos tus atributos sean públicos... mejor dar un repaso a los conceptos básicos de la POO.

Claro esta es solo mi opinión, pero creo que es mejor que desde un principio, cuando se esta aprendiendo se escriba código mas claro y "estandarizado" (guiándose en lenguajes de programación 100% OO e.j Java) que ahorrarse algunas palabras solo "porque el lenguaje nos lo permite".

Suerte =)
__________________
Ideorama. Su presencia en Internet

Última edición por dots3r; 12/07/2010 a las 16:54
  #11 (permalink)  
Antiguo 12/07/2010, 20:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

para que no me digan mas espabilado jaja encontre un link donde dan inicio a lo que es PHP orientado a objetos esta muy bueno a cubierto mucho mis dudas acerca de este tema y apenas llevo unos pokitos ejercicios dejo el link para cualkier otra persona q como yo este empezando en este mundo, pero de todas formas cuando alla aprendido un poco mas seguro pongo un codigo para q me den sus opiniones para mejorar el mismo gracias por la ayuda aki esta el link http://www.phpya.com.ar/poo/index.php?inicio=0
  #12 (permalink)  
Antiguo 12/07/2010, 21:43
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

y bueno como soy algo fiebruo cuando estoy aprendiendo algo y lei mas o menos y como ya me voy a dormir quic hacer una pequeña clase para conectar con todo lo q mas o menos lei y metiendo sabiendo q funcion cumplen lo que los compañeros me dijeron x favor digamen q le puedo mejorar gracias
Código PHP:
class conectar
{
#########definimos atributos########
    
private $conec;
    private 
$host;
    private 
$mysqlUser;
    private 
$mysqlPass;
    private 
$db="db";
    public function 
__construct($host="localhost",$mysqlUser="root",$mysqlPass="")
    {
        
$this->host=$host;
        
$this->mysqlUser=$mysqlUser;
        
$this->mysqlPass=$mysqlPass;
        
$this->conec=@mysql_connect($this->host,$this->mysqlUser,$this->mysqlPass) or die("error al conectar con servidor ".mysql_error());    
        
$this->selectDb();
    }    
    
    private function 
selectDb()
    {
        @
mysql_select_db($this->db,$this->conec) or die ("error al conectar con la base de datos ".mysql_error());        
    }
    public function 
desconectar()
    {
        
mysql_close($this->conec);
    }
    public function 
liberar($query)
    {
        
mysql_free_result($query);
    }    
}
#############################################################
#######################para probar###########################
#############################################################
$con=new conectar();//si se tiene un usuario del hostin se colocan parametros en el formato (host,user,password) sino se deja blanco y toma los por defecto
$query=mysql_query("select * from usuario");
while(
$row=mysql_fetch_array($query))
{
    echo 
$row['usuario'];
}
$con->liberar($query);//liberamos la consulta 
$con->desconectar();//desconectamos 
gracias por la paciencia que me han tenido de verdad me han ayudado e impulsado a investigar mas
  #13 (permalink)  
Antiguo 13/07/2010, 00:57
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: mejorar codigo

Felicidades para empezar hay un cambio notable de tu primera clase a esta se ve que al menos has aprendido algunos conceptos. Bueno de mejorar la clase que te puedo decir, pues intenta ampliarla para hacer consultas.

Suerte =)
__________________
Ideorama. Su presencia en Internet
  #14 (permalink)  
Antiguo 13/07/2010, 01:50
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: mejorar codigo

Cita:
Iniciado por carlos_belisario Ver Mensaje
tenia tiempo sin escuchar o en este caso leer la palabra espabilado y tienes algo de razon aveces no encuentro lo q kiero pero e ido buscando y dandome golpes y por eso puse eso q medio fui entendiendo de lo q es trabajar con clases gracias por sus respuestas estoy intentando investigar mas para ver si pongo otro q este mejor y como digo yo me ayuden a mejorarlo gracias por sus respuestas
Hola!!

No es necesario declarar un constructor, ni es necesario declarar si una propiedad es publica o privada, todo depende de lo que necesites...
  #15 (permalink)  
Antiguo 13/07/2010, 15:19
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

gracias por sus respuestas y bueno en este caso me sirvio hacer el constructor ya que con solo llamar a la clase me conecta y bueno agregare lo que me dijste, eso lo ic solo con lo que lei del tutorial de la pagina que puse arriba pero cuando aprenda un poco mas ire agregando y creando mejores clases gracias por la ayuda prestada con seguridad q coloco otra clase dentro de un tiempito para q me ayuden a mejorarla y asi ir adkiriendo experiencia en esta forma de programacion gracas saludos
  #16 (permalink)  
Antiguo 13/07/2010, 18:56
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

buenas como les dig ando algo fiebruo en esto q e ido aprendiendo voy a poner lo que al principio quise hacer una clase para loging pero echa con los conocimientos que e ido adquiriendo para que por favor me digan como mejorarla selos agradesco de verdad e aprndido mucho gracias a estos foros y como digo yo ahora es que me falta aprender
aqui dejo los codigos
pagina1: conectar.php
Código PHP:
class conectar
{
#########definimos atributos########
    
private $conec;
    private 
$host;
    private 
$mysqlUser;
    private 
$mysqlPass;
    private 
$db="data_base";
    private 
$query;
    public function 
__construct($host="localhost",$mysqlUser="root",$mysqlPass="")
    {
        
$this->host=$host;
        
$this->mysqlUser=$mysqlUser;
        
$this->mysqlPass=$mysqlPass;
        
$this->conec=@mysql_connect($this->host,$this->mysqlUser,$this->mysqlPass) or die("error al conectar con servidor ".mysql_error());    
        
$this->selectDb();
    }    
    
    private function 
selectDb()
    {
        @
mysql_select_db($this->db,$this->conec) or die ("error al conectar con la base de datos ".mysql_error());        
    }
    public function 
desconectar()
    {
        
mysql_close($this->conec);
    }
    public function 
liberar($query)
    {
        
mysql_free_result($query);
    }    
    public function 
consulta($query)
    {
        
$this->query=mysql_query($query) or die ("error al realizar consulta ".mysql_error());
        return 
$this->query;
    }

pagina 2: loging.php
Código PHP:
include("conectar.php");
class 
logeo
{
    private 
$conectar;
    private 
$user;
    private 
$pass;
    private 
$consulta;
    public function 
__construct()
    {
        
$this->conectar=new conectar();
    }
    public function 
cargar($user,$pass)
    {
        
$this->user=htmlentities(trim($user));
        
$this->pass=md5($pass);
        
$this->logeate();
    }
    private function 
logeate()
    {
        
        
$this->consulta=$this->conectar->consulta("SELECT usuario,pass,nivel,estatus FROM usuario WHERE usuario='$this->user' and pass='$this->pass'");
        if(
mysql_num_rows($this->consulta))
        {
            while(
$row=mysql_fetch_array($this->consulta))
                        {
                               
$_SESSION['auten']=md5($row['user']);//autentificamos al usuario
                        
}
                        echo 
"ha ingresado al sistema correctamente";
        }
        else
        {
            echo 
"el usuario no esta en el sistema";
        }
        
$this->conectar->desconectar();    
    }
}
##########################################################
####################pruebas a las lases#########################
##########################################################
$log=new logeo();
$log->cargar("carlos",12345); 
funciona pero kiero ver q podria mejorar como programador xq de verdad e visto codigos q e hecho antes de buskr toda la informacion y veo la diferencia gracias

Última edición por carlos_belisario; 13/07/2010 a las 19:04
  #17 (permalink)  
Antiguo 13/07/2010, 19:41
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: mejorar codigo

Bueno primero, para la relación de dependencia en php generalmente se usa require_once en vez de include. Otra cosa sería que tu clase de negocio no imprima nada directamente (los echo) si no que devuelva la respuesta: echo "ha ingresado al sistema correctamente" con eso deslindas a tu clase la responsabilidad de la presentación de datos.

Esto ultimo con el fin de separar un poco lo que es el negocio de la aplicación de la presentación de los datos.

Suerte =)
__________________
Ideorama. Su presencia en Internet
  #18 (permalink)  
Antiguo 13/07/2010, 21:34
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: mejorar codigo

gracias por tu respuesta la tomare en cuenta y en cuanto a los echo los puse como un msj pero creo que ahi seria bueno que se redireccionara con un header("location") para un lugar que el usuario tenga privilegios o noc que me recomendarias??

Etiquetas: mejoras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:33.