peace_love
peace_love

Reputation: 6471

How can I detect the last visited page with php?

I am on my page index.php. From here I go with a link to myform.php.

myform.php:

 <?php 
       echo "My last visited page is:".$_SERVER['HTTP_REFERER'];
   ?>

<form action="success.php" method="post">
 <p>Your name: <input type="text" name="name" /></p>
<p><input type="submit" /></p>
</form>

The result I see on my page is:

My last visited page is http://www.mypage.com/index.php

Now I submit my form and come to success.php. Here I click my "back" button and come again to myform.php. The result I see is now:

  My last visited page is http://www.mypage.com/index.php

But what I expect here is:

My last visited page is http://www.mypage.com/success.php

Upvotes: 3

Views: 8893

Answers (4)

viral
viral

Reputation: 3743

One way is, you can handle this by using PHP's _SERVER global, If the user first time visits your site, there will be no previous page, except that, the previous page will be last visited page identified by _SERVER, check out this script,

isset($_SESSION['current']) || $_SESSION['current'] = '';
// check for first visit to any page, initialize

if($_SERVER['SCRIPT_NAME'] != $_SESSION['current']){
// check if current page != previously recorded page    

    // order is important here in two lines, check it yourself
    $_SESSION['previous'] = isset($_SESSION['current']) ? $_SESSION['current'] : '';
    $_SESSION['current'] = $_SERVER['SCRIPT_NAME'];

}

You can make something like this, which ignores same page if user refreshes the page, disregarding the method being GET or POST.

You can include this script in common file to record the activity.

Array
(
    [current] => /session/index.php
    [previous] => /session/submit.php
)

Upvotes: 1

MD Ruhul Amin
MD Ruhul Amin

Reputation: 4502

As you need to carry the previous info to forwarded page. Then it will be better if you use session. When you are visiting a page, store this current page in a session variable. Add this line at bottom on each page.

$_SESSION['page'] = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

And to echo

<?php 
   echo "My last visited page is:".$_SESSION['page'];
?>

So whole text will look like:

<?php 
       echo "My last visited page is:".$_SESSION['page'];
?>

<form action="success.php" method="post">
 <p>Your name: <input type="text" name="name" /></p>
<p><input type="submit" /></p>
</form>
<?php
     $_SESSION['page'] ="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
?>

edit: Be careful when you are using multiple tab. Only latest info will be stored.

Upvotes: 1

Gayan
Gayan

Reputation: 2935

You can use sessions..

Bottom of the success.php you can assign page name to sessions

$_SESSION['page'] = $_SERVER['HTTP_REFERER'];

When click on back button you can get that value using sessions(index.php),

echo $_SESSION['page'];

On that page at the bottom, you can assign current page name to session, then it can track on next page

Upvotes: 4

Elenchus
Elenchus

Reputation: 195

The back button does strange things with variables and page refreshing. Try typing the http://www.mypage.com/myform.php address into the browser and seeing what happens.

N.B. I know this only deserves to be a comment, but reputation is a pain.

Upvotes: 1

Related Questions