2013-11-14 10 views
12

お知らせ:未定義のインデックス:HTTP_REFERERお知らせ:未定義のインデックス:HTTP_REFERER

$ HTTP_REFERER = $ _SERVER [ 'HTTP_REFERER']

私はtutorial.andからこれを使用するが、それはコードも大丈夫

に見えるですファイルを含めて呼び出す

私は何を変更する必要がありますか?

私はprint_r($ _ SERVER)を追加しました。そして今ページが私にこの

を与える
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 
    ) 

がコードを編集したが、それでもすべてのfieddsをエコーすることができないが

を "e" を

を追加した後、今

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

?> 

を必要としています

ページに「すべてのフィールドが必要です」と表示されます

それでも塗りつぶしすべてのフィールドのメッセージは、クライアントによって送信されることが保証されていない

+0

この変数の存在をテストする必要があります。あなたが別のページから来ていないが、アドレスバーに直接ページへのリンクを入力した場合は、リファラーはありません... –

答えて

37

HTTP_REFERER変更されません。

ページのアドレス(もしあれば)にユーザーエージェントを呼び現在のページ。これはユーザエージェントによって設定されます。すべてのユーザーエージェントでこれを設定するわけではなく、HTTP_REFERERを機能として変更する機能もあります。要するに、それは本当に信頼できるものではありません。

あなたのケースでは、それが明確に送信されてないですので、本当にあなたがすることができるすべては

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 - ちょっと不思議です - なぜあなたは受け入れられませんでしたか? –

+0

こんにちは、元の質問は、(少なくとも私の場合)いくつかの迷惑メールのウェブサイトをブロックするように頼んだかもしれないと思います。上記の解決策では、すべての場合においてアクションが実行されます。ここに私がしたことがあります:if(isset($ _ SERVER ['HTTP_REFERER'])&& $ _SERVER ['HTTP_REFERER'] == 'www.spamwebsite.com'){// action} – coder

+0

これは正しい質問です – albertoiNET

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

'isset'メソッドはブール値を返します。 '$ THE_REFER'変数は、リファラーヘッダの実際の値ではなく、' 'true ''または '' false "'になります。 –

+0

@JeffKilbrideコメントありがとうございます。この投稿は2年前です...なぜ私はこの非公式な投稿を送ったのかわかりません!私はショックを受けた!私はそれを編集しました。ありがとうございました –

0

あるrefferする正しい方法は

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

未定義のインデックス手段であり、配列キーが設定されていない場合は、次のようにします。

エラーをスローする行の前に、存在しない配列キーを取得しようとしていることがわかる前に、
var_dump($_POST); die(); 

のいずれかを入力してください。

関連する問題