Jump to content

Formulário de Login em PHP e SQL


JoanaAC

Recommended Posts

Olá a todos,

Pedia por favor a vossa ajuda.

Estou a construir um formulário de login, mas não consigo redirecionar para uma página ao fazer login e não encontro o erro.

Podem pf ajudar-me:

<?php
  require_once 'CLASSES/usuarios.php';
  $u = new Usuario;
?>
<!DOCTYPE html>
<html lang="PT">
<head>
      <title> ... </title>
      <meta charset="utf-8">
      <meta name="description" content="página teste da web">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <!-- Fontes -->
      <link rel="preconnect" href="https://fonts.gstatic.com">
      <link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&display=swap" rel="stylesheet">
      <!-- CSS -->
      <link rel="stylesheet" href="CSS/style.css">
</head>
<body>
  <header>
  </header>
<main>
  <section>
  <div id="corpo-form">
        <h2><strong>Entrar</strong></h2>
       <form method="POST">
           <input type="email" name= "email" placeholder="Email">
           <input type="password" name= "senha" placeholder="senha">
           <input class="btnsub" type="submit" value="ACESSAR">
           <a href="cadastrar.php"> Ainda não esta registado?<strong> Registe-se agora!</strong></a> 
       </form>                               
  </div>    
  <?php
if(isset($_POST['email']))
  {
    $email = addslashes($_POST['email']);
    $senha = addslashes($_POST['senha']);
   
    if(!empty($email) && !empty($senha)) 
    {
      $u->conectar("", "", "", "");
     if($u->msgErro == "") 
    {
        if($u->logar($email,$senha))
        {
         header("location: AreaPrivada.php");
        }
        else 
        {
          ?>
             <div class="msg-erro"> E-mail e/ou senha incorretos. </div>
          <?php
        }
    } 
    else
    {
      ?>
            <div class="msg-erro"> <?php echo "Erro: ".$u->msgErro; ?> </div>
        <?php
    }
    } else
    {
      ?>
      <div class="msg-erro"> Por favor preencha todos os campos! </div>
      <?php
    } 
  }    
  ?>
  </section>
</main>
</body>
</html>

Obrigada!

Link to comment
Share on other sites

Os headers é suposto serem a primeira coisa a ser enviada na resposta, ou seja, devem aparecer antes de começares a fazer output do HTML.  Até porque no caso de um redirect, não é suposto fazeres output do HTML.

É possível contornar este requisito de definir os headers no início fazendo uso do output buffer, mas não me parece grande abordagem (verdade seja dita, usar PHP em geral, e sobretudo sem uma boa framework, também não me parece boa ideia 😄).

  • Vote 1
Link to comment
Share on other sites

Como está a referir o @Rui Carlos o header deve estar no inicio do script. Deixo este link externo só sobre redirects

 

Outra possível abordagem (visto que não usa frameworks) é simular um sistema de template (aconselhável), onde carrega a página de login usando include quando o login está ativo, ou com erro, e carrega a página seguinte (com controle de sessões se o login estiver correto). Mais sobre sessões

<?php 
// Exemplo muito simple para demonstração do conceito  
// Codigo de validação....
$errors = [];
//...
  
if($isLoginValid){
  	
	include "AreaPrivada.php" 
      
}else{
  
  // login.php terá acesso à variavel $errors
  include "login.php";
  
}
  
  Edited by Ivo Vicente
Typo

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.