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

Alterar e Remover

Bom dia,conclui o curso mas ainda tenho uma dúvida. Quando acessamos o Adiciona Produto sem estarmos logados ele nos dá a mensagem "Você não tem acesso a esta funcionalidade" até tudo ok,mas ao acessarmos a página Produtos conseguimos alterar ou remover sem estarmos logados Gostaria de saber se tem a possibilidade de bloquear assim como em Adiciona Produto se o usuário não estiver logado? Já tentei aqui de diversas formas,inclusive o projeto final também dá essa possibilidade de Alterar e Remover. Obrigado.

11 respostas

Você precisa criar uma função que verifique se u usuário está logado e o redirecione para index.php se não estiver, então chamar esse método no topo de todas as páginas que necessitam de login para serem acessadas.

Não sem em qual etapa exatamente você está no código, mas no tutorial isso é abordado. O meu código final ficou assim .

session_start();
function policia_login() {
    if (!verifica_login()) {
        $_SESSION["danger"] = "Você não tem acesso a esta funcionalidade.";
        header("Location: index.php");
        die();
    }
}

Então Skywalker eu fiz a função verificaUsuario (); dentro de logica-usuario.php

function verificaUsuario() { if(!usuarioEstaLogado()) { $_SESSION["danger"] = "Você não tem acesso a esta funcionalidade."; header("Location: index.php"); die(); } }

código do logica-usuario.php:

"", "descricao" => "", "preco" => "", "categoria_id" => "1"); $usado = ""; $categorias = listaCategorias($conexao); ?>
        
<h1>Formulário de produto</h1>
<form action="adiciona-produto.php" method="post">
    <table class="table">

        <?php include("produto-formulario-base.php"); ?>

        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Cadastrar</button>
            </td>
        </tr>
    </table>
</form>
        

index.php

        

        <h1>Bem vindo!</h1>

        <?php if(usuarioEstaLogado()) {?>
            <p class="text-success">Você está logado como <?= usuarioLogado() ?>. <a href="logout.php">Deslogar</a></p>
        <?php } else {?>
        <h2>Login</h2>
        <form action="login.php" method="post">
        <table class="table">
            <tr>
                <td>Email</td>
                <td><input class="form-control" type="email" name="email"></td>
            </tr>
            <tr>
                <td>Senha</td>
                <td><input class="form-control" type="password" name="senha"></td>
            </tr>
            <tr>
                <td><button class="btn btn-primary">Login</button></td>
            </tr>
        </table>
        </form>
        <?php } ?>
    

Agora quando clico em Produtos ele me redireciona para produto-lista.php e não dá a mensagem.Por favor veja se há algo de errado? segue o código de produto-lista.php

?php require_once("cabecalho.php"); require_once("banco-produto.php"); require_once("logica-usuario.php"); verificaUsuario(); ?>

    <td><?= $produto['nome'] ?></td>
    <td><?= $produto['preco'] ?></td>
    <td><?= substr($produto['descricao'], 0, 40) ?></td>
    <td><?= $produto['categoria_nome']?></td>
    <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto['id']?>">alterar</a></td>

    <td>
        <form action="remove-produto.php" method="post">
            <input type="hidden" name="id" value="<?=$produto['id']?>">
            <button class="btn btn-danger">remover</button>
        </form>
    </td>
</tr>
<?php
    endforeach
?>    

No remover você teria que fazer algo desse tipo. Tenta colocar o veficaUsuario(); no produto-formulario.php

<?php require_once("cabecalho.php"); require_once("banco-produto.php"); require_once("logica-usuario.php");

// só adicionar esse linha verificaverificaUsuario();

$id = $_POST['id']; removeProduto($conexao, $id); $_SESSION["success"] = "Produto removido com sucesso."; header("Location: produto-lista.php"); die();

Boa noite VANDEMBERG LIMA,no remove-produto.php o meu código está exatamente igual ao seu e no produto-formulário.php já tinha o verificaUsuario();

O que eu queria era se não estivesse logado eu pudesse ver a página do produto-lista.php mas NÃO PUDESSE fazer alteração ou remoção do produto,entendeu? Isso já acontece quando eu clico no Adiciona Produto sem estar logado,ele não deixa eu acessar a página e vai para tela de login.

Tenta assim, no arquivo produto-altera-formulario.php adiciona o logica-usuario.php e chama uma função com um nome diferente da verificaUsuario(); pode até ser uma verificaUsuario2(); e dentro do arquivo logica-usuario.php você vai adicionar a função abaixo.

function verificaUsuario2() {
    if(!usuarioEstaLogado()) {
        $_SESSION["danger"] = "Voce nao tem acesso a essa funcao!";
        header("Location: lista-produto.php");
        die();
    }
}

pronto, agora ele verifica se o usuário está logado quando ele clicar em alterar o produto, se não estiver logado ele devolve ele para a mesma página, você pode fazer a mesma coisa no excluir produto se quiser.

um abraço.

Aí sim! Agora entendi o que era! hahahahaha.

Boa tarde Everton Luiz,infelizmente não funcionou ainda esse código não impede de alterar e remover os produtos,fiz exatamente o que você falou.

Mas você colocou mesmo a função de verificar o login no topo das páginas de formulários(inserir e alterar), e no topo do arquivo que tem a lógica de alterar / inserir , e no topo do arquivo que faz o acesso da base de dados? Está difcícil ver o código que você postou porque a formatação ficou toda "zoada", m as não vi isso no seu formulário de alterar.

O meu projeto está nesse domínio, olha ai que deu certo o que eu disse para fazer anteriormente.

http://buscomp.com.br/
solução!

Haaaaa o usuário é:

paulo@email.com
e a senha é:

123
caso alguém queira testar =D

Obrigado Everton Luiz consegui resolver!

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