Foros del Web » Programando para Internet » PHP »

fallo en sesion de logueo

Estas en el tema de fallo en sesion de logueo en el foro de PHP en Foros del Web. hola no se que tengo mal en el codigo pero no me funciona la sesion de logueo cuando creo un usuario nuevo me lo crea ...
  #1 (permalink)  
Antiguo 27/04/2011, 05:21
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
fallo en sesion de logueo

hola no se que tengo mal en el codigo pero no me funciona la sesion de logueo cuando creo un usuario nuevo me lo crea bien con su username y password creados. pero cuando intento acceder desde login.php me dice que usuario y contraseña no coinciden pero no me da ningun error.

el codigo es extenso aqui os lo dejo

login.php

Código PHP:
<?php
require_once("../includes/initialize.php");
if(
$sesion->esta_logueado())
{
    
redireccionar_a("admin.php");
}
?>

<?php
if(isset($_POST["submit"]))
{
    
$username $_POST["username"];
    
$password $_POST["password"];
    
    
$usuarioUsuario::autenticar($username,$password);
    
    

    if(
$usuario)
    {
        
$sesion->loguearse($usuario);
        
grabar_acciones("logueo""el usuario ".$usuario->usuario_id " se ha logueado.");
        
redireccionar_a("admin.php");
    }
    else
    {
        
$mensaje "usuario/clave no coinciden.";
        
    }
}

?>
<?php 
include("admin_header.php"); ?>
  <table id="estructura">
    <tr>
      <td id="menu">
      <a href="admin/admin.php">Regresar a la website</a>
      </td>
      <td id="pagina">
          <h2>Administración</h2>
        <?php if(isset($mensaje)) { echo "<p>" $mensaje "</p>"; } ?>
        <form action="login.php" method="post">
        <table>
            <tr>
                <td>Nombre de usuario:</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>Contraseña:</td>
                <td><input type="password" name="password" /></td>
            </tr>
         
        </table>
        <input type="submit" name="submit" value="Ingresar" />
        </form>
     </td>
    </tr>
  </table>
<?php require_once("admin_footer.php"); ?>

user.php

Código PHP:
<?php
require_once(LIB_DIR.SD."database.php");

class 
Usuario extends Tabla
{
    public 
$id;
    public 
$usuario;
    public 
$clave;
    public 
$nombre;
    public 
$apellido;
    
    protected static 
$nombre_tabla "usuarios";
    protected static 
$campos_tabla = array("usuario" "clave" "nombre" "apellido");
    
    
    
    
    
    
    
    
    
    
    
    
    public static function 
autenticar($usuario ""$clave"")
    {
        global 
$bd;
        
$usuario $bd->preparar_consulta($usuario);
        
$clave $bd->preparar_consulta($clave);
        
        
$sql "SELECT * FROM usuarios ";
        
$sql .= " WHERE usuario='{$usuario}' ";
        
$sql .=" AND clave='{$clave}' ";
        
$sql .=" LIMIT 1";
        
        
$matriz_usuarios Usuario::buscar_por_sql($sql);
        return  (!empty(
$matriz_usuarios)) ? array_shift($matriz_usuarios) : false ;
    }
    
}
    

?>
database.php:
Código PHP:
<?php require_once(LIB_DIR.SD."database.php"); ?>

<?php
class Tabla
{
    protected static 
$nombre_tabla;
    protected static 
$campos_tabla;
    
    
    public static function 
buscar_por_id($id)
    {
        global 
$bd;
        
$matriz_usuarios = static::buscar_por_sql(" SELECT * FROM  " .static::$nombre_tabla" WHERE id =".$bd->preparar_consulta($id). " LIMIT 1 " );
        return (!empty(
$matriz_usuarios)) ? array_shift($matriz_usuarios) : false ;
    }
    public static function 
buscar_todos()
    {
        return 
self::buscar_por_sql(" SELECT * FROM  " .static::$nombre_tabla);
        
        
        return 
$resultado;
    }
    public static function 
buscar_por_sql($sql)
    {
        global 
$bd;
        
$resultado $bd->enviar_consulta($sql);
        
$matriz_objetos = array();
        while(
$registro $bd->fetch_array($resultado))
        {
            
array_push($matriz_objetos, static::instanciar($registro));
        }
        
        return 
$matriz_objetos;
    }
    public static function 
instanciar($registro)
    {
        
$nombre_clase get_called_class();
        
$objeto = new $nombre_clase;
        foreach(
$registro as $propiedad => $valor)
        {
            if(
$objeto->propiedad_existe($propiedad))
            {
                
$objeto->$propiedad $valor;
            }
        }
        return 
$objeto;
    }
    public function 
propiedad_existe($propiedad)
    {
        
$propiedades get_object_vars($this);
        return 
array_key_exists($propiedad,$propiedades);
    }
    public function 
nombre_completo()
    {
        if(isset(
$this->nombre) && isset($this->apellido))
        {
            return 
$this->nombre " " $this->apellido;
        }
        else
        {
            return 
"";
        }
    }
    
    public function 
propiedades()
    {
        
        
$campos_props = array();
        foreach(static::
$campos_tabla as $campo)
        {
            
$campos_props[$campo]= $this->$campo;
        }
            return 
$campos_props;
    }
    public function 
guardar()
    {
        if(!isset(
$this->id))
        {
            return 
$this->crear();
        }
        else
        {
            return 
$this->actualizar();
        }
    }
    
    public static function 
cantidad_total()
    {
        global 
$bd;
        
$sql "SELECT COUNT(*) FROM ".static::$nombre_tabla;
        
$resultado $bd->enviar_consulta($sql);
        
$registro $bd->fetch_array($resultado);
        return 
array_shift($registro);
    }
    public function 
crear()
    {
        global 
$bd;
        
$propiedades $this->propiedades();
        
$sql " INSERT INTO " .static::$nombre_tabla."(";
        
$sql .=  implode(",",array_keys($propiedades));
        
$sql .= ") VALUES ('";
        
        
$sql .= implode("','",array_values($propiedades)). "')";
        if(
$bd->enviar_consulta($sql))
        {
            
$this->id $bd->insert_id();
            return 
true;
        }
        else
        {
            return 
false;
        }
        
        
    }
    
    public function 
actualizar()
    {
        global 
$bd;
        
$propiedades$this->propiedades();
        
$prop_format = array();
        foreach(
$propiedades as $propiedad => $valor)
        {
            
array_push($prop_format,"{$propiedad}='{$valor}'");
        }
        
$sql "UPDATE " .static::$nombre_tabla"    SET     ";
        
$sql .= implode(",",$prop_format);
        
$sql .= " WHERE id = " $bd->preparar_consulta($this->id);
        
$bd->enviar_consulta($sql);
        if(
$bd->affected_rows() == )
        {
            return 
true;
        }
        else
        {
            return 
false;
        }
    }
    
    public function 
eliminar()
    {
        global 
$bd;
        
$sql " DELETE FROM " .static::$nombre_tabla" ";
        
$sql .= "  WHERE id =  " $bd->preparar_consulta($this->id);
        
$sql .= "  LIMIT 1";
        
$bd->enviar_consulta($sql);
        if(
$bd->affected_rows() == )
        {
            return 
true;
        }
        else
        {
            return 
false;
        }
    }
    

    
}


?>
  #2 (permalink)  
Antiguo 27/04/2011, 06:54
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: fallo en sesion de logueo

las llaves se usan cuando necesitas incluir arrays en una cadena.

Código PHP:
Ver original
  1. $sql = "SELECT * FROM usuarios ";
  2.         $sql .= " WHERE usuario='$usuario' ";
  3.         $sql .=" AND clave='$clave' ";
  4.         $sql .=" LIMIT 1";

aunque yo prefiero concatenar:

Código PHP:
Ver original
  1. $sql = "SELECT * FROM usuarios ";
  2.         $sql .= " WHERE usuario='".$usuario."' ";
  3.         $sql .=" AND clave='".$clave."' ";
  4.         $sql .=" LIMIT 1";

y de preferencia usar un HASH para las contraseñas, como MD5, además de proteger contra SQL Inyections
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 27/04/2011, 08:47
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: fallo en sesion de logueo

ok lo tendre en cuenta pero ahora me e dado cuenta de una cosa. tengo un archivo que se llama initialize.php

que contiene las rutas a los includes de los diferenes archivos de la aplicación y me da error. este error al cargar el archivo create.php

) Notice: Use of undefined constant LIB_DIR - assumed 'LIB_DIR' in G:\wamp\www\mudanzasavellan4\create.php on line 3

Notice: Use of undefined constant SD - assumed 'SD' in G:\wamp\www\mudanzasavellan4\create.php on line 3

y asi es como tengo el archivo initialize.php
Código PHP:

<?php
defined
("SD") ? NULL define ("SD",DIRECTORY_SEPARATOR);
defined("RAIZ_DIR") ? NULL define ("RAIZ_DIR""G:".SD."wamp".SD."www".SD."mudanzasavellan4");
defined("LIB_DIR") ? NULL define ("LIB_DIR",RAIZ_DIR.SD."includes"); 

require_once(
LIB_DIR.SD."config.php");
require_once(
LIB_DIR.SD."functions.php");
require_once(
LIB_DIR.SD."database.php");
require_once(
LIB_DIR.SD."database_table.php");
require_once(
LIB_DIR.SD."session.php");
require_once(
LIB_DIR.SD."user.php");
//require_once(LIB_DIR.SD."photo.php");
//require_once(LIB_DIR.SD."comment.php");
//require_once(LIB_DIR.SD."pagination.php");
?>
y no entiendo por que no me carga

create.php
Código PHP:
<?php  require_once(LIB_DIR.SD."database.php"); ?>

<?php
    
if(isset($_POST["username"]))
    {
        
$errores = array();
        
$errores array_merge($erroresvalidar_campos_obligatorios(array("username","password")));
        
$max_caracteres = array("username" => 150,"password" => 40);
        foreach(
$max_caracteres as $campo => $max)
        {
            if(
strlen($_POST[$campo])>$max)
            {
                
$errores[] = $campo;    
            }            
        }
        
        
$username trim(preparar_consulta($_POST["username"]));
        
$password sha1(trim(preparar_consulta($_POST["password"])));
        
        if(empty(
$errores))
        {
            
$consulta "INSERT INTO usuarios (
                            username,password
                            ) VALUES (
                            '{$username}','{$password}')"
;
            
$resultado mysql_query($consulta);
            if(
$resultado)
            {
                
$mensaje "El usuario ha sido creado.";
            }
            else
            {
                
$mensaje "No se ha podido crear el usuario: " mysql_error();
            }
        }
        else
        {
            
$mensaje "Se han encontrado " count($errores) . " errores";
        }
    }
?>
<?php 
include("includes/header.php"); ?>
  <table id="estructura">
    <tr>
      <td id="menu">
      <a href="admin/admin.php">Regresar al menú principal</a>
      </td>
      <td id="pagina">
          <h2>Crear nuevo usuario</h2>
        <?php if(isset($mensaje)) { echo "<p>" $mensaje "</p>"; } ?>
        <form action="create.php" method="post">
        <table>
            <tr>
                <td>Nombre de usuario:</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>Contraseña:</td>
                <td><input type="password" name="password" /></td>
            </tr>
            
        </table>
        <input type="submit" value="Crear usuario" />
        </form>
     </td>
    </tr>
  </table>
<?php require_once("includes/footer.php"); ?>

Etiquetas: fallo, logueo
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 03:08.