• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gonçalo_ssb

Morte das variaveis $_POST

12 mensagens neste tópico

Bom dia a todos,

Há já a algum tempo, tenho andado com esta dúvida e do que tenho lido, não tem sido muito esclarecedor.

Eu possuo um form simples com alguns campos de entrada e um botão de submit que tem como acção a própria página. O que acontece quando por exemplo insiro um novo registo na base de dados é que sempre que faço refresh (F5) na página ele volta a inserir de novo.

Eu presumo que ao ter o $_POST activo para o botão, assim como para os campos aos quais ele vai buscar os valores, este irá estar sempre a inserir.

Eu já tentei utilizar a função unset, mas não tive sucesso.

Aqui vai um pequeno exemplo (pode não funcionar). Neste exemplo, sempre que submeto o botão de adicionar ele mostra a mensagem "teste", o mesmo acontece quando faço F5.

<? 
if(isset($_POST['btn_adicionar']))
{
    echo "teste";

}

?>

<form name="form_teste" action="" method="POST">
<input type="text" name="nome">
<input name='btn_adicionar' type='submit' title='Adicionar' value='Adicionar' >    
</form>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois eu já tinha pensado nisso mas para o efeito não me dava muito geito...

Aceito mais sugestões.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nota: A permanência das variáveis de "post" são causadas pelo browser, não pelo server.

E penso que a melhor forma é mesmo o redirect para outra pagina

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que obténs o mesmo efeito se redireccionares para a mesma página, com uma parâmetro get qualquer, do género "mesmaPagina.php?done".

Atenção que o redireccionamento é no fim, ou seja, tratar na mesma página e depois redireccionar para outra.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tb podes guardar no $_SESSION uma flag que indique que esses valores já foram processados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu possuo um form simples com alguns campos de entrada e um botão de submit que tem como acção a própria página. O que acontece quando por exemplo insiro um novo registo na base de dados é que sempre que faço refresh (F5) na página ele volta a inserir de novo.

Na script, onde pões o código de inserção de dados na base de dados?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A inserção está a ser feita na parte onde estou a mostrar o texto.

Contudo a sugestão do edsousa parece-me pretinente e vou experimentar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é errado usares a sessão para saberes se foi processado...

EU ACHO que deverias de seguir o exemplo do softclean

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens varias soluçoes, uma delas é se so aceitares algum campo unique na tabela e definir como unico e na segunda inserçao com os mesmos dados da erro.

outra delas é por exemplo usar a instruçao uniqid(microtime(true)); do php que te cria um numero aleatorio conforme a data e a hora do teu pc, e depois é verificar se esse numero ta definido ou nao

outra soluçao é usares uma imagem pra verificaçao do envio dos dados do campo, atençao a imagem tem que ser aleatoria do tipo round();

tens outras soluçoes usar cookies, sessoes, ficheiros mas isso nao e de uso correcto para o que desejas fazer

nota: a outra maneira de criar um numero unico sem ser pelo o uniqid se desejares descobrir procura por guid se nao tou em erro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A solução mais facil é processares a informação num ficheiro a parte e depois redirecionares para a página do formulário.

algo do tipo

ficheiro form.html

<html>
<head>
</head>
<body>
<form method="post" action="insert.php">
       <input type="text" name="campo" value="" />
       <input type="submit" value="insere" />
</form>
</body>
</html>

ficheiro insert.php

<?php
/*processamento da informação proveniente do formulário*/
header("location:form.html");
?>

espero que ajude

fica bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora