Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove a specific $_GET variable from a URL

I have a website authored in PHP where any time a user receives an error I will redirect them to a another page (using header(Location:...)) and put the error ID in the URL so that I know which error to display.

E.g. If the user tries to access a product page but that item is no longer available I will redirect back to the category of items they were previously looking at and display an error based on the error ID I have specified in the URL.

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

There are two things I don't like about this approach:

  1. It displays the error_id in the URL.
  2. if the page is refreshed, the error will still display.

Is there a way to cleanly remove a specific $_GET variable from a URL while leaving the rest of the variables intact AFTER the page is loaded?

I'm thinking maybe it's using modRewrite or a redirect back to the page itself but removing the error_id from the URL or using a $_SESSION variable and avoiding putting the error_id in the URL. Your thoughts?

I really am learning a lot from this community and thought if I posed the question I might be able to learn something new or to get some varied ideas as I'm fairly new to scripting.

like image 604
justinl Avatar asked Dec 13 '22 03:12

justinl


1 Answers

No, there's no way to do that explicitly - at least not without a page refresh but then you'd lose the data anyway.

You're better off using a temporary session variable.

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

Then, in view_category.php

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

  // show error #5
}
like image 156
Peter Bailey Avatar answered Dec 29 '22 01:12

Peter Bailey