Pergunta

Eu tenho um site criado em PHP, onde toda vez que um usuário recebe um erro I vai redirecioná-los para uma outra página (usando header(Location:...)) e colocar a ID de erro na URL para que eu sei que o erro para mostrar.

por exemplo. Se o usuário tenta acessar uma página de produto, mas esse item não está mais disponível vou redirecionar de volta para a categoria de itens que foram previamente olhando e exibir um erro com base na identificação de erro que eu tenha especificado na URL.

www.example.com/view_category.php?product_category_id=4&error_id=5

Há duas coisas que eu não gosto sobre essa abordagem:

  1. Ele exibe o error_id na URL.
  2. Se a página é atualizada, o erro ainda será exibida.

Existe uma maneira de limpa remover uma variável específica $ _GET a partir de uma URL, deixando o resto das variáveis ??intacta após a página é carregada?

Estou pensando que talvez ele está usando modRewrite ou uma volta redirecionamento para a própria página, mas a remoção do error_id do URL ou usando uma variável $ _SESSION e evitando colocar a error_id na URL. Seus pensamentos?

Eu realmente estou aprendendo muito com esta comunidade e pensei que se eu levantei a pergunta que eu poderia ser capaz de aprender algo novo ou para obter algumas idéias variadas como eu sou bastante novo para scripting.

Foi útil?

Solução

Não, não há nenhuma maneira de fazer isso explicitamente -. Pelo menos não sem uma atualização de página mas depois que você perder os dados de qualquer maneira

Você é melhor fora de usar uma variável de sessão temporária.

if ( /* error condition */ )
{
  $_SESSION['last_error_id'] = 5;
  header( 'Location: http://www.example.com/view_category.php?product_category_id=4' );
}

Então, em view_category.php

if ( isset( $_SESSION['last_error_id'] ) )
{
  $errorId = $_SESSION['last_error_id'];
  unset( $_SESSION['last_error_id'] );

  // show error #5
}

Outras dicas

Sim, há uma maneira de remover $_GET especifico de PHP ...

      varToRemove = "anyVariable";

      foreach($_GET as $variable => $value){
        if($variable != varToRemove){
           $newurl .= $variable.'='.$value.'&';
        }
      }

      $newurl = rtrim($newurl,'&');

Em seguida, coloque o $ NEWURL na ligação .. assim:

pageurl?something=something&<? echo $newurl; ?>

Eu sei que é um post antigo, mas, outros programadores podem ser pesquisa para ele!

Em primeiro lugar, registrar o erro em seu banco de dados:)

Depois disso, definir uma variável de cookie ou sessão e, em seguida, redirecionar o usuário para a página segura. Quando essa página é carregada, tê-lo verificar para a variável, exibir o erro, e variável, em seguida, apagar a partir da matriz de cookie ou sessão.

Uma maneira é comparar o HTTP_REFERER com o SCRIPT_NAME. Eles vão ser o mesmo se o usuário atingiu Atualizar.

Quick Hack:. Você poderia ter também imploded()'d em "&" na variável do $_SERVER['QUERY_STRING'] para manipular essa seqüência e, em seguida, explode()'d-lo de volta

Não seria esta abordagem trabalho?

<?php
    $params = array_diff($_GET, array("variable_name" => $value));
    $new_query_string = http_build_query($params);
?>
    <script>window.history.pushState('verify_email', 'Verify Email', '?<?php echo $new_query_string; ?>');</script>

i teve mesmo problema
tente: http://www.azazia.com/kb/entry/26/

if (!empty($_GET['passvar'])) {
    unset($_GET['passvar']);
    echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=".$_SERVER['PHP_SELF']."\" >";

}

trabalho perfeitamente para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top