Pregunta

Tengo un sitio web creado en PHP donde cada vez que un usuario recibe un error, los redirigiré a otra página (usando header(Location:...)) y pondré el ID de error en la URL para que sepa qué error mostrar.

Por ejemplo. Si el usuario intenta acceder a la página de un producto pero ese elemento ya no está disponible, redirigiré nuevamente a la categoría de elementos que estaban viendo anteriormente y mostraré un error basado en la ID de error que he especificado en la URL.

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

Hay dos cosas que no me gustan de este enfoque:

  1. Muestra el error_id en la URL.
  2. si la página se actualiza, el error seguirá apareciendo.

¿Hay alguna forma de eliminar limpiamente una variable $ _GET específica de una URL mientras se deja el resto de las variables intactas DESPUÉS de cargar la página?

Estoy pensando que tal vez esté usando modRewrite o una redirección a la página en sí, pero eliminando el error_id de la URL o usando una variable $ _SESSION y evitando poner el error_id en la URL. ¿Tus pensamientos?

Realmente estoy aprendiendo mucho de esta comunidad y pensé que si formulaba la pregunta podría ser capaz de aprender algo nuevo o de obtener algunas ideas variadas, ya que soy bastante nuevo en las secuencias de comandos.

¿Fue útil?

Solución

No, no hay forma de hacerlo explícitamente, al menos no sin una actualización de la página, pero de todos modos perderías los datos.

Es mejor usar una variable de sesión temporal.

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

Luego, en view_category.php

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

  // show error #5
}

Otros consejos

Sí, hay una manera de eliminar $_GET específicos de PHP ...

      varToRemove = "anyVariable";

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

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

Luego, coloque el $ newurl en el enlace ... así:

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

¡Sé que & # 180; es una publicación antigua, pero, ¡otros programadores pueden estar buscando!

Primero, registre el error en su base de datos :)

Después de eso, configure una cookie o una variable de sesión y luego redirija al usuario a una página segura. Cuando se carga esa página, haga que verifique la variable, muestre el error y luego elimine la variable de la cookie o la matriz de sesión.

Una forma es comparar el HTTP_REFERER con el SCRIPT_NAME. Serán lo mismo si el usuario ha pulsado Actualizar.

Hack rápido: También podrías tener imploded() 'd en " & amp; " en la variable $_SERVER['QUERY_STRING'] para manipular esa cadena y luego explode() 'lo devolvió.

¿No funcionaría este enfoque?

<?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>

tuve el mismo problema
intente: 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']."\" >";

}

funciona perfectamente para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top