Jump to content

Validar o login redirecionando o admin para a sua página


Santos54

Recommended Posts

Boas tardes nao consigo validar os dados quando se faz o login:

validalogin.php: 

<?php
    session_start();
    
  // se username e pass foram postados
  if (isset($_POST['username']) && isset($_POST['pass'])) {
    // conecta ao database
    require 'config.php';

    // escapa as string pra evitar scripts maliciosos
    $uname = $conn->real_escape_string($_POST['username']);
    $passw = $conn->real_escape_string($_POST['pass']);
    $lvlacesso = $conn->real_escape_string($_POST['NivelAcesso']);

    // guarda o uname na sessão
    $_SESSION['NmUtilizador'] = $uname;
    $_SESSION['NivelAcesso'] = $lvlacesso

    // define a consulta a ser realizada
    $query = "SELECT * FROM users where NmUtilizador='$uname' and PalavraPasse='$passw' and NivelAcesso='$lvlacesso'";

    // executa a consulta e guarda o resultado em $result
    $result = $conn->query($query);

    // verifique se houve alguma falha durante a execução da consulta
    if ($sqli->error) {
      // exibe mensagem:
      die('<p class="error">Falha na consulta: ' . $conn->error . '</p>');

      // se não houve falha e há algum resultado
    } else if ($result->num_rows) {

      // direciona a outra página
      header('location:indexposlogin.php');

      // se não houve nenhuma falha, mas nada foi encontrado
    } else {
      // carrega a página de login
      include('site/login.html');

      // com essa mensagem de erro
      echo '<h1 class="bad">Erro de Autenticacao</h1>';
    }
  }

  // se username ou pass não foram postados
  echo '<h1 class="bad">Envie Username and pass</h1>';

// o mysqli $sqli é encerrado automagicamente ao fim da execução de cada request


if ($_SESSION['NivelAcesso'] == '1') { // check the value of the 'status' in the db
    //go to admin area
    header("Location: indexadmin.php");
} else {
    //go to members area
    header("Location: indexposlogin.php");  
}


login.php 

<!doctype html>
<html lang="en">
  <head>
      <title>Página de Login</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700&display=swap" rel="stylesheet">

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    
    <link rel="stylesheet" href="css/stylelogin.css">
    
    <style>
        h3{
            text-align: center;
        }
        
        .disclaimer{
            visibility: hidden;
        }
    </style>

    </head>
    <body>
    <section class="ftco-section">
        <div class="container">
            <div class="row justify-content-center">
                <div class="col-md-6 text-center mb-5">
                    <h2 class="heading-section">Inicie sessão</h2>
                </div>
            </div>
            <div class="row justify-content-center">
                <div class="col-md-7 col-lg-5">
                    <div class="wrap">
                        <div class="img" style="background-image: url(Imagens/imagemlogin.png);"></div>
                        <div class="login-wrap p-4 p-md-5">
                      <div class="d-flex">
                          <div class="w-100">
                              <h3 class="mb-4">Login</h3>
                          </div>
                      </div>
                            <form action="validalogin.php" class="signin-form">
                          <div class="form-group mt-3">
                              <input type="text" class="form-control" required>
                              <label class="form-control-placeholder" for="username">Nome de Utilizador</label>
                          </div>
                    <div class="form-group">
                      <input id="password-field" type="password" class="form-control" required>
                      <label class="form-control-placeholder" for="password">Palavra-Passe</label>
                      <span toggle="#password-field" class="fa fa-fw fa-eye field-icon toggle-password"></span>
                    </div>
                    <div class="form-group">
                        <button type="submit" class="form-control btn btn-primary rounded submit px-3">Entrar</button>
                    </div>
                    <div class="form-group d-md-flex">
                        <div class="w-50 text-left">
                            <label class="checkbox-wrap checkbox-primary mb-0">Lembrar me
                                      <input type="checkbox" checked>
                                      <span class="checkmark"></span>
                                        </label>
                                    </div>
                                    <div class="w-50 text-md-right">
                                        <a href="#">Esqueci me da palavra-passe</a>
                                    </div>
                    </div>
                  </form>
                  <p class="text-center">Não és membro?  <a data-toggle="tab" href="registar.php">Registar me</a></p>
                  <p class="text-center"><a data-toggle="tab" href="https://ingamept.000webhostapp.com/">Voltar</a></p>
                </div>
              </div>
                </div>
            </div>
        </div>
    </section>

    <script src="js/jquery.min.js"></script>
  <script src="js/popper.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script src="js/main.js"></script>

    </body>
</html>
Link to comment
Share on other sites

onde é que coloco isso?

 

é que recebo estes erros: 

 

Notice: Undefined index: NivelAcesso in /storage/ssd1/512/18843512/public_html/validalogin.php on line 52

Warning: Cannot modify header information - headers already sent by (output started at /storage/ssd1/512/18843512/public_html/validalogin.php:47) in /storage/ssd1/512/18843512/public_html/validalogin.php on line 57

Edited by Santos54
Link to comment
Share on other sites

<!-- Tens que definir como POST, por defeito faz GET -->
<form action="validalogin.php" class="signin-form" method="post">
  <div class="form-group mt-3">
    <!-- AQUI -->
    <input name="username" type="text" class="form-control" required>
    <label class="form-control-placeholder" for="username">Nome de Utilizador</label>
  </div>
  <div class="form-group">
    <!-- AQUI -->
    <input name="pass" id="password-field" type="password" class="form-control" required>
    <label class="form-control-placeholder" for="password">Palavra-Passe</label>
    <span toggle="#password-field" class="fa fa-fw fa-eye field-icon toggle-password"></span>
  </div>
  <!-- ..... -->

Deixo o código acima com o que precisas de fazer.

Depois vais ter outro erro por causa do $lvlacesso = $conn->real_escape_string($_POST['NivelAcesso']); pois não tens esse campo no formulário em lado nenhum.

- Ou removes essa parte do PHP ou se estiver vazio defines um valor por defeito

<?php 
  // Testa se existe um valor para NivelAcesso, se sim, filtra, se não atribui 0
  $lvlacesso = isset($_POST['NivelAcesso']) ? $conn->real_escape_string($_POST['NivelAcesso']) : 0;
//...

Usei 0 no exemplo como valor por defeito, mas depende de como está definido o nível para os utilizadores.

Feito é melhor que perfeito

Link to comment
Share on other sites

Ok, então tens que ver qual é a melhor opção para esse caso.

Se for um login genérico que todos vão usar independentemente do nível, é melhor remover validação do NivelAcesso, e da query SQL

<?php 
  
  // define a consulta a ser realizada
    $query = "SELECT * FROM users where NmUtilizador='$uname' and PalavraPasse='$passw' and NivelAcesso='$lvlacesso'";

// SEM validação de nivel
    $query = "SELECT * FROM users where NmUtilizador='$uname' and PalavraPasse='$passw'";

Já agora, cuidado com palavras passe sem estarem encriptadas, é fácil dar a mínima segurança

Feito é melhor que perfeito

Link to comment
Share on other sites

e entao como faço para redirecionar o administrador para a sua pagina?

eu tenho isto:

if ($_SESSION['NivelAcesso'] == '1') { // check the value of the 'status' in the db
    //go to admin area
    header("Location: indexadmin.php");
} else {
    //go to members area
    header("Location: indexposlogin.php");  
} 

mas nao funciona

Link to comment
Share on other sites

A variável de sessão  $_SESSION['NivelAcesso'] = $lvlacesso tem que ser definida com base no resultado da validação do utilizador, e como estas a fazer um select * o nível virá na resposta quando o login tiver sucesso.

Só após a validação com sucesso deves criar esse tipo de variáveis de controlo

Feito é melhor que perfeito

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.