2017-04-12 19 views
0

私のコードで何が問題になっていますか?私はそれを実行すると、それは私に通知します:ボディセクションのif($_COOKIE["visits"] == 1)$numOfVisits = $_COOKIE["visits"];行の "Notice:Undefined index:visits"PHP:Cookieが正しく設定されていないのはなぜですか?

<!DOCTYPE html> 

<?php 
if (!isset($_COOKIE["visits"])) 
    setcookie("visits", 1, time()+3600*24*365); 
else{ 
    $visits = $_COOKIE["visits"] + 1; 
    setcookie("visits",$visits, time()+3600*24*365); 
} 
?> 

<html lang="en"> 
    <head> 
     <title>numOfVisits</title> 
     <meta charset="utf-8"/> 
    </head> 
    <body> 
     <?php 
     if($_COOKIE["visits"] == 1) 
      echo("Welcome to my webpage! It is your first time that you are here."); 
     else{ 
      $numOfVisits = $_COOKIE["visits"]; 
      echo("Hello, this is the #$numOfVisits time that you are visiting my webpage."); 
     } 
     ?> 
    </body> 
</html> 
+0

」陥りやすい落とし穴: クッキーは、クッキーがために表示されるはずのページの次の読み込みまで見えるようになりませんクッキーが正常に設定されたかどうかをテストするには、を確認してください。クッキーの有効期限はexpireパラメータで設定されます。クッキーの存在をデバッグするには、単にprint_r($ _ COOKIE);を呼び出すだけです。 "http://php.net/マニュアル/ ja/function.setcookie.php – nogad

答えて

1

問題は、すべてのヘッダーがサーバーからクライアントに送信される前に、Cookieまたはセッションを開始するだけです。 (setcookieSee documentation

ますsetcookie()は、HTTPヘッダーの残りの部分と一緒に送信するクッキーを定義します。他のヘッダーと同様に、スクリプトから出力する前にクッキーを送信する必要があります(これはプロトコルの制限です)。 これは、タグや空白を含む出力の前に、この関数を呼び出す必要があります。

これは実際に何かを出力した後にクッキーを設定できないということです。この場合、クッキーを設定する前に<!doctype html>を出力しています。

解決策は、の前にのHTMLを出力することです。

だから、解決策:

<?php 
if (!isset($_COOKIE["visits"])) 
    setcookie("visits", 1, time()+3600*24*365); 
else{ 
    $visits = $_COOKIE["visits"] + 1; 
    setcookie("visits",$visits, time()+3600*24*365); 
} 
?> 
<!doctype html> 
... 
+0

ああ、私は参照してください。それは簡単!ありがとう。クッキーを扱うのは私の最初の仕事です。私はhtmlタグの前に表示する必要がsetcookieを読んだが、私はこのdoctypeが含まれていることを認識していない。 –

関連する問題