Santos54 Posted May 27, 2022 at 01:23 PM Report Share #626062 Posted May 27, 2022 at 01:23 PM 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 More sharing options...
Ivo Vicente Posted May 27, 2022 at 01:38 PM Report Share #626063 Posted May 27, 2022 at 01:38 PM Viva, Assim rapidamente, os inputs do formulário precisam de ter o atributo name , pois é pelo name que o $_POST é preenchido. Para veres o que está a chegar ao validalogin.php podes usar var_dump($_POST); Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Santos54 Posted May 27, 2022 at 01:44 PM Author Report Share #626064 Posted May 27, 2022 at 01:44 PM (edited) 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 May 27, 2022 at 01:50 PM by Santos54 Link to comment Share on other sites More sharing options...
Ivo Vicente Posted May 27, 2022 at 02:25 PM Report Share #626065 Posted May 27, 2022 at 02:25 PM <!-- 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 More sharing options...
Santos54 Posted May 27, 2022 at 02:26 PM Author Report Share #626066 Posted May 27, 2022 at 02:26 PM está em boolean o 1 para o admin e 0 para os users normais Link to comment Share on other sites More sharing options...
Ivo Vicente Posted May 27, 2022 at 02:32 PM Report Share #626067 Posted May 27, 2022 at 02:32 PM 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 More sharing options...
Santos54 Posted May 27, 2022 at 02:37 PM Author Report Share #626068 Posted May 27, 2022 at 02:37 PM 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 More sharing options...
Ivo Vicente Posted May 27, 2022 at 03:55 PM Report Share #626070 Posted May 27, 2022 at 03:55 PM 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 More sharing options...
Santos54 Posted May 27, 2022 at 06:56 PM Author Report Share #626074 Posted May 27, 2022 at 06:56 PM ainda sou novo nisto consegues mandar me o codigo e explicar me? peço desculpa Link to comment Share on other sites More sharing options...
Ivo Vicente Posted May 28, 2022 at 04:20 PM Report Share #626077 Posted May 28, 2022 at 04:20 PM Eu compreendo que sejas novo nisto, no entanto as explicações necessárias penso que já as dei todas acima. Um pouco de esforço e estudo vais conseguir resolver, boa sorte. 1 Report Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now