Ayuda con la validacion de un login con privilegios de usuario

Iniciado por jaoc6, 21 Marzo 2018, 22:05 PM

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

jaoc6

Hola gente! Quiero hacer un login con privilegios de usuarios, tengo una base de datos llamada login, con una tabla "cuentas" con los campos "usuario" , "contraseña" y "tipo_cuenta". En los formularios para iniciar sesion solo tengo 2 inputs para el usuario y la contraseña. Las contraseñas de las cuentas que he creado las encripte con password_hash() y el tipo de usuario los ingrese con un select (Usuario y administrador).

Este es el archivo que procesa los datos enviados por el formulario:
<?php
  
require("config.php");


  try {
  
$usuario=htmlentities(addslashes($_POST['user']));
  
$password=htmlentities(addslashes($_POST['pass']));
  
$contador=0;

  
$conexion = new PDO ("mysql:host=$host; dbname=$dblogin""$dbusuario""$contrasenadb");
  
$conexion->setAttribute (PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

  
$sql"SELECT * FROM cuentas where usuario= :user";
  
$resultado=$conexion->prepare($sql);
  
$resultado->execute(array(":user"=>$usuario));

  while (
$registro=$resultado->fetch(PDO::FETCH_ASSOC)) {

    if (
password_verify($password$registro['contrasena'])) {
      
$contador++;
    }
  }
  if (
$contador>0) {

    
session_start();
$_SESSION["usuario"]=$usuario;

header("location:administrador.php");

  }else {
    
header("location:index.php");
  }

  } catch (
Exception $e) {
    die(
" Error: " $e->getMessage());
  }


El inicio de sesion esta bien, procesa la contraseña cifrada pero me gustaria poder que inicie sesion y lo direccionara a una pagina diferente dependiendo del tipo_cuenta que tenga el usuario en la base de datos. He probado diferentes if else dentro del "if(contador>0)" de la linea 23 pero nada me resulta.
Quiero aclarar que soy nuevo en esto y me he guiado de este canal : https://www.youtube.com/watch?v=XfOxyQcbawc&list=PLU8oAlHdN5BkinrODGXToK9oPAlnJxmW_&index=69

Espero haberme explicado bien, sería de mucha ayuda sus sugerencias.Gracias

#Aitor

#1
No sé que tipo será Tipo_cuentas, string, entero etc... Pero yo probaría a traer el valor de tipo_cuentas dónde usuario fuera usuario, dentro de un switch, y dependiendo de lo que devolviese haría una cosa u otra, tal que así:

Código (php) [Seleccionar]

<?php

$resultado 
$conexion->query("SELECT tipo_cuenta FROM cuentas WHERE usuario= '$user'")->fetchColumn();

switch (
$resultado) {
  case 
'admin':
    
header("Location:Admin.php"); 
    break;

  case 
'moderador':
    
header("Location:Moderador.php"); 
    break;
    
  default:
    
header("Location:Index.php"); 
    break;
}

?>

Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}