Foros del Web » Programando para Internet » PHP »

tengo que hacer login 2 veces para poder loguearme .s [solucionado]

Estas en el tema de tengo que hacer login 2 veces para poder loguearme .s [solucionado] en el foro de PHP en Foros del Web. Hola. El caso es ese, tengo un formulario para loguearse. Tecleo nombre de usuario y contraseña correctamente y le doy al submit. Y me devuelve ...
  #1 (permalink)  
Antiguo 12/05/2010, 16:32
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 10 años
Puntos: 16
tengo que hacer login 2 veces para poder loguearme .s [solucionado]

Hola. El caso es ese, tengo un formulario para loguearse. Tecleo nombre de usuario y contraseña correctamente y le doy al submit. Y me devuelve un error como si uno de los campos estuviera vacío. Sin embargo, si vuelvo a teclear el login y pass funciona. La verdad que está hecho todo muy simple y no logro comprenderlo. Ahí os dejo del código... a ver si me podéis ayudar:

Código PHP:
<?php
    
require("inc_db.php");

    
$username $_POST['username'];
    
$userpass $_POST['userpass'];
    
    
$result "SELECT username,userpass FROM control_usuarios WHERE username='$username' and userpass='$userpass'";
    
$datos mysql_query($result);
    
$fdatos mysql_fetch_array($datos);

    if (
$username == "" || $userpass == "")  //según fui probando, el error lo devuelve este if... pero sólo lo devuelve una vez -.-"
    
{
        
header("Location: login.php?error=datos_incorrectos");
    }
    elseif ((
$fdatos['username'] == $username) && ($fdatos['userpass'] == $userpass))
    {
        
session_start();
        
$_SESSION['usuario'] = $username;
        
header("Location: index.php");
    }
    else 
//aquí, probé a borrar este else pero sigue fallando, lo cual indica que el fallo se produce en el if de arriba
    
{
        
header("Location: login.php?error=datos_incorrectos");
    }

?>
Espero esas respuestas. Gracias! ^^

Última edición por uikekarallo; 13/05/2010 a las 07:14
  #2 (permalink)  
Antiguo 12/05/2010, 17:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.994
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: tengo que hacer login 2 veces para poder loguearme .s

Muestra tambien como tienes el formulario, tal vez desde alla viene el problema.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 12/05/2010, 18:41
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 10 años
Puntos: 16
Respuesta: tengo que hacer login 2 veces para poder loguearme .s

ok, eso está hecho ^^
ahí va el código del form.. aunque que yo sepa no tendría mucho que ver. claro que si supiera tanto no preguntaría jeje. j/k

Código PHP:
<form action="control_usuarios.php" method="post" name="login" enctype="multipart/form-data">
    <
class="principal_cuerpo" style="padding-left:50px;">
        
Nombre de usuario:
        <
br />
        <
input type="text" name="user" size="20" />
        <
br />
        <
br />
        
Contrase&ntilde;a:
        <
br />
        <
input type="password" name="pass" size="20" />
        <
br />
        <
br />
        <
input type="submit" name="submit" value="Conectar" />
    </
p>
</
form
si lo preferís, podéis probar vosotros mismos -> www.festasdesanvicente.es/login.php

nombre de usuario: ayuda
password: ayuda


y mientras, yo seguiré devanándome los sesos a ver si encuentro solución. Gracias de nuevo .D
  #4 (permalink)  
Antiguo 12/05/2010, 18:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.994
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: tengo que hacer login 2 veces para poder loguearme .s

Lo malo de no poner el codigo real es que a veces se nos olvidan pequeños detalles como el nombre de los campos:

Código PHP:
Ver original
  1. <?php
  2. $username = $_POST['username'];
  3. $userpass = $_POST['userpass'];
  4. ?>
  5. <input type="text" name="user" size="20" />

username o user?
password o pass?
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 12/05/2010, 18:59
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 10 años
Puntos: 16
Respuesta: tengo que hacer login 2 veces para poder loguearme .s

ok, solucionado! no edito el post que puse hace un momento para no liar mucho la explicación. como decía Triby había que mirar más detenidamente el formulario...

resulta que los name del formulario, yo enviaba user y pass, pero en el php buscaba el $_POST['username'] y $_POST['userpass'].

bien, pero yo sigo con dudas!! ahora los names del formulario están correctos y ya no da error. si pongo mal uno de los campos me devuelve el error, y si reintento sigue sin funcionar.

ahora lo que me pregunto es... como puede ser que al segundo intento se loguease (siempre con los datos correctos, en otro caso no se logueaba) si no estaba recibiendo correctamente los datos para las variables username y userpass... !! no lo entiendo!

bueno, de todas formas, en el enlace que os dejé, sigue sin cambiarse nada. si ponéis login: ayuda pass: ayuda la primera vez, no irá. si reintentáis, funcionará.

sin embargo, si ponéis login: ayuda pass: ayudaa las veces que queráis, no funcionará. vaya misterio...

mañana lo cambiaré en el hosting... aer si alguno lo mira y se le ocurre alguna explicación... o habrá que crear un sub-foro para expedientes x jeje

un saludo gente!! y thx, Triby ^^
  #6 (permalink)  
Antiguo 12/05/2010, 19:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.994
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: tengo que hacer login 2 veces para poder loguearme .s

Ok, ya vamos avanzando, ahora intenta al inicio del script habilitar la sesion:

Código PHP:
Ver original
  1. <?php
  2. $_SESSION['username'] = false; // Aqui asigna el valor que prefieras
  3.  
  4. // Aqui haces el proceso normal
  5. ?>

Ademas, en todas las paginas donde vayas a verificar si se inicio sesion debes usar siempre session_start(); como la primera linea del script.

Finalmente, despues de enviar un header('Location: ...'); es conveniente agregar exit; para cancelar la ejecucion del script.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 12/05/2010, 19:19
Avatar de uikekarallo  
Fecha de Ingreso: diciembre-2009
Ubicación: Galicia
Mensajes: 338
Antigüedad: 10 años
Puntos: 16
Respuesta: tengo que hacer login 2 veces para poder loguearme .s

entiendo... y es que aún estoy muy verde ^^

ok, ahora comprendo. tanto iniciar sesión, y donde tengo que poner un session_start() no lo pongo -.-! de ahí el fallo.

sólo iniciaba sesión en caso de que el login fuera correcto, pero el propio script también debe iniciar la sesión desde un principio, al igual que el resto de las páginas que son sólo para usuarios registrados (que en esas lo tengo bien xD).

también gracias por la recomendación de finalizar la ejecución del script con un exit(), nunca lo había hecho, nunca se me había ocurrido...

me encanta acostarme habiendo aprendido algo nuevo.

y de nuevo, muchas gracias, Triby.

ahora ya todo está correcto y funciona perfectamente. y en caso de duda, sé donde y a quien preguntar. un saludo .)

Etiquetas: login, poder, solucionado
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 13:22.