como puedo validar el login

Iniciado por geshiro, 4 Junio 2015, 23:05 PM

0 Miembros y 1 Visitante están viendo este tema.

geshiro

alguien me puede ayudar o guia como validad el login de php para cuando pongo la contraseña mal o usuario que no me deje pasar a otra pagina como esta osea que me mande una alerta o meensaje

Código (html4strict) [Seleccionar]

<!doctype html>
<html lang="en" >
<head>
    <meta charset ="UTF-8">
<title>formulario flat design</title>
<link rel="stylesheet" href="css/main.css"/>
</head>
<body> 
  <div id="applicationform">
<p id="title">Welcome to </p>

<form action="login.php" methos="POST">   
<input type="mail" id="user" name="User" placeholder="Username" autocomplete="off">
<input type="password" id="pass" name="Pass"  placeholder="Password">
<input type="submit" id="fade2" value="login" class="login" href="index.html">
</form>
</div>
</body>
</html>



Código (php-brief) [Seleccionar]

<?php
    $User 
$_REQUEST['User'];
    
$Pass $_REQUEST['Pass'];

    
$conexion mysql_connect("localhost","root") or die ("PROBLEMAS AL CONECTA EL SERVIDOR");
    
mysql_select_db("adsu",$conexion) or die ("PROBLEMAS A CONECTAR CON LA DB");

    
$estandar mysql_query("SELECT * FROM usuario where login = '".$User."' and pass = '".$Pass."'",$conexion);
    
$admin    mysql_query("SELECT * FROM usuario where login = '".$User."' and pass = '".$Pass."'",$conexion);

    if(
$row mysql_fetch_array($estandar))
    {
      
header("Location: index_empleado.html");

    }else if(
$row mysql_fetch_array($admin))
         {
            
header("Location: index_admin.html");

         }

?>


LaThortilla (Effort)

#1
puedes hacer dos cosas desde el php o redireccionas o retornas.

-redireccionar:
si es incorrecto el password:
Código (php) [Seleccionar]
header ("Location: localhost/directorio/login.php");
-si es  correcto:
Código (php) [Seleccionar]
header ("Location: localhost/directorio/index.php");

-retornar valor.
    En este caso necesitarias utilizar ajax.... busca  un manual..
procedimiento:
     1-hacer peticion ajax a un archivo php
     2- procesar el password y usuario enviado desde ajax si password y usuario son validos.
    -Si es correcto:
            redireccionas a tu pagina home
     -sino retornas un valor (ejemplo 0)
     3- procesar el valor obtenido si es 0 mostrar un mensaje (password o usuario incorrecto)

Aqui tienes otra forma de hacerlo...
http://www.runnable.com/UyClLhrKWGFrcrQW/simple-php-mysql-jquery-login-script

DarK_FirefoX

Primero, utilizo poco:

Código (php) [Seleccionar]
mysql_connect();
mysql_select_db();


En cambio utilizo:

Citarmysqli();

Ahora, si entiendo bien, quieres mostrar una página en caso de que la contraseña esté mal!

Para esto tienes que comprobar que la contraseña ingresada sea la correcta para el usuario ingresado. Por lo tanto tu consulta a la base de datos te debe dar 1 fila (y solo una) en caso de que sea correcta. En caso contrario te devolverá 0 filas.

Puedes utilizar la función:

Código (php) [Seleccionar]
mysql_num_rows($query);

que te devuelve un int que representa el número de filas en la consulta.

Por ejemplo:

Código (php) [Seleccionar]
$estandar = mysql_query("SELECT * FROM usuario where login = '".$User."' and pass = '".$Pass."'",$conexion);

if(mysql_num_rows($estandar)==0){
header("Location: direccionDeTuArchivoErrorDeContrasenna.php");
}
else {
header("Location: ingresoContrasennaCorrectaArchivo.php");
}


Nota: Asumo que debes controlar que solo haya un usuario con el mismo "login".

Ojo: También deberías pensar en utilizar la función hash() para cifrar los passwords en la BD

Salu2s

geshiro

como le puedo hacer porque al momento que intento meter el login de usuario normal me sale error y el de admin no

<?php
    $User = $_REQUEST['User'];
    $Pass = $_REQUEST['Pass'];

    $conexion = mysql_connect("localhost","root") or die ("PROBLEMAS AL CONECTA EL SERVIDOR");
    mysql_select_db("db_login",$conexion) or die ("PROBLEMAS A CONECTAR CON LA DB");

    $employee = mysql_query("SELECT * FROM usuario where login = '".$User."' and pass = '".$Pass."'",$conexion);
    $admin    = mysql_query("SELECT * FROM usuario where login = '".$User."' and adminpass = '".$Pass."'",$conexion);
 
   if(mysql_num_rows($employee)==0)
    {
       header("Location: index.html");

    }else
         {
          header("Location: index_employee.html");
         }
    if(mysql_num_rows($admin)==0)
    {
        header("Location: index.html");
    }else
         {
            header("Location: index_admin.html");
         }
   
?>

DarK_FirefoX

Primero: Utiliza las etiquetas GeSHi para publicar código.

Ahora, no entiendo muy bien cual fue tu problema, o tal ves no te explicaste del todo bien, pero ten en cuenta que en el código que pusiste tienes un problema.

Cita de: geshiro en  6 Junio 2015, 00:49 AM
Código (php) [Seleccionar]
if(mysql_num_rows($employee)==0)
    {
       header("Location: index.html");
    }else
         {
          header("Location: index_employee.html");
         }
    if(mysql_num_rows($admin)==0)
    {
        header("Location: index.html");
    }else
         {
            header("Location: index_admin.html");
         }


Date cuenta que cuando haces el primer if, si el resultado de mysql_num_rows($employee) es 0 entonces te va a redireccionar a index.html. Y en caso contrario a index_employee.html. Por lo tanto no va a alcanzar nunca la linea del otro if.

Luego, deberías hacer algo como:

Código (php) [Seleccionar]
if(mysql_num_rows($employee)==0)
    {
       header("Location: index.html");
    }else
         {
//Y aquí comprobar el caso del administrador
}


En lo personal, aunque no estoy seguro lo que quieres y/o lo que estás tratando de hacer, no me parece adecuada esta forma que veo para controlar si el usuario es administrador, aunque esto me parece que viene dado un mal diseño de la BD. Lo que podrías hacer, es un campo tipo boolean en la BD que determina si es administrador o no. En este caso, un administrador sería un usuario normal, pero con privilegios de administrador, lo cual te eliminarías hacer esa doble query.

Espero esto te ayude. Cualquier otra cosa, no dudes en preguntar.

Salu2s

kaiserr

Como veo que ya te esta ayudando DarK_FirefoX no te vlveré a decir lo mismo.

Pero quería mencionar el tema de la seguridad. Tu metes directamente los datos que recibes por POST a la consulta de la BD... Ten cuidado porque podrían hacerte un SQL injection.

Mira de utilozar funciones como: mysql_real_escape_string

Saludos.

DarK_FirefoX

#6
Cita de: kaiserr en  6 Junio 2015, 02:32 AM
Como veo que ya te esta ayudando DarK_FirefoX no te vlveré a decir lo mismo.

Pero quería mencionar el tema de la seguridad. Tu metes directamente los datos que recibes por POST a la consulta de la BD... Ten cuidado porque podrían hacerte un SQL injection.

Mira de utilozar funciones como: mysql_real_escape_string

Saludos.

Exactamente, no había hecho el comentario pues el nombre de la página era:

Citarformulario flat design

Y pense que era algo más bien de pruebas y tal.

Pero si, debes cuidarte de una SQL Injection, en lo personal utilizo una función así para "sanear" los datos que me entra el user antes de procesarlos, la funcion recibe los datos y la conexión con la base de datos:

Código (php) [Seleccionar]
function sanitize($connection, $data)
{
return htmlentities(strip_tags(mysqli_real_escape_string($connection, $data);
}


(parece un poco exagerada xD :P)

Nota: Recibo un "link" pues utilizo mysqli

geshiro

alguine me puede ayudar como puedo arreglar mi codigo php para no pasar los datos directos por POST

Código (php-brief) [Seleccionar]

<?php
    $User 
$_REQUEST['User'];
    
$Pass $_REQUEST['Pass'];

    
$conexion mysql_connect("localhost","root") or die ("PROBLEMAS AL CONECTA EL SERVIDOR");
    
mysql_select_db("db_login",$conexion) or die ("PROBLEMAS A CONECTAR CON LA DB");

    
$estandar mysql_query("SELECT * FROM usuario where login = '".$User."' and pass = '".$Pass."'",$conexion);
    
$admin    mysql_query("SELECT * FROM usuario where login = '".$User."' and adminpass = '".$Pass."'",$conexion);
 
    if(
mysql_num_rows($estandar)==0)
    {
       
header("Location: index.html");

    }else
         {
          
header("Location: index_employee.html");
         }

    if(
mysql_num_rows($admin)==0)
    {
      
header("Location: index.html");

    }else
         {
          
header("Location: index_admin.html");
         }
?>



DarK_FirefoX

Cita de: geshiro en  7 Junio 2015, 01:10 AM
alguine me puede ayudar como puedo arreglar mi codigo php para no pasar los datos directos por POST

Y cuál es tu objetivo?

geshiro

osea poder acomoderlos y no sacarlos del method POST