2013-11-14 25 views
12

Wskazówka: Undefined index: HTTP_REFERERWskazówka: indeks niezdefiniowany: HTTP_REFERER

$ HTTP_REFERER = $ _SERVER [ 'HTTP_REFERER']

użyłem tego z tutorial.and wygląda w porządku

również kod jest wywoływanie go z pliku

co powinienem zmienić?

Dodałem print_r ($ _ SERVER); a teraz strona daje mi to

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] => [email protected] 
     [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 
    ) 

edytowany kod ale nadal niezdolny do echo fiedds są wymagane

<?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'; 
    } 

?> 

teraz po dodaniu

"e"

strona mówi "wszystkie pola są wymagane"

ale nawet gdy wypełnienie wszystkich wiadomości pól nie zmieniają

+0

powinieneś przetestować tę zmienną egzystencję. Jeśli nie pochodzisz z innej strony, ale wpisałeś link do strony bezpośrednio w pasku adresu, nie będzie żadnego referera ... –

Odpowiedz

37

HTTP_REFERER nie jest gwarantowana być wysłany przez klienta:

adres strony (jeśli w ogóle), które określoną agenta użytkownika do bieżąca strona. Jest to ustawione przez klienta użytkownika. Nie wszystkie programy klienckie ustawiają to, a niektóre zapewniają możliwość modyfikacji HTTP_REFERER jako funkcji. Krótko mówiąc, nie można tak naprawdę zaufać.

W twoim przypadku jest to wyraźnie nie wysyłane, tak naprawdę wszystko, co można zrobić, to

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 
} 
+3

@Mojtaba - zastanawiam się - dlaczego nie akceptujesz? –

+0

Witam, myślę, że oryginalne pytanie mogło spowodować zablokowanie strony ze spamem (przynajmniej w moim przypadku). W powyższym rozwiązaniu działanie zostanie wykonane we wszystkich przypadkach. Oto co zrobiłem: if (isset ($ _ SERVER ['HTTP_REFERER']) && $ _SERVER ['HTTP_REFERER'] == 'www.spamwebsite.com') {// action}. – coder

+0

To jest poprawne pytanie – albertoiNET

4
if (isset($_SERVER['HTTP_REFERER'])) {$THE_REFER=$_SERVER['HTTP_REFERER']} 
+1

Metoda 'isset' zwraca wartość logiczną. Twoja zmienna '$ THE_REFER' będzie miała wartość" "true" lub "" false ", a nie faktyczna wartość nagłówka referer. –

+0

@JeffKilbride Dziękujemy za komentarz. Ten wpis jest dostępny 2 lata temu ...Nie wiem, dlaczego wysłałem ten nielogiczny post! Zszokowałem! Edytowałem to. Jeszcze raz dziękuję –

0

poprawny sposób reffer jest

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

Nie zdefiniowano środki indeksowych klucz tablicy nie jest ustawiony, wykonaj: a:

var_dump($_POST); die(); 

przed linią, która zgłasza błąd i widzisz, że próbujesz uzyskać klucz tablicy, który nie istnieje.