Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] "Notice: Undefined index" en Login

Estas en el tema de "Notice: Undefined index" en Login en el foro de PHP en Foros del Web. Hola estoy haciendo un ejemplo de login usando mysql y pdo, el problema que tengo es cuando trato de ingresar las credenciales me da el ...
  #1 (permalink)  
Antiguo 29/05/2014, 18:24
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
"Notice: Undefined index" en Login

Hola estoy haciendo un ejemplo de login usando mysql y pdo, el problema que tengo es cuando trato de ingresar las credenciales me da el siguiente error

Notice: Undefined index: CLAVE in C:\xampp\htdocs\SIS_UPES\libs\sesiones.php on line 36
Login incorrecto

mi código es el siguiente

Código PHP:
<?php

error_reporting
(-1);

//Importamos los archivos necesarios
include 'conexion/Conexion.php';

//Llamamos al constructor de nuestra clase
$iniciar = new sesiones();

class 
sesiones {

    function 
__construct() {

        global 
$login;
        
//Instanciamos la clase Conexion
        
$login = new Conexion();

        if (
$_POST['user']) {
//Comprobacion del envio del nombre de usuario y password
            
$username $_POST['user'];
            
$password $_POST['pass'];
            if (
$password == NULL) {
                echo 
"La password no fue enviada";
            } else {
                
$query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '.$username.'";
                
//Definimos $con como global para evitar el mensaje NOTICE en la ejecucion
                
global $con;
                
//Prepara el query para la ejecucion
                
$stmt $con->prepare($query);
                
$data $stmt->fetchAll();
                if (empty(
$data)) {
                    
$result "Usuario no registrado!!";
                }

                if (
$data['CLAVE'] != $password) {
                    echo 
"Login incorrecto";
                } else {
                    
$query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
                    
$stmt $con->prepare($query);
                    
$row $stmt->fetchAll();
                    
$_SESSION["s_username"] = $row['username'];
                    echo 
"Has sido logueado correctamente " $_SESSION['s_username'] . " y puedes acceder al index.php.";
                }
            }
        }
    }

}
gracias de antemano
  #2 (permalink)  
Antiguo 29/05/2014, 18:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: "Notice: Undefined index" en Login

El error te indica que dicho índice no existe en el array.

Observa:
Código PHP:
Ver original
  1. $foo = array('candy' => 'bar');
  2.  
  3. echo $foo['candy']; // bar
  4. echo $foo['nothing']; // Undefined index

Ahora, como nos es posible adivinar los valores de $data te pido de favor que inspecciones dicha variable con var_dump() antes de tu comparación para cerciorarte de su contenido.

Código PHP:
Ver original
  1. $data = $stmt->fetchAll();
  2. var_dump($data);

¿Qué muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 29/05/2014, 18:33
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

me muestra esto

array(0) { }
  #4 (permalink)  
Antiguo 29/05/2014, 18:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: "Notice: Undefined index" en Login

Pues ahí tienes, ese es un array vacío.

Y viendo tu código la comparación con empty() es correcta, sin embargo el siguiente if() se ejecuta independientemente de la condición anterior.

Debes reestructurar tu lógica al respecto, en caso de no existir el usuario no debería seguir comprobando nada más.

Además esta linea está mal:
Código PHP:
Ver original
  1. // MAL
  2. $query = "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '.$username.'";
  3.  
  4. // BIEN
  5. $query = "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";

Y eso es porque no estás concatenando correctamente, te sugiero leer el manual al respecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 29/05/2014, 18:52
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

pero el usuario si existe
  #6 (permalink)  
Antiguo 29/05/2014, 19:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: "Notice: Undefined index" en Login

Cita:
Iniciado por sam03 Ver Mensaje
pero el usuario si existe
Por favor lee bien mis respuestas, tu consulta está mal escrita y por ende no devuelve nada, como si dicho usuario no existiera.

PHP no inventa errores ni altera tu código contra tu voluntad, tu eres responsable de lo que escribes, reflexiona un poco lo que haces.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 29/05/2014, 19:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: "Notice: Undefined index" en Login

A ver si entiendes con un poco de palotes.
Supongamos que la variable $username contuviese "pepito".
Si yo muestro la query de esto:
Código PHP:
Ver original
  1. $query = "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
quedaría armada
Código MySQL:
Ver original
  1. SELECT * FROM usuario WHERE NOMBRE_USUARIO = 'pepito'
En cambio, si muestor la que corresponde a esto:
Código PHP:
Ver original
  1. $query = "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '.$username.'";
obtengo:
Código MySQL:
Ver original
  1. SELECT * FROM usuario WHERE NOMBRE_USUARIO = '.pepito.'

¿Notas la diferencia? ¿Ves esos puntos en la cadena?
Bueno, esos los estás poniendo tu, porque escribes mal el código en PHP... y para MySQL "pepito" y ".pepito.", son cadenas de texto distintas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 29/05/2014, 19:33
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

gracias ya corregí ese problema del query pero me sigue diciendo que el array esta vació
  #9 (permalink)  
Antiguo 29/05/2014, 20:13
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

con el query corregido el código quedo así

Código PHP:
<?php

error_reporting
(-1);

//Importamos los archivos necesarios
include 'conexion/Conexion.php';

//Llamamos al constructor de nuestra clase
$iniciar = new sesiones();

class 
sesiones {

    function 
__construct() {

        global 
$login;
        
//Instanciamos la clase Conexion
        
$login = new Conexion();

        
session_start();

        if (
$_POST['user']) {
//Comprobacion del envio del nombre de usuario y password
            
$username $_POST['user'];
            
$password $_POST['pass'];

            if (
$password == NULL) {
                echo 
"La password no fue enviada";
            } else {
                
$query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
                
//Definimos $con como global para evitar el mensaje NOTICE en la ejecucion
                
global $con;
                
//Prepara el query para la ejecucion
                
$stmt $con->prepare($query);
                
$data $stmt->fetchAll();
                if (empty(
$data)) {
                    
$result "Usuario no registrado!!";
                }

                
var_dump($data);
                if (
$data['CLAVE'] != $password) {
                    echo 
"Login incorrecto";
                } else {
                    
$query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
                    
$stmt $con->prepare($query);
                    
$row $stmt->fetchAll();
                    
$_SESSION["s_username"] = $row['username'];
                    echo 
"Has sido logueado correctamente " $_SESSION['s_username'] . " y puedes acceder al index.php.";
                }
            }
        }
    }

}
Pero sigo con el array vació
  #10 (permalink)  
Antiguo 29/05/2014, 20:19
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: "Notice: Undefined index" en Login

quita los '' del usuario ponlos {$usuario} i mira si te functiona
__________________
cada vez que aprendes algo te crees que no sabes nada
  #11 (permalink)  
Antiguo 29/05/2014, 20:22
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

ya probé de la forma que dice y nada
  #12 (permalink)  
Antiguo 29/05/2014, 20:25
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: "Notice: Undefined index" en Login

y donde esta execute ?
__________________
cada vez que aprendes algo te crees que no sabes nada
  #13 (permalink)  
Antiguo 29/05/2014, 20:31
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

con el código de esta forma

Código PHP:
                $query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
                global 
$con;
                
$stmt $con->prepare($query);
                
$stmt->execute();
                
$data $stmt->fetchAll(); 
el var_dump() me devuelve los siguiente

array(1) { [0]=> array(10) { ["CODIGO_USUARIO"]=> string(2) "01" [0]=> string(2) "01" ["CODIGO_PRIVILEGIOS"]=> string(2) "01" [1]=> string(2) "01" ["NOMBRE_USUARIO"]=> string(5) "admin" [2]=> string(5) "admin" ["CLAVE"]=> string(5) "admin" [3]=> string(5) "admin" ["ESTADO"]=> string(1) "1" [4]=> string(1) "1" } }


pero sigo teniendo el

Notice: Undefined index: CLAVE in C:\xampp\htdocs\SIS_UPES\libs\sesiones.php on line 41
  #14 (permalink)  
Antiguo 29/05/2014, 20:41
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: "Notice: Undefined index" en Login

puedes ver el resultado de esto:
Código PHP:
Ver original
  1. $query = "SELECT * FROM usuario '";
  2.                 global $con;
  3.                 $stmt = $con->prepare($query);
  4.                 $stmt->execute();
  5.                 $data = $stmt->fetchAll();
  6.                 echo "<pre>";
  7.                 print_r($data);
  8.                 echo "</pre>";
__________________
cada vez que aprendes algo te crees que no sabes nada
  #15 (permalink)  
Antiguo 29/05/2014, 21:57
Avatar de zetahosting  
Fecha de Ingreso: octubre-2011
Mensajes: 119
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: "Notice: Undefined index" en Login

Es muy simple amigo,

El problema es que 'CLAVE' no tiene valor, tienes que pone lo siguiente:

$data['CLAVE']=(empty($data['CLAVE']) ? '' : $data['CLAVE']);
if ($data['CLAVE'] != $password) {
echo "Login incorrecto";
} else {
$query = "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
$stmt = $con->prepare($query);
$row = $stmt->fetchAll();
$_SESSION["s_username"] = $row['username'];
echo "Has
__________________
Excelente WebHosting -> www.zetahosting.net
[email protected]
Twitter: @zetahosting
  #16 (permalink)  
Antiguo 30/05/2014, 08:04
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

Cita:
Iniciado por arros Ver Mensaje
puedes ver el resultado de esto:
Código PHP:
Ver original
  1. $query = "SELECT * FROM usuario '";
  2.                 global $con;
  3.                 $stmt = $con->prepare($query);
  4.                 $stmt->execute();
  5.                 $data = $stmt->fetchAll();
  6.                 echo "<pre>";
  7.                 print_r($data);
  8.                 echo "</pre>";
me devuelve esto

Array
(
[0] => Array
(
[CODIGO_USUARIO] => 01
[0] => 01
[CODIGO_PRIVILEGIOS] => 01
[1] => 01
[NOMBRE_USUARIO] => admin
[2] => admin
[CLAVE] => admin
[3] => admin
[ESTADO] => 1
[4] => 1
)

)
  #17 (permalink)  
Antiguo 30/05/2014, 08:38
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: "Notice: Undefined index" en Login

creo que el registro que busque no existe
__________________
cada vez que aprendes algo te crees que no sabes nada
  #18 (permalink)  
Antiguo 30/05/2014, 09:20
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

Cita:
Iniciado por arros Ver Mensaje
creo que el registro que busque no existe

mande a imprimir la variable $username y $ password, este es el error completo con las credenciales ingresadas

admin
admin

Array
(
[0] => Array
(
[CODIGO_USUARIO] => 01
[0] => 01
[CODIGO_PRIVILEGIOS] => 01
[1] => 01
[NOMBRE_USUARIO] => admin
[2] => admin
[CLAVE] => admin
[3] => admin
[ESTADO] => 1
[4] => 1
)

)


Notice: Undefined index: CLAVE in C:\xampp\htdocs\SIS_UPES\libs\sesiones.php on line 47
Login incorrecto
  #19 (permalink)  
Antiguo 30/05/2014, 09:26
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

ademas solo existe ese registro
  #20 (permalink)  
Antiguo 30/05/2014, 10:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: "Notice: Undefined index" en Login

Tu problema es que ahora, con fetchAll() devuelves una lista de registros, no un sólo registro.

Consulta el manual, debería existir un fetchOne() o algo parecido.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #21 (permalink)  
Antiguo 02/06/2014, 22:19
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: "Notice: Undefined index" en Login

al final me funciono de esta forma, gracias a todos por su valiosa ayuda.

Código PHP:
function entrar() {
        global 
$login;
        
//Instanciamos la clase Conexion
        
$login = new Conexion();

        if (
$_POST['user']) {
//Comprobacion del envio del nombre de usuario y password
            
$username $_POST['user'];
            
$password $_POST['pass'];

            if (
$password == NULL) {
                echo 
"La password no fue enviada";
            } else {
                
$query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
                
//Definimos $con como global para evitar el mensaje NOTICE en la ejecucion
                
global $con;
                
//Prepara el query para la ejecucion
                
$stmt $con->prepare($query);
                
$stmt->execute();
                
$data $stmt->fetch(PDO::FETCH_ASSOC);
                if (empty(
$data)) {
                    
$result "Usuario no registrado!!";
                }

                if (
$data['CLAVE'] != $password) {
                    echo 
"Login incorrecto";
                } else {
                    
$query "SELECT * FROM usuario WHERE NOMBRE_USUARIO = '$username'";
                    
$stmt $con->prepare($query);
                    
$stmt->execute();
                    
$row $stmt->fetch(PDO::FETCH_ASSOC);

                    
session_start();

                    
$_SESSION["s_username"] = $row['NOMBRE_USUARIO'];
                    
//echo "Has sido logueado correctamente " . $_SESSION['s_username'] . " y puedes acceder al index.php.";
                    
header('Location: /vista_global.php');
                }
            }
        }
    } 

Etiquetas: index, login, mysql, select, undefined
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 06:03.