Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Uso do $_SERVER['REQUEST_METHOD"]

Olá!

Não ficou muito claro pra mim a respeito do uso do $_SERVER['REQUESTMETHOD']. Entendi que é usado pois por padrão a página utiliza o GET e se não especificar que é POST através do $_SERVER['REQUESTMETHOD'], ao ser atualizada a página, seriam realizadas novas modificações, sejam alterações, exclusões, conforme o conteúdo da página. É isso?

1 resposta
solução!

Olá, tudo bem?

Na aula Adicionando um artigo, a gente se depara com um problema de reenvio de informações de formulário, que ocorre quando enviamos os dados de uma página para outra ou para ela mesma através do método POST.

E na tentativa de atualizarmos a página, pode ocorrer que o POST original seja reenviado, causando danos, que nessa aplicação é a duplicação de artigos.

O navegador até nos informa um alerta: "Tem certeza que deseja reenviar as informações para o servidor?".

Para solucionar este problema é utilizado o padrão de projeto Post Redirect Get. Que sempre que fizer um POST para uma página, você redireciona usando GET.

E como a gente consegue saber se foi feito um POST para uma página?

Através da variável super global $_SERVER.

$_SERVER é um array que contém informações sobre servidor e ambiente de execução. Para o exemplo mostrado na aula, desejamos saber qual método de requisição (POST ou GET) foi utilizado para acessar a página adicionar-artigo.php, e essa informação encontramos através de $_SERVER['REQUEST_METHOD'].

Implementamos essa funcionalidade assim:

if($_SERVER['REQUEST_METHOD'] === 'POST'){

    $artigo = new Artigo($mysql);
    $artigo->adicionar($_POST['titulo'], $_POST['conteudo']);

    //redirecionar
    header("Location: adicionar-artigo.php");
    die();
}

Veja que utilizamos a função header() para fazer o redirecionamento, e por padrão o redirecionamento é feito através do método GET.

Usamos a função die() para garantir que nada abaixo dele seja carregado.

Espero ter ajudado =)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓