PDA

View Full Version : PHP Referrer & Display Help


A.J. Angel
2012-02-29, 04:14 AM
Hello,

I am currently using the following code below to display two different codes depending on referrers. It came to my attention that if the page is visited from a direct url or a bookmark for example, the include is not working. It only works if the page is visited from "somewhere".

As such, I wish to ask if someone may be able to "fix" the code. Basically, I wish to display the first code if the visitor comes from domain.com otherwise, the include is displayed no matter where else they come from. Thank you in advance.


if(isset($_SERVER['HTTP_REFERER'])) {
$referrer = $_SERVER['HTTP_REFERER'];
if(stristr($referrer, 'domain.com')) {
echo '<INSERT CODE>';
} else {
include $_SERVER['DOCUMENT_ROOT'].("/path/to/file.html");
}
}

cd34
2012-02-29, 12:25 PM
On a bookmark or typein, HTTP_REFERER won't be set - and your condition skips your includes in that case.


$referrer = $_SERVER['HTTP_REFERER'];
if( (stristr($referrer, 'domain.com')) || ($referrer=="") ) {
echo '<INSERT CODE>';
} else {
include $_SERVER['DOCUMENT_ROOT'].("/path/to/file.html");
}


Disclaimer: yes, there are better ways to write that at the expense of the code being less easily modified.

A.J. Angel
2012-02-29, 07:22 PM
On a bookmark or typein, HTTP_REFERER won't be set - and your condition skips your includes in that case.


$referrer = $_SERVER['HTTP_REFERER'];
if( (stristr($referrer, 'domain.com')) || ($referrer=="") ) {
echo '<INSERT CODE>';
} else {
include $_SERVER['DOCUMENT_ROOT'].("/path/to/file.html");
}


Disclaimer: yes, there are better ways to write that at the expense of the code being less easily modified.

Good observation. What does the code below mean?

|| ($referrer=="") )

Another helper directed me to simply delete the first condition without adding anything. I would appreciate any indications in order to understand things better. Thank you.

cd34
2012-02-29, 11:29 PM
if you just delete the first condition, if the referrer is empty, it would do your include. My guess at your intention was to include the local code if it was a typein/bookmark or local site referrer, and include the /path/to/file.html if it was a remote referrer.

|| ($referrer=="") )

says: or, the referrer is empty

if you want to include the INSERT CODE for local hits + bookmarks/typeins, you want to use the || ($referrer=="") ) version. If you want only want to display INSERT CODE for local hits, and bookmarks/typeins/remote referrers get the /path/to/file.html, then just removing the isset() condition would do that.

A.J. Angel
2012-02-29, 11:39 PM
Actually, my intention is the contrary, intending to display the <INSERT CODE> if the visitor comes from a particular domains but in case the visitor does not come from that domain, they would be instead be displayed the include to /path/to/file.html.