Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Login solo me permite acceso con el último usuario de mi base de datos.

Estas en el tema de Login solo me permite acceso con el último usuario de mi base de datos. en el foro de PHP en Foros del Web. Hola a tod@s, les comento el problema que tengo con mi página de login: Tengo creado el sistema de sesión y el formulario para introducir ...
  #1 (permalink)  
Antiguo 12/05/2016, 14:39
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Login solo me permite acceso con el último usuario de mi base de datos.

Hola a tod@s, les comento el problema que tengo con mi página de login:
Tengo creado el sistema de sesión y el formulario para introducir el usuario y el password, y efectivamente, conecta y permite el acceso, pero sólo del último usuario añadido a la base de datos.
Con el resto de usuarios me manda el mensaje de error programado.
Aquí les dejo el código por si me pueden ayudar a solucionarlo:
accesoadmin.php
Código HTML:
<div class="col-lg-8">
                  <?php
                        if ($_GET[error] == "si") {
                          echo "Tu usuario y/o tu contraseña no son válidos. <br/>";
                          } elseif ($_GET[error] == "fuera") {
                            echo "No puedes entrar directamente en esta página. Introduce correctamente tus datos.<br/>";
                            }
                    ?>
                    <form action="sesion.php" method="post">   
       	              <label for "autor"> Nombre de Usuario</label>
       	              <input type="text" name="autor" placeholder="Tu nombre" required/>

       	              <label for "password">Contraseña</label>
       	              <input type="password" name="password" required/>
       	    
       	              <input type="submit" value="Enviar" />
                    </form><br />
                  </div> 
sesion.php
Código PHP:
<?php

    
include 'conexion_educamadrid.php';

    
$consulta $conexion -> query("SELECT * FROM autores") or die("Ha fallado la conexion");
        while ( 
$registro $consulta -> fetch_assoc() ) {
                
$usuariook $registro['autor'];
                
$passok $registro['password'];
        }

   
                  
    if ((
$_POST['autor'] == $usuariook) && ($_POST['password'] == $passok)) {
            
session_start();
            
$_SESSION["verificado"] = "si";
            
header ("Location: menuadmin.php");
            }     else {
                
header ("Location: accesoadmin.php?error=si");
                }
?>
Si el login es correcto, se abre menuadmin.php, que comienza:
Código PHP:
<?php
session_start
();
if(isset(
$_SESSION['verificado'])){ ?>
  #2 (permalink)  
Antiguo 12/05/2016, 15:09
Avatar de danielpatc  
Fecha de Ingreso: marzo-2016
Mensajes: 40
Antigüedad: 8 años, 1 mes
Puntos: 4
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

esa consulta te muestra todos los usuarios que existen en esa tabla y las variables toman el valor del ultimo registro, lo que debes hacer es poner un where en la consulta yo haría algo como:
Código PHP:
Ver original
  1. $usuariook = $_POST['autor'];
  2. $passok = $_POST['password'];
  3. $sql = "select count(*) from autores where autor = '$usuariook' and password = '$passook'";
y si el valor de count(*) es diferente de 0 es por que los datos son correctos =)
  #3 (permalink)  
Antiguo 12/05/2016, 15:50
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: Login solo me permite acceso con el último usuario de mi base de datos.

OFF TOPIC: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

Movido a Foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 12/05/2016, 16:49
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

Cita:
Iniciado por danielpatc Ver Mensaje
esa consulta te muestra todos los usuarios que existen en esa tabla y las variables toman el valor del ultimo registro, lo que debes hacer es poner un where en la consulta yo haría algo como:
Código PHP:
Ver original
  1. $usuariook = $_POST['autor'];
  2. $passok = $_POST['password'];
  3. $sql = "select count(*) from autores where autor = '$usuariook' and password = '$passook'";
y si el valor de count(*) es diferente de 0 es por que los datos son correctos =)
Lo he probado pero no me funciona. Aparece error en la página.
  #5 (permalink)  
Antiguo 12/05/2016, 18:37
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: Login solo me permite acceso con el último usuario de mi base de datos.

¿Qué error?
Te imaginarás que no tenemos capacidades telepaticas, No?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 12/05/2016, 23:48
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

Sí,.perdona mi inconcreción. Al poner la consulta como dices queda así:

Código PHP:
$consulta $conexion -> query("SELECT count(*) FROM autores WHERE autor ='$usuariook" and password ="$passok") or die("Ha fallado la conexion");
        while ( 
$registro $consulta -> fetch_assoc() ) {
                
$usuariook $registro['autor'];
                
$passok $registro['password'];
        } 
y el error dice que la página (sesion.php) no funciona, que no se puede procesar la solicitud ahora y debajo error http 500.
  #7 (permalink)  
Antiguo 13/05/2016, 00:16
Avatar de kip13  
Fecha de Ingreso: agosto-2011
Mensajes: 167
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

Hola.

Código PHP:
Ver original
  1. autor ='$usuariook" and password ="$passok")

Tienes mal colocada las comillas. Debe ser asi:

Código PHP:
Ver original
  1. autor ='$usuariook' and password ='$passok' ")

Avisanos como te fue.

Saludos
  #8 (permalink)  
Antiguo 13/05/2016, 02:04
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

Gracias kip13.
He corregido las comillas y ya no da el error, pero ahora no me deja acceder con ningún usuario, ni siquiera con el último de la base de datos. Me aparece el mensaje de error programado para nombre y/o usuario no váildo.
  #9 (permalink)  
Antiguo 13/05/2016, 03:57
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: Login solo me permite acceso con el último usuario de mi base de datos.

Bueno, si en lugar de reemplazar lo que tenías en el primer post con lo que te propusieron, es comprensible. Tu código inicial tiene un error de lógica. Y de los evidentes.

Vamos a ver si se entiende...

Primero: No basta con que copies la consulta, si luego pretendes buscar los mismos campos en el resultado, los cuales en realidad no existen más. La query ahora sólo verifica si usuario y PWD ya están registrados, porque NO NECESITA hacer otras comparaciones con ellos.
¿Se entiende?
SI los encuentra, eso es suficiente, ya que la comparación la hace en la BASE.

Luego, lo que debes hacer es simplemente ver si los encontró... nada más, y eso sucederá cuando la cantidad que cuente la query sea igual a UNO (1).

Ergo, NO NECESITAS recorrer un array (que fue tu primer error desde el principio), sino recuperar el UNICO REGISTRO que la nueva query devuelve.

Basicamente, hacer algo como:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include 'conexion_educamadrid.php';
  4. $usuariook = $_POST['autor'];
  5. $passok = $_POST['password'];
  6. $consulta = $conexion->query("SELECT count(*) existe FROM autores WHERE autor ='$usuariook' and password ='$passok'")
  7.         or die("Ha fallado la conexion");
  8. $registro = $consulta->fetch_assoc();
  9. $usuariook = $registro['existe'];
  10.  
  11. if ($existe == 1) {
  12.     session_start();
  13.     $_SESSION["verificado"] = "si";
  14.     header("Location: menuadmin.php");
  15. } else {
  16.     header("Location: accesoadmin.php?error=si");
  17. }
  18. ?>

Tu error inicial fue siempre que RECORRÍAS el resultado de TODOS los usuarios registrados sin hacer nada con ellos y quedando el puntero en el ultimo registro, con lo que el último valor que se tomaba era el último registro encontrado. Luego pretendías validar ESOS valores contra el que se estaba logueando... en lugar de validar los valores ingresados en los que YA existían en la base.
Tu código sólo podría funcionar si el usuario que se loguease fuese EXCLUSIVAMENTE el último registrado, y NUNCA otro.
Sencillamente no estabas analizando el código que escribiste.

No porque un código no tenga errores de sintaxis significa que está bien escrito. Además debe cumplir con la lógica que se desea construir. Y eso no estaba sucediendo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/05/2016 a las 05:21
  #10 (permalink)  
Antiguo 13/05/2016, 10:14
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

Gracias por tu ayuda gnzsoloyo.
Entiendo la lógica de lo que comentas, y me dispongo a editar el código con tus aportaciones. En cuanto tenga novedades vuelvo a escribir.
  #11 (permalink)  
Antiguo 13/05/2016, 10:37
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

No hay manera de que funcione. Ni siquiera con el código que has escrito...
¿Puede tener algo que ver con el error que la base de datos que nos obliga a usar nuestro servidor esté alojada en [URL="https://centro.educa.madrid.org/admin_dinamicas4/index.php"]https://centro.educa.madrid.org/admin_dinamicas4/index.php[/URL]

Última edición por 3lmojj; 13/05/2016 a las 10:47
  #12 (permalink)  
Antiguo 13/05/2016, 10:56
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: Login solo me permite acceso con el último usuario de mi base de datos.

Cita:
¿Puede tener algo que ver con el error que la base de datos que nos obliga a usar nuestro servidor esté alojada en
¿Y te parece que nosotros podemos saberlo?

¿AL menos te fijaste en las directivas que sin duda te han debido dar para el caso? Me refier a conexiones, versiones de PHP y demás.

Cita:
No hay manera de que funcione. Ni siquiera con el código que has escrito...
Ok...
¿Y te parece que "no hay manera de que funcione" es información útil?

1) Postea TODOS los errores que recibas, o el comportamiento que no se manifiesta, en forma DETALLADA y técnicamente clara.
2) Debuggea con cuidado cada paso, haciendo que muestre los valores relevantes para nuestro entendimiento. Es decir, pon todos los "echo" necesarios para visualizar los datos según vaya ejecutando el script.
3) Postea todo el código PHP que interviene en la consulta y su procesamiento, SIN omitir nada. ;No hace falta que pongas el HTML, eso no es demasiado relevante, porque NO vamos a ejecutarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 13/05/2016, 11:33
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

Yo no quiero hacerte perder el tiempo.
Si he añadido lo de la base de datos es por facilitar más datos o circunstancias que pensaba que podían ayudar o ser de interés. Si no lo son, pues disculpa mi ignorancia pero para solucionar el problema pensé en aportar esto para que los que me estáis ayudando tengáis más información.
En cuanto al código, he sustituido el que tenía antes con tu aportación, quedando así el archivo sesion.php :
Código PHP:
<?php

    
include 'conexion_educamadrid.php';

    
$usuariook $_POST['autor'];
    
$passok $_POST['password'];

    
$consulta $conexion->query("SELECT count(*) existe FROM autores WHERE autor ='$usuariook' and password ='$passok' ") or die("Ha fallado la conexion");
    
$registro $consulta->fetch_assoc();
    
$usuariook $registro['existe'];
    echo 
$usuariook ;

    if (
$existe == 1) {
        
session_start();
        
$_SESSION["verificado"] = "si";
        
header ("Location: menuadmin.php");
        }     
        else {
                
header ("Location: accesoadmin.php?error=si");
        }
?>
Entiendo que el resto de archivos no tengo que modificarlos.

Al subirlo al servidor y probar con varios registros de autor y password, con ninguno de ellos he podido acceder, mostrándome, igual que anteriormente, el mensaje programado de Usuario y contraseña no válidos con todos ellos.

Sigo a vuestra disposición para intentar solucionar este problema con mis limitados conocimientos, pero con amplia voluntad.
  #14 (permalink)  
Antiguo 13/05/2016, 11:54
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: Login solo me permite acceso con el último usuario de mi base de datos.

Bueno, nunca te va a validar bien si el resultado de la query lo pones en una variable, y la validación del IF en otra diferente... ¿No te parece?

Empezamos por debuggear bien:

Código PHP:
Ver original
  1. <?php
  2.  
  3. include 'conexion_educamadrid.php';
  4.  
  5. $usuariook = $_POST['autor'];
  6. $passok = $_POST['password'];
  7. $query = "SELECT count(*) existe FROM autores WHERE autor ='$usuariook' and password ='$passok' ";
  8.  
  9. // Verifiquemos v,isualmente cómo queda la consulta...
  10. echo $query;
  11.  
  12. $consulta = $conexion->query($query) or die("Ha fallado la consulta: ".$conexion->error);
  13. $registro = $consulta->fetch_assoc();
  14. // Esto está MAL. Estás pisando una variable y el resultado puede ser impredecible, y además, es la variable EQUIVOCADA...
  15. // $usuariook = $registro['existe'];
  16. $existe = $registro['existe'];
  17. echo $existe;
  18.  
  19. if ($existe == 1) {
  20.     session_start();
  21.     $_SESSION["verificado"] = "si";
  22.     header("Location: menuadmin.php");
  23. } else {
  24.     header("Location: accesoadmin.php?error=si");
  25. }
  26. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 13/05/2016, 15:45
 
Fecha de Ingreso: marzo-2016
Ubicación: Madrid
Mensajes: 31
Antigüedad: 8 años
Puntos: 1
Respuesta: Login solo me permite acceso con el último usuario de mi base de datos.

A mi me parece lo que tú digas, que eres quien sabe más de esto. Si tú dices que cambie el código, lo cambio; si hay que debuggear, yo debuggeo. Todo por solucionar el problema.

Este código sí realiza la función que le pedíamos. Problema solucionado. Ahora pueden acceder todos los registros de la base de datos.

Muchas gracias de nuevo por tu ayuda.

Etiquetas: bases-de-datos-general, mysqli
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 14:06.