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

Exclusão do Produto não mostra a mensagem.

Olá!

Estou com um problema na hora de mostrar a mensagem de produto excluído usando o escopo de flash.

Todas as mensagens estão sendo exibidas, como o "Logado com sucesso", "Deslogado com sucesso", "Ação não permitida" e "Produto adicionado com sucesso". Porém ao excluir o produto e usando o mesmo método das outras mensagens, como mostrado na vídeo aula, a mensagem ainda sim não é exibida, como se a variável $_SESSION["success"] estivesse vazia. Podem me ajudar?

Segue o código do meu "remove-produto.php"

<?php
//inclusão do arquivo de modelo
include(__DIR__ . "/../model/produtos.php");

$id = $_POST['id'];

if (removeProduto($conexao, $id)) {
    $_SESSION["success"] = "Produto removido com sucesso.";
    header("Location: /../view/produto-lista.php");
    die();
}
else {
    $_SESSION["danger"] = "Falha ao remover produto.";
    header("Location: /../view/produto-lista.php");
    die();
}
4 respostas

Oi Victor, tudo bom?

Você chegou a verificar se $_SESSION["danger"] tem alguma coisa? Como o if redireciona pra mesma tela talvez ele esteja caindo no else.

Verifica, primeiro, em que lugar do if está caindo. Algo como:

if (removeProduto($conexao, $id)) {
    $_SESSION["success"] = "Produto removido com sucesso.";
var_dump("sucesso");die();
    header("Location: /../view/produto-lista.php");
    die();
}
else {
var_dump("falha");die();
    $_SESSION["danger"] = "Falha ao remover produto.";
    header("Location: /../view/produto-lista.php");
    die();
}

Além disso, se você quiser, compartilha com a gente o produto-lista.php pra gente ver certinho o outro lado também =)

Abraço

solução!

Fala Victor, tudo certo? Espero que sim! Então, vi que você está utilizando uma variavel de sessao para mostrar as mensagens, então, creio que você saiba mas para utilizar variaveis de sessao, é necessario startar a sessao para que o array $_SESSION seja "criado" (ou ressuscitado (gosto de usar esse termo haha) quando ele já foi criado, vi seu código e notei que não é feita a inicialização da sessao, já tentou fazer isso?

<?php
//inclusão do arquivo de modelo
include(__DIR__ . "/../model/produtos.php");

session_start(); // Aqui é feito a "ressurreição" do array $_SESSION, podendo assim ser utilizado como você preferir.
// Coloquei aqui, para que ele possa ser utilizado no arquivo como um todo, porém você pode escolher por dentro dos cases.. Como achar melhor.

if (removeProduto($conexao,  $_POST['id'])) {

    $_SESSION["success"] = "Produto removido com sucesso.";
    header("Location: /../view/produto-lista.php");
    die();
} else {
    $_SESSION["danger"] = "Falha ao remover produto.";
    header("Location: /../view/produto-lista.php");
    die();
}

Haa!! E eu fui ousado e substitui o $id por $_POST['id'] direto na passagem do parametro!! haha, perdoe minha ousadia :p

Enfim, acredito que esse seja o problema, caso não resolvido poste mais código para analisarmos juntos!! Desejo sorte, sucesso!

Bom dia!

Em relação à resposta do André: Fiz o dump da forma como tu colocou e o meu if está caindo onde deveria, no "sucesso". Mas independente de onde estiver caindo, alguma mensagem ele deveria mostrar, seja ela de sucesso ou de falha. Aproveitei e testei o conteúdo da mensagem das duas variáveis e como o esperado, o valor delas está com a minha mensagem, seja ela de sucesso ou falha (quando há).

Já em relação a resposta do Gabriel: Era isso, a sessão não estava inicializada, com isso não mostrava a mensagem. Mas o curioso é, que na função que eu uso para destruir a sessão, logo na próxima eu crio uma nova, pra não correr esse risco.

Não sei porque não funcionou do meu jeito, alguma ideia?

//reinicia a sessão
function logout() {
    //finaliza a sessão juntamente com todas as suas variáveis
    session_destroy();
    //reinicia a sessão para uso posterior
    session_start();
}

Enfim, obrigado aos dois pela ajuda. Abração!

Boa Gabriel e Victor!

Fico feliz que tenha resolvido =)

abraço