Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

F_Jr

Impedir o reenvio de informação após ter dado um submit no formulário

Recommended Posts

Bom galera, a minha dúvida é o seguinte:

 

Tenho um formulário de cadastro de bairros e neste formulário digito o nome do bairro e salvo ele. Após ter salvado ele rediresiona para a listagem de bairros. Assim quero saber uma forma de como impedir que o usuário volte a página anterior, ou seja, o formulário de cadastro de bairro através dos botões de navegação do browser. Consegui resolver o problema do F5 que é o reenvio de informação. Em baixo tenho três exemplos de como impedir o reenvio de informação.

 

 header("Location:index.php?result=bairro&acao=listarbai");
 header("refresh:0; index.php?result=bairro&acao=listarbai");
 print "<script>window.location.href='index.php?result=bairro&acao=listarbai'</script>";

 

Se alguém puder sugerir de como fazer isto ou algum material falando a respeito disto ficarei grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou submetendo em um documento php separado.

 

 

Cara, os formulários que faço tbm são submetidos em um documento php separado.

 

Ai eu uso o if, se todas as informações foram adicionadas com sucesso eu redireciono com um header ('Location: pagina.php?id=xxx'), quando você tenta voltar com a navegação do browser, voltar para a página do formulário, e a unica maneira de mandar os dados de novo é so se a pessoa preencher o formulário todo outra vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em Dian Carlos, assim eu fiz deste jeito que você falou. Mas o que eu quero realmente é que após inserir ou atualizar um registro, ele não volte para a página anterior, ou seja, o formulário de cadastro de bairro. Se ele quiser inserir ou alterar o registro ele tem que estar na listagem de bairros, e partir daí ele pode fazer a inserção ou alteração de um registro. Estava pesquisando sobre isso, eu encontrei aqui no fórum do imasters um exemplo do colega Tonga, só que a minha dúvida é como implementar este código na minha aplicação, para que quando o usuário inserir um novo bairro e cadastrá-lo e ele tentar voltar a página anterior que dê um erro. Dá uma olhada neste link do colega Tonga no final da página.

http://forum.imasters.com.br/topic/436039-refresh/

E faça o teste com o código que ele postou é isto que eu estou querendo. Quero saber como implementá-lo dentro da minha aplicação.

 

Bom pessoal, tinha falado no meu post de como impedir que o usuário volte a página anterior, na verdade não é isto o que eu quero. O que eu estou querendo é que se o usuário inseriu ou alterou dados no formulário e apertou o botão de cadastrar ou atualizar, ele irá para uma página de listagem por exemplo de bairros, mas se o usuário aperta o botão do teclado o backspace ou voltar nos botões de navegação do browser apareça uma mensagem de erro padrão. Eu quero que este erro seja mostrado após ter dado um submit no formulário e se o usuário tentou voltar para a página anterior. Pesquisei sobre isto e até agora não encontrei nada.

Assim já entrei em alguns sites em php onde se cadastra o usuário através de formulário e após preencher todos os dados e clicar no botão cadastrar, o usuário era direcionado para outra página. Mas se ele tentasse voltar a página anterior após ter dado um submit nesse formulário aperecia uma mensagem de erro padrão para este usuário, é como se não existisse o formulário de cadastro e esta linha de racícionio que estou querendo. Se alguém souber como fazer isto ficarei grato, porque até agora não encontrei nada em relação a isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, tinha falado no meu post de como impedir que o usuário volte a página anterior, na verdade não é isto o que eu quero. O que eu estou querendo é que se o usuário inseriu ou alterou dados no formulário e apertou o botão de cadastrar ou atualizar, ele irá para uma página de listagem por exemplo de bairros, mas se o usuário aperta o botão do teclado o backspace ou voltar nos botões de navegação do browser apareça uma mensagem de erro padrão. Eu quero que este erro seja mostrado após ter dado um submit no formulário e se o usuário tentou voltar para a página anterior. Pesquisei sobre isto e até agora não encontrei nada.

Assim já entrei em alguns sites em php onde se cadastra o usuário através de formulário e após preencher todos os dados e clicar no botão cadastrar, o usuário era direcionado para outra página. Mas se ele tentasse voltar a página anterior após ter dado um submit nesse formulário aperecia uma mensagem de erro padrão para este usuário, é como se não existisse o formulário de cadastro e esta linha de racícionio que estou querendo. Se alguém souber como fazer isto ficarei grato, porque até agora não encontrei nada em relação a isto.

 

F_Jr, achei uma solução simples que não é dificil.

 

Quando o usuário apertar 'cadastrar' ou 'atualizar' o formulário é submetido para a página que vai fazer o tratamento dos dados. Nessa página você cria uma sessão (POR EXEMPLO: $_SESSION['formulario'] = 'cadastrar';. Pode ser dos 2 tipos, uma sessão se o cara cadastrou ou se atualizou) ai na página do formulário você poe o seguinte código php no começo do documento:

 

session_start(); // Inicia a session

if ($_SESSION['teste'] == 'cadastrar'){
       header ("Location: paginadeerro.php");  
       exit();   
   }
?>

 

isso é simples, mas tipo.. assim o cara vai poder cadastrar o bairro somente 1 vez, se ele quizer cadastrar um novo você tem criar uma página para destruir a sessão ou ele tem que fechar o navegador.. testa ai e ve se atende a sua necessidade..

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí Dian Carlos beleza?

 

Em cara a minha dificuldade é o seguinte é onde posicionar o código, eu achei o teu exemplo muito bom, mas o código que eu estava tentando implementar num projeto é este aqui:

 

<?php  
 session_start();
 if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $request = md5(implode($_POST));
    if(isset($_SESSION['last_request'])) {
       print 'refresh<br />';
    }
    else {
       $_SESSION['last_request'] = $request;
       print 'post<br />';
    }
 }
?>  

<form action="teste.php" method="post">  
 <input type="text" name="teste" value="teste" />  
 <input type="submit" name="enviar" value="enviar" />  
</form>

 

Quando você rodar este código acima digitar um nome no campo texto ou deixando o nome 'teste' e clicar no botão enviar e voltando para a página anterior com backspace ou os botões de navegação do browser, irá dar um erro na página 'Documento fora de validade', é mais ou menos isso que eu quero após ter cadastrado ou atualizado um registro no meu formulário e se o usuário tentar voltar irá dar o erro. Só que não estou conseguindo implementar, eu vi este exemplo com o Willian Bruno explicando para o Tonga como fazer, eu particularmente não consegui implementar isto aqui já mexi várias vezes no meu código aqui mais sem sucesso. O Código abaixo é o meu formulário de bairro, form_bairro.php.

 

<!--CONTEÚDOS-->
<?php
 session_start();
 if($_SERVER['REQUEST_METHOD'] == 'post') {
    $request = md5(implode($_POST));
    if(isset($_SESSION['last_request']) && ($_SESSION['last_request'] == $request)) {
       print 'refresh';
    }
    else {
       $_SESSION['last_request'] = $request;
       print 'post';
    }
 }
?>
<div id="form">
 <fieldset>
   <form action="index.php" name="form_bairro" method="post" onsubmit="return validarBanco();">
     <input type="hidden" name="result" value="bairro" />

     <?php
       if($acao == 'inserirbai'){
          $texto = "";
          ?>
            <input type="hidden" name="acao" value="salvarbai" />
          <?php
       }
       elseif($acao == 'alterarbai') {
          $texto = $manutencao->_reg->bai_nome;
          ?>
            <input type="hidden" name="acao" value="atualizarbai" />
            <input type="hidden" name="codigo" value="<?php print $manutencao->_reg->bai_codigo; ?>" />
          <?php
       }
     ?>

     <!--*************************************************************************************-->
     <div id="a1">
       <label for="bairro">Bairro.:</label>
       <div class="div_texbox">
         <input type="text" id="bairro" name="bairro" placeholder="Digite o nome do bairro!" title="Digite o nome do bairro!" size="42" value="<?php print $texto; ?>" />
       </div>
     </div>

     <!--*************************************************************************************-->
     <div class="button_div">  
       <?php
         if($acao == 'inserirbai'){
            ?>
              <input type="submit" id="cadastrar" name="cadastrar" value="cadastrar" class="buttons" />
            <?php
         }
         elseif($acao == 'alterarbai') {
         ?>
              <input type="submit" id="atualizar" name="atualizar" value="atualizar" class="buttons" />
            <?php
         }
       ?>
       <input type="reset"  id="limpar" name="limpar" value="limpar"  class="buttons" />
       <input type="button" id="voltar" name="Voltar" value="voltar!" class="buttons" onclick="javascript:history.back()" />
     </div>
   </form>
 </fieldset>
</div>

 

E o código abaixo é do meu arquivo acao_bairro.php.

 

<?php
 require('manutencao/ManutencaoBairro.class.php');

 $manutencao = new ManutencaoBairro();  

 $acao = isset($_REQUEST['acao']) ? $_REQUEST['acao'] : "";

 if($acao == 'listarbai') {
    $filtro = isset($_REQUEST['filtro']) ? $_REQUEST['filtro'] : "";
    print "A Pesquisa é.: ".$filtro;
    $manutencao->listarBairro();
    require('lista/lista_bairro.php');
 }

 if($acao == 'inserirbai') {
    require('form/form_bairro.php');
 }

 if($acao == 'salvarbai') {
    if(empty($_POST['bairro'])) {
       alerta("Favor preencha o campo bairro ou clique no botão voltar!");
       header("Location:index.php?result=bairro&acao=inserirbai");
    }
    else {
       $manutencao->inserirBairro();
       $manutencao->listarBairro();
       require('lista/lista_bairro.php');
       header("refresh:0; index.php?result=bairro&acao=listarbai");
       exit(0);
    }
 }
?>

 

Em Dian Carlos como eu faria para estar implementando a primeira parte do código acima na minha aplicação. Este é um problema que estou lutando para solucionar e não estou conseguindo, me desculpe por qualquer incômodo porque não conseguindo solucionar este problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.