Subimal Sinha
Subimal Sinha

Reputation: 129

Remove querystring value on page refresh

I am redirecting to a different page with Querystring, say

header('location:abc.php?var=1');

I am able to display a message on the redirected page with the help of querystring value by using the following code, say

if (isset ($_GET['var']))
{

    if ($_GET['var']==1) 
    {
        echo 'Done';
    }
}

But my problem is that the message keeps on displaying even on refreshing the page. Thus I want that the message should get removed on page refresh i.e. the value or the querystring should not exist in the url on refresh.

Thanks in advance.

Upvotes: 5

Views: 11484

Answers (6)

ale
ale

Reputation: 16

Think the question mean something like this?

 $uri_req = trim($_SERVER['REQUEST_URI']);
    if(!empty($_SERVER['REQUEST_URI'])){
      $new_uri_req = str_replace('?avar=1', '?', $uri_req);
      $new_uri_req = str_replace('&avar=1', '', $new_uri_req);
      $pos = strpos($new_uri_req, '?&');
      if ($pos !== false) {
       $new_uri_req = str_replace('?&', '?', $new_uri_req);
      } 
     }

if( strrchr($new_uri_req, "?") == '?' ){
 $new_uri_req = substr($new_uri_req, 0, -1);
}

 
     echo $new_uri_req; exit;

You can use then the url to redirect without vars. You can also do the same in js.

str_replace() can pass array of values to be replaced. First two calls to str_replace() can be unified, and filled with as many vars you like that needs to be removed. Also note that with preg_replace() you can use regexp that can so manage any passed var which value may change. Cheers!

Upvotes: 0

Christopher Martin
Christopher Martin

Reputation: 197

There's an elegant JavaScript solution. If the browser supports history.replaceState (http://caniuse.com/#feat=history) you can simply call window.history.replaceState(Object, Title, URL) and replace the current entry in the browser history with a clean URL. The querystring will no longer be used on either refresh or back/previous buttons.

Upvotes: 2

Marc R.
Marc R.

Reputation: 58

When the message prompt ask for a non exsisting session. If false, show the message, if true, do nothing. session_start(); is only needed, if there is no one startet before.

session_start();
if ($_GET['var']==1 && !isset($_SESSION['message_shown'])) 
{
    $_SESSION['message_shown'] = 1;
    echo 'Done';
}

Upvotes: 1

deceze
deceze

Reputation: 522005

You cannot "remove a query parameter on refresh". "Refresh" means the browser requests the same URL again, there's no specific event that is triggered on a refresh that would let you distinguish it from a regular page request.

Therefore, the only option to get rid of the query parameter is to redirect to a different URL after the message has been displayed. Say, using Javascript you redirect to a different page after 10 seconds or so. This significantly changes the user experience though and doesn't really solve the problem.

Option two is to save the message in a server-side session and display it once. E.g., something like:

if (isset($_SESSION['message'])) {
    echo $_SESSION['message'];
    unset($_SESSION['message']);
}

This can cause confusion with parallel requests though, but is mostly negligible.

Option three would be a combination of both: you save the message in the session with some unique token, then pass that token in the URL, then display the message once. E.g.:

if (isset($_GET['message'], $_SESSION['messages'][$_GET['message']])) {
    echo $_SESSION['messages'][$_GET['message']];
    unset($_SESSION['messages'][$_GET['message']]);
}

Upvotes: 8

Try this way [Using Sessions]

<?php
//abc.php
session_start();
if (isset ($_GET['var']))
{
if ($_GET['var']==1) 
{
if(isset($_SESSION['views']))
{
//$_SESSION['views']=1;
}
else
{
    echo 'Done';
   $_SESSION['views']=1;
}
}

}
?>

Upvotes: 0

Mr. Alien
Mr. Alien

Reputation: 157294

Better use a session instead

Assign the value to a session var

$_SESSION['whatever'] = 1;

On the next page, use it and later unset it

if(isset($_SESSION['whatever']) && $_SESSION['whatever'] == 1) {
  //Do whatever you want to do here

  unset($_SESSION['whatever']); //And at the end you can unset the var
}

This will be a safer alternative as it will save you from sanitizing the get value and also the value will be hidden from the users

Upvotes: 4

Related Questions