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

Mensagens pela Sessão

Estou enfrentando um problema e estou um pouco perdido.

Quando tento passar as mensagens de sucesso e falha pela sessão, está funcionando parcialmente.

No index.php elas funcionam adequadamente (informando o sucesso do login ou sua falha, bem como a impossibilidade de acessar incluir produtos sem estar logado.

Porém, quando tento usar a sessão para informar o sucesso de remoção de um produto, não tenho qualquer mensagem.

Vou deixar aqui o conteúdo de alguns arquivos:

produto-lista.php:

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


mostraAlerta("success");
?>


<table class="table table-striped table-bordered table-condensed">
    <?php
    $produtos = listaProdutos($conexao);
    foreach($produtos as $produto){
        ?>
        <tr>
            <td><?=$produto['nome']?></td>
            <td><?=$produto['preco']?></td>
            <td><?=substr($produto['descricao'],0,40) ?></td>
            <td><?=$produto['nome_categoria']?></td>
            <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto['id']?>" >Alterar</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
    }
    ?>
</table>
<?php include("footer.php")?>

remove-produto.php:

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

$id = $_POST["id"];
removeProduto($id,$conexao);

$_SESSION["success"]="Produto removido com sucesso!";

header("location: produto-lista.php");
die();

mostra-alerta.php:

<?php
function mostraAlerta($tipo){
    //session_start();
    if(isset($_SESSION[$tipo])){?>
        <p class="alert-<?=$tipo?> text-center"><?=$_SESSION[$tipo]?></p>  
    <?php
    unset($_SESSION[$tipo]);
    }
}

O que eu acho estranho é que quando dou um var_dump($_SESSION) no arquivo remove-produto.php tenho o seguinte:

NULL

e quando dou um var_dump($_SESSION) no arquivo produto-lista.php tenho o seguinte:

array(1) { ["usuario_logado"]=> string(17) "meu email" }

Eu não deveria ter o $_SESSION["usuario_logado"] também no remove-produto.php?

Obrigado pela ajuda!

3 respostas
solução!

Olá BRJ

Você precisa iniciar a sessão também no remove-produto.php para poder usá-la. Fazemos com session_start();.

Você deve ter colocado o session_start(); em algum lugar dentro da lógica de usuário ou algo assim.

Veja se isso lhe ajuda a resolver o problema.

Abraço

Perfeito, era isso mesmo... Não tinha entendido que a sesão precisaria ser iniciada novamente, pois, ao fazer logon, o usuário já iniciava a sessão.

Obrigado Paulo!

Que bom que deu certo brj.

O que acontece é que você precisa dizer para o PHP que você deseja acessar a sessão do servidor. Não simplesmente quando registra o usuário, pois quem precisa do session_start() é o PHP.

Por isso, sempre que for precisar usar sessão, aquela página precisa dizer ao php que você usará a sessão ali.

Bons estudos e abraço

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