Foros del Web » Programando para Internet » PHP »

Validacion de login (php+ postgresql)

Estas en el tema de Validacion de login (php+ postgresql) en el foro de PHP en Foros del Web. Hola a todos, pues estoy creando una pagina web en la cual para acceder a ella se necesita validarse en un login, cuando pruebo poner ...
  #1 (permalink)  
Antiguo 09/01/2009, 13:40
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Validacion de login (php+ postgresql)

Hola a todos, pues estoy creando una pagina web en la cual para acceder a ella se necesita validarse en un login, cuando pruebo poner los usuarios y contraseñas en codigo duro no me da ningun problema, pero al tratar de compararlo con una base de datos entonces siempre me manda error, y no se a que se deba, mi codigo es el siguiente:

<?php
$con=pg_connect("host=127.0.0.1 port=5432 user=postgres password=*** dbname=Curso");
if(!$con)
{
echo "Conexion no establecida, verifique sus datos";
}
$usuario=$_POST["usuario"];
$pass=$_POST["password"];

$SQL="SELECT usuario, contrasena FROM comparacion WHERE usuario='$usuario' and contrasena='$pass'";
$busqueda=pg_query($SQL);
$compara=pg_fetch_array($busqueda);

if ($compara["usuario"]==$usuario && $compara["contrasena"]==$pass)
{
session_start();
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
}
else
{
header ('Location: logerror.php');
}
?>
Aqui siempre me manda al else, y por lo tanto al script de error; sin embargo por curiosidad comente el header y le puse las siguientes lineas:

echo "La cuenta es: ".$compara['usuario']." ";
echo "y su contraseña: ".$compara['contrasena']." ";

Para ver si existian los datos, y si me aparacen los datos de la bd, pero si ingreso mal algun campo (usuario o contraseña) las lineas me salen en blanco.
No se a que se deba que este error siga saliendo, soy algo novato en la programacion en php y por eso estoy algo perdido, si me pueden ayudar se los agradeceria.
  #2 (permalink)  
Antiguo 09/01/2009, 13:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Validacion de login (php+ postgresql)

session_start(); debe ser la primera linea de tu codigo y no basta con crear una sesion para autentificar al usuario, hay que agregar campos a $_SESSION que te permitan verificar que realmente se inicio sesion.

Ejemplo:
Código PHP:
<?php
// La sesion se inicia al principio del archivo
session_start();
// Aqui tu codigo bla bla bla

if ($compara["usuario"]==$usuario && $compara["contrasena"]==$pass)
{
$_SESSION['usuario'] = $usuario;
$_SESSION['pass'] = $pass;
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
}
Ahora, en cada pagina que tengas que verificar que se inicio sesion:
Código PHP:
<?php
session_start
();
$usuario $_SESSION['usuario'];
$pass $_SESSION['pass'];
// Verifica que el usuario y pass correspondan a lo que esta en base de dato

// Continua el proceso de tu archivo
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 09/01/2009, 15:27
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Validacion de login (php+ postgresql)

además después del header, siempre debes de utlizar un exit; asi te aseguras que ya no ejecute más líneas, y te sugiero que al menos desarrolles tu sitio modularmente, (te ahorras muchas líneas de código, mucho código por modificar, etc) para no tener que poner en la cabecera de cada página la sessión y variables de sesión.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #4 (permalink)  
Antiguo 09/01/2009, 15:45
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Validacion de login (php+ postgresql)

Bueno gracias por su ayuda, hice las rrecciones correspondientes, pero me sigue mandando directo a la pagina de error, y al checar la base de datos con otro script me aparecen los datos de la bd sin complicaciones; el problema es a la hora de compararlos (creo yo), ya que aunque introduzca los datos correctos me sigue mandando el error.
Gracias y espero que me puedan decir en donde esta este error o a que se deba, de antemano gracias
  #5 (permalink)  
Antiguo 09/01/2009, 15:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Validacion de login (php+ postgresql)

Ok, si no pusiste el else original despues de este codigo, agrega exit abajo del header:

Código PHP:
if ($compara["usuario"]==$usuario && $compara["contrasena"]==$pass)
{
$_SESSION['usuario'] = $usuario;
$_SESSION['pass'] = $pass;
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
exit;

Si aun con eso no funciona, prueba:
Código PHP:
if ($compara["usuario"]==$usuario && $compara["contrasena"]==$pass)
{
    die(
"Comparacion correcta, el error esta en otro lado");
    
$_SESSION['usuario'] = $usuario;
    
$_SESSION['pass'] = $pass;
    
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
    exit;
} else {
    die(
"Comparacion fallo [{$compara['usuario'}][$usuario] - [{$compara['pass']}][$pass]";
    
header ('Location: logerror.php');
    exit;

Introduces nombre de usuario y password y nos cuentas como te fue.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 09/01/2009, 16:24
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Validacion de login (php+ postgresql)

a ver no entiendo porque después de comparar en tu consulta el usuario y pass ingresado, lo vuelves a comparar(digo no?????).
pienso que tu código debería ser algo así.
Cita:
<?php
session_start();
If(isset($_POST$_POST["usuario"]) and isset($_POST["password"]))
{
$usuario=$_POST["usuario"];
$pass=$_POST["password"];
//validaciones de las variables
$con=pg_connect("host=127.0.0.1 port=5432 user=postgres password=*** dbname=Curso");
if ($con === PGSQL_CONNECTION_OK) {} else {echo 'no pudo conectarse';
}

$sql="SELECT id_usuario,usuario FROM usuarios WHERE usuario='$usuario' and contrasena='$pass'";
$query=pg_query($sql);
If(pg_num_rows($query)==1)
{
$row=pg_fetch_row($query);
$_SESSION["id"]=$row[0];
$_SESSION["usuario"]=$row[1];
header ('Location: curso/nihongo_aragon.php?modulo=inicio');
exit;
}
else
{
header ('Location: logerror.php');
exit;
}
}
else
{
echo “no existen los datos”;
}
?>
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #7 (permalink)  
Antiguo 09/01/2009, 17:03
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Validacion de login (php+ postgresql)

Pues ya probe los scripts, y me sucede lo siguiente:
con el script modificado de modo de triby me manda al else directamente, y por las lineas añadidas me muestra al introducir los datos:

[comparacion fallo 300307432][300307432] - [acero][acero]
los primeros corchetes muestan los datos de la db y los segundos los valores que introduje, sin embargo si introduzco alguno de los 2 datos incorrectos me sale:
comparacion fallo [][300307432] - []['acero]
que quiere decir (creo yo que al no ser identicos los 2 campos no me aparecen en los primeros corchetes nada de informacion.

Y con el script de argy:
Me manda tambien al script de error, por lo que no esta tomando en cuenta el if

if ($compara["usuario"]==$usuario && $compara["contrasena"]==$pass)

pues sigo sin entender el porque no toma el if,¿¿ talvez estoy introduciendo mal los argumentos?? Gracias
  #8 (permalink)  
Antiguo 09/01/2009, 17:15
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Validacion de login (php+ postgresql)

Cita:
if ($compara["usuario"]==$usuario && $compara["contrasena"]==$pass)
yo no utlizo este código en el que te envié, lo que hago es lo siguiente(te explico desde la consulta).

hago la consulta con los datos ingresados, luego con pg_num_rows($query), obtengo el número de registros, en este caso como un usuario es único, lo comparo con 1 si fuera así inicio las variables de sessión con los datos que identificaré al usuario, en caso de que no sea uno, entonces ejecuto el bloque error, no sé si me explico.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #9 (permalink)  
Antiguo 09/01/2009, 17:32
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Validacion de login (php+ postgresql)

en efecto, en el que mandaste compara los resultados de la columna y en caso de que exista me lo valida y deberia en trar en la pagina, ya habia intentado tambien con un script parecido a este, sin embargo ahora me manda de regreso a la pagina de logeo, ya ni siquiera al script de error.
talvez esten mal algunos parametros?? por que la conexion existe y comprobando con otros scripts la bd me aparecen los datos sin problema.
Gracias por tu ayuda, espero me puedas explicar el por que de esta situacion.

Última edición por kurokishi; 09/01/2009 a las 17:54
  #10 (permalink)  
Antiguo 09/01/2009, 19:07
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Validacion de login (php+ postgresql)

Si ahora te manda a la pagina de login, seguro es porque ya esta entrando correctamente a crear la sesion y el problema se da en como verificas esa sesion en curso/nihongo_aragon.php?modulo=inicio
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 12/01/2009, 11:53
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Validacion de login (php+ postgresql)

Hola nuevamente, pues no habia podido entrar este fin de semana.
Bueno, pues estuve checando lo que me sugeriste triby, pero igualmente no encuentro donde estoy mal ya que las variables de sesion que se utilizan en la pagina de validacion estan en mi pagina a la que estoy redirigiendo, este es mi script:

<?php
session_start();
$usuario= $_SESSION['usuario'];
$pass= $_SESSION['id'];
include ("seguridad.php");
echo "<html>";
echo "<head>";
echo "<title>日本語 の オンライアン 教室。</title>
</head>";
echo "<body margin-top: 0px; oncontextmenu='return false' onkeydown='return false' background='menu/fondo.jpg'>
<center>
<table width='1280' height='720'>";
echo "<tr>
<td width='1280' colspan='3' height='130'>
<embed src='animaciones/cabecera.swf' quality='high' bgcolor='#ffffff' width='1278' height='130' name='cabecera' align='middle' allowScriptAccess='sameDomain' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />
</td>
</tr>
<tr>
<td width='15%' height='15%' valign='top' name='menu'>";

include ("menu.php");
echo "</td>
<td width='85%' height='85%'>";
echo "<iframe src='Lecciones/".$_GET["modulo"].".php' height='100%' width='100%' scrolling='auto' frameborder='0' allowtransparency>";
echo "</iframe>";
echo "</td>
</tr>
</table>
</center>
</body>
</html>";
?>

El modulo de seguridad es el que NO permite que usuarios que no hayan iniciado sesion entren a la pagina y este es el script:

<?php
if($_SESSION["existe"]!='si')
{
header ('Location: ../nihongo.php');
exit();
}
?>

Otra kosa ke kisiera agregar es ke kisiera poner niveles de usuario, los kuales konstatarian del administrador y de los usuarios, y dependiendo del nivel redirigir a la pagina designada a cada nivel de usuario; en la bd ya tengo la columna donde se especifica el valor, ahora como lo meteria a mi script para que me mande a la pagina correspondiente, estaba pensando un switch, pero como le haria? gracias y espero me puedan orientar.

Última edición por kurokishi; 12/01/2009 a las 13:54
  #12 (permalink)  
Antiguo 19/01/2009, 16:25
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Validacion de login (php+ postgresql)

Hola, pues despues de estar checando lo que estaba mal ya me di cuenta que es lo que estaba mal, si estaba correcto el script de argy, lo que me estaba regresando a la pantalla de logeo era el script de seguridad, ya que en el script de comparacion de usuarios no estaba validando el $_SESSION['existe'], y por eso al no estar en el script me regresaba a la pantalla, pues gracias por su ayuda, me fueron de mucha utilidad
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:13.