Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] CodeIgniter No trae password de base de datos

Estas en el tema de No trae password de base de datos en el foro de PHP en Foros del Web. Hola a todos, lo que sucede es que recien he comenzado un login en el cual pues valido si ingresé el password correcto que me ...
  #1 (permalink)  
Antiguo 27/03/2016, 23:14
 
Fecha de Ingreso: marzo-2016
Ubicación: Mexico
Mensajes: 1
Antigüedad: 8 años, 1 mes
Puntos: 0
Pregunta No trae password de base de datos

Hola a todos, lo que sucede es que recien he comenzado un login en el cual pues valido si ingresé el password correcto que me mande al main de mi proyecto o en caso contrario que me rediriga a la pagina del login.

tengo mi controlador verifylogin.php:

Código PHP:
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class 
VerifyLogin extends CI_Controller
{
    function 
__construct() {
        
parent::__construct();
        
$this->load->model('user','',TRUE);
    }

    public function 
index(){
        
$user$this->input->post('Usuario');
        
$pass $this->input->post('Password');

        
$data $this->user->getPasswordUser($user);
        
$passw $data['userPass'];

        if(
$pass==$passw){
            
$this->load->view('main_view');
        }else{
            
$this->load->view('login_view');
        }
    }
}
?>
y el modelo user.php:

Código PHP:
<?php
    
class User extends CI_Model
    
{
        function 
getPasswordUser($usuario){
            
$this->db->select('userPass');
            
$this->db->from('user');
            
$this->db->where('usuario'$usuario);

            
$query $this -> db -> get();
            if(
$query -> num_rows() >= 1)
               {
                 return 
$query->result_array();
               }
               else
               {
                 return 
false;
               }
        }
    }
?>
Al momento de entrar me marca este error:

Message: Undefined index: userPass

Filename: controllers/verifylogin.php

Line Number: 16


espero me puedan hechar la mano, de antemano gracias.
  #2 (permalink)  
Antiguo 28/03/2016, 15:01
Avatar de Javier01  
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 16 años, 2 meses
Puntos: 31
Respuesta: No trae password de base de datos

buenas tardes,

El problema de tener más de un return en un método o función, es que a veces, en lenguajes débilmente tipados o no tipados (como PHP)
devolvemos distintos tipos de datos, los cuales no podemos tratar de la misma manera al recibirlos.

En la clase user tienes el siguiente código
Código PHP:
if($query -> num_rows() >= 1

 return 
$query->result_array(); 

else 

 return 
false

donde, en el caso de encontrar un registro, devuelve un array, pero en caso contrario, devuelve un dato booleano de valor false.
Yo supongo que el problema está en que al entrar en el else, y devolver false, $data que es la variable que recibe esta respuesta, no
se comporta como array, sino que se comporta como booleano.
Por esa razón, en la siguiente línea, donde intentas acceder a un valor de $data como array, da un error.
Código PHP:
$data $this->user->getPasswordUser($user); 
$passw $data['userPass']; 
Mi recomendación es, primero, declarar en getPasswordUser una variable que sea tu return al final (fuera del if).
Esta variable es la que cambia según entre en una condición o en otra.
Segundo, devolver siempre el mismo tipo de datos. Array por ejemplo. Puedes devolver el array con el índice “userPass” vacío
Y cuando lo recibas poner una condición “si viene vacío, el usuario no existe”, “sino, verifico password”

Espero haberte ayudado

Saludos!
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.

Etiquetas: codeigniter, password, select
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 08:21.