26

Notice: Undefined index: HTTP_REFERER

$http_referer = $_SERVER['HTTP_REFERER']

i used this from tutorial.and it looks okay

also code is calling it from including file

what should i change?

i added print_r($_SERVER); and now page gives me this

 Array ([UNIQUE_ID] => UoSxWa56310AAAwUckIAAAAA
        [HTTP_HOST] => movafaghha.com
        [HTTP_COOKIE] => __utma=210711305.58608218.1372977010.1372977010.1372977010.1; __utmz=210711305.1372977010.1.1.utmcsr=who.is|utmccn=(referral)|utmcmd=referral|utmcct=/whois/movafaghha.com; PHPSESSID=83eb0e2ae7ebe4b6c2eeb071d9f5de71
        [HTTP_X_REAL_IP] => 109.109.41.81
        [HTTP_X_FORWARDED_HOST] => movafaghha.com
        [HTTP_X_FORWARDED_SERVER] => movafaghha.com
        [HTTP_X_FORWARDED_FOR] => 109.109.41.81
        [HTTP_CONNECTION] => close 
        [HTTP_CACHE_CONTROL] => max-age=0 
        [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
        [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36 
        [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8,fa;q=0.6 
        [PATH] => /sbin:/usr/sbin:/bin:/usr/bin
        [SERVER_SIGNATURE] =>
        [SERVER_SOFTWARE] => Apache 
        [SERVER_NAME] => movafaghha.com 
        [SERVER_ADDR] => 174.122.223.93 
        [SERVER_PORT] => 80 
        [REMOTE_ADDR] => 109.109.41.81 
        [DOCUMENT_ROOT] => /home/memarest/public_html/movafaghha.com 
        [SERVER_ADMIN] => webmaster@movafaghha.memarestan.com 
        [SCRIPT_FILENAME] => /home/memarest/public_html/movafaghha.com/tutorials/login200/register.php 
        [REMOTE_PORT] => 49737 
        [GATEWAY_INTERFACE] => CGI/1.1 
        [SERVER_PROTOCOL] => HTTP/1.0 
        [REQUEST_METHOD] => GET 
        [QUERY_STRING] => 
        [REQUEST_URI] => /tutorials/login200/register.php 
        [SCRIPT_NAME] => /tutorials/login200/register.php 
        [PHP_SELF] => /tutorials/login200/register.php 
        [REQUEST_TIME_FLOAT] => 1384427865.54 
        [REQUEST_TIME] => 1384427865 
        [argv] => Array ( ) 
        [argc] => 0 
    ) 

edited the code but still unable to echo all fiedds are required

<?php

ini_set("display_errors", true);
error_reporting(E_ALL);

require 'core.inc.php';






if(!loggedIn()) {

//check mikunim ke tamame field ha dar form vojod darand va set shudan

if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['password_again'])&&isset($_POST['firstname'])&&isset($_POST['surename'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $password_again = $_POST['password_again'];
    $firtsname = $_POST['firstname'];
    $surename = $_POST['surename'];



    //HALA CHECK MIKUNIM KHALI HASTAND YA NA

    if(!empty($username)&&!empty($password)&&!empty($password_again)&&!empty($firstname)&&!empty($surename)){
        echo 'ok' ;

    } else {

        echo ' All fields are required';

    }

}




?>

<form action="register.php" method="POST">
Username:<br> <input type="text" name="username"><br> <br>
Password:<br> <input type="password" name="password"><br><br>
Password again:<br> <input type="password" name="password_again"><br><br>
Firstname:<br> <input type="text" name="firstname"><br><br>
Surname:<br> <input type="text" name="surename"><br><br>
<input type="submit" value="register">



</form>

<?php

} elseif (loggedIn()) {

    echo 'you \'re already logged in';
    }

?>

now after adding

"e"

page says "all fields are required"

but even when fill all fields message do not change

Andrius
  • 947
  • 15
  • 22
Mojtaba
  • 733
  • 4
  • 12
  • 26
  • you should test for this variable existence. If you're not coming from another page but typed the link to the page directly in address bar, there won't be any referer... – Laurent S. Nov 14 '13 at 11:15

4 Answers4

74

HTTP_REFERER is not guaranteed to be sent by the client:

The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

In your case it's clearly not being sent, so really all you can do is

if(isset($_SERVER['HTTP_REFERER'])) {
  //do what you need to do here if it's set    
   }
else
{
   //it was not sent, perform your default actions here
}
Stephen Byrne
  • 7,400
  • 1
  • 31
  • 51
  • Hi, I think original question might have asked to block some spam website (at least in my case). In the above solution, action will be performed in all the cases. Here is what I did: if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == 'www.spamwebsite.com') {//action}. – coder Dec 20 '14 at 13:31
4
if (isset($_SERVER['HTTP_REFERER'])) {$THE_REFER=$_SERVER['HTTP_REFERER']}
Mahdi Jazini
  • 791
  • 9
  • 16
  • 1
    The `isset` method returns a boolean. Your `$THE_REFER` variable will be `"true"` or `"false"`, not the actual value of the referer header. – Jeff Kilbride Jan 04 '17 at 09:42
  • @JeffKilbride Thank you for your comment. This post is for 2 years ago... i don't know why i have sent this illogical post! i have shocked! I have edited it. thank you again – Mahdi Jazini Jan 04 '17 at 11:29
0

Undefined index means the array key is not set, do a:

var_dump($_POST); die(); 

before the line that throws the error and see that you're trying to get an array key that does not exist.

Elzo Valugi
  • 27,240
  • 15
  • 95
  • 114
Ahish
  • 73
  • 1
  • 7
-2

The Correct way to reffer is

$my_referer = isset($_POST['referer']) ? trim($_POST['referer']) : (isset($_SERVER['HTTP_REFERER']) ? base64_encode($_SERVER['HTTP_REFERER']) : false);