Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvidas sobre orientação a objetos

Boa tarde,

Sou iniciante em programação, conclui alguns cursos de linguagem php aqui na plataforma da Alura, cursos esses que tem agregado muito no meu desenvolvimento. Me motivei a encarar um desafio de criar um projeto consolidando os aprendizados desses cursos.

O projeto é de criar uma aplicação usando o padrão MVC com orientação a objeto. Essa aplicação contará com cadastro de usuário e estrutura de login que valida o usuário e direciona para o sistema onde ele irá trabalhar, estou em faze inicial do projeto.

Desenvolvi uma pagina index que seria o site da empresa com os links no menu para o usuário fazer o cadastro se não for cadastrado e fazer o login caso já tenha feito seu cadastro, ambos os links direcionam para paginas diferentes de acordo com a sua funcionalidade!

A parte de cadastro consegui fazer e está funcionando, os dados cadastrados estão sendo inseridos no banco de dados, estou tendo dificuldades em fazer a parte da validação do login e logar no sistema.

index.php

<?php

include '../includes/header.php';

?>
    <title>Home</title>
</head>

<body>
    <header>
        <nav class="navbar navbar-expand-lg bg-light fixed-top menu-top border-bottom border-primary">
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
                aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse justify-content-end mt-3" id="navbarNav">
                <ul class="nav nav-tabs card-header-tabs">
                    <li class="nav-item">
                        <a class="nav-link" href="#">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="cadastro.php">cadastre-se</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="login.php">Login</a>
                    </li>
                </ul>
            </div>
        </nav>
    </header>
    <main>

    </main>
    <footer>

    </footer>

</body>

<?php
include '../includes/footer.php'
?>
</html>

login.php

Aqui vem a primeira dúvida, não sei se estou instanciando a classe Login da forma correta...

<?php

include '../includes/header.php';
require_once '../models/conexao.php';
require_once '../controllers/ControllerLogin.php';
require_once '../models/redireciona.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 2 - Criando método para acessar o conteúdo dos metodos post do formulário
    $login = new Login($mysql);
    $valida_login = $login->logar($_POST['usuario'], $_POST['senha']);

    if ($login) {
        redireciona('../views/dashboard.php');
        exit;
    } else {
        redireciona('../views/login.php');
        exit;                      
    }
}

?>
    <title>Login</title>
</head>

<body>
    <div class="container border rounded bg-light mt-5">
        <article class="container">
            <div class="d-flex justify-content-center mt-5 mb-3">
                <img class="logo" src="../assets/imagens/logo.jpg" alt="Logo Inova Ação Tecnologia">
            </div>
            <div class="d-flex justify-content-center mb-2 col">
                <h5>Faça seu login</h5>
            </div>
            <form class="container container-modal flex-column mb-2" action="../controllers/ControllerLogin.php" method="POST">
                <div>
                    <input type="text" class="form-control radius-top p-4" id="usuario"
                        placeholder="Insira o nome de usuário cadastrado" name="usuario">
                </div>
                <div>
                    <input type="text" class="form-control radius-botton p-4" id="senha" placeholder="Senha" name="senha">
                </div>
                <div class="d-flex justify-content-center mt-3">
                    <div class="input-control">
                        <label for="">
                            <input class="form-check-input" type="checkbox" value="" aria-label="">
                            Remember me
                        </label>
                    </div>
                </div>
                <div class="d-flex justify-content-center my-4">
                    <button type="submit" class="btn btn-primary botao-modal">Entrar</button>
                </div>
            </form>
        </article>
    </div>
</body>

<?php
include '../includes/footer.php'
?>
</html>
3 respostas

ControllerLogin

Aqui tem a segunda dúvida, não sei se a lógica está coerente, tentei aqui acessar os dados do banco e conferir se eles existem lá para permitir ou não o acesso.

<?php

require_once '../models/conexao.php';
require_once '../models/redireciona.php';

session_start();

class Login
{
    // Inicia a variável $mysql
    private $mysql;

    // Cria a função construtora
    public function __construct(mysqli $mysql)
    {
        $this->mysql = $mysql;
    }

    public function logar()
    {
        $usuario = mysqli_real_escape_string($this->mysql, $_POST['usuario']);
        $senha = mysqli_real_escape_string($this->mysql, $_POST['senha']);

        $result = $this->mysql->query("SELECT id, usuario FROM cadastro WHERE usuario = '{$usuario}' and senha = '{$senha}'");
        $login = mysqli_fetch_row($result);

    }

}

obs:

Quando simulo o login está direcionando para ControllerLogin que foi passado no action do form, eu gostaria que direcionasse para dashboard.php se usuário e senha cadastrados ou para login.php caso usuário e senha não cadastrados.

solução!

Oi Rodrigo, tudo bem?

Aqui na Alura já existe um treinamento de PHP com MVC seguindo algumas boas práticas, agregaria muito na sua aprendizagem.

Bons estudos.

Obrigado Diego, vou assistir o curso aqui...

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software