• 締切済み

クッキー送信

以下のコードでクッキーが送信できると思ったのですができません。 どこがいけないでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> <?PHP if(!isset($_COOKIE['visited']))// { //はじめての訪問 $count=1; echo"<p></p>"; } else { echo"cookie up<br />"; $count = $_COOKIE['visited']; $count++; } setcookie('visited',$count);// echo "Hello!!<br />"; echo "your ${count} visited!<br />"; echo '<a href="cookie.php">cookie</a>' ?> </body> </html>

  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

あ、ついでにもう一つ UTF8で保存しているのであればBOMが悪さすることもあるので BOMなしで保存してください

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>教えていただいたソースを丸ごと写した え~と、うまく伝わらなかったかなぁ・・・ すべての出力の前にクッキーをセットするという意味だったんですが <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; setcookie('visited',$visited); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio … <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> visit:<?PHP print $visited; ?> </body> </html> みたいな感じ javascriptの部分が中途半端にしかかいてないので そこは自己解決してください

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

クッキーのやり取りについて理解が必要 (1)ブラウザからサーバーにクッキーをおくる (2)サーバーからブラウザにクッキーをおくる (3)サーバーからブラウザにhtmlの本文をおくる の流れです。 なので(2)の前に(3)が発生した場合、サーバーからブラウザにクッキーは送られません。 サーバーがhtml本文を送る場合、ある程度バッファリングをするので さほど問題はないのですが、例示のとおりだとsetcookieを実行する前に html文が書かれているので、不安定な状態です。 例) <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; setcookie('visited',$visited); print $visited; ?> なら、setcookieの前に出力がないので確実にクッキーはセットされますが <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; print "test"; setcookie('visited',$visited); print $visited; ?> だと、setcookieの前の出力がバッファされるかどうかわからないので不安定 <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; print "test"; ob_flush(); setcookie('visited',$visited); print $visited; ?> すると、setcookieの前に確実に出力がされるのでクッキーがセットできない

satisfied999
質問者

補足

素早い返信ありがとうございます。 教えていただいたソースを丸ごと写したのですがうまくいきません。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; setcookie('visited',$visited); print $visited; ?> </body> </html> サーバーにアップロードしたのですが、何が邪魔しているのでしょうか? クロームのクッキーを調べるプラグインで確認したところ、setcookieがうまくいっていないようです。 クッキーがブラウザに登録されません。 http://goo.gl/hlNKKQ

関連するQ&A

  • ASP記述式

    今、PHPの勉強をしているのですが・・最初の方でいきなりASPの記述式についてコードが書いていました。物凄く簡単なコードなのですが、下記のコードの中でASP記述式の「はじめまして(*^_^*) 」だけが表示されません。どうしたら表示されるのでしょうか?ご教授よろしくお願いします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <p> <b>基本形:</b><br> <?php echo"はじめまして(*^_^*)"; ?> <p> <b>短縮形:</b><br> <? echo"はじめまして(*^_^*)"; ?> <p> <b>スクリプト記述形:</b><br> <script language="PHP"> echo "はじめまして(*^_^*)"; </script> <p> <b>Active Server Page(ASP)式記述:</b><br> <% echo"はじめまして(*^_^*)"; %> </body> </html>

  • PHP、どうして認識しないのですか?

    現在の私のサイト(shtml)のソースは次のとおりです(甲)。これを下記(乙)のように書き換えてアップしましたが”こんにちは”の文字が現れません。 レンタルサーバーの問題ですか?ソースの問題ですか? (甲) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" > <META http-equiv="Content-Script-Type" content="text/javascript"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <META NAME="ROBOTS" CONTENT="INDEX,FOLLOW"> <TITLE>○○○</TITLE> (乙) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>○○○</title> </head> <body> <!--shtmlのソースの中に次を挿入しました--> <p> <?php echo "こんにちは。<br />"; echo "こんにちは。<br />"; echo "こんにちは。<br />"; echo "こんにちは。<br />"; ?> </p> ----------------------- これが表示されません。 教えて下さい。どうしてですか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 前後の全角スペースを削除すると文字化けする

    PHP初心者です。 trimファンクションを使って前後の全角スペースを削除したいのですが $test = " 左右に全角スペースがある文字列 "; echo trim ( $test , " " ); だと問題なく表示されるのですが以下のようにテキストボックスに入力した文字の 前後の全角スペースを削除しようとすると最初の1文字目が文字化けします。 ●test_input.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>前後の全角スペースを削除する</title> </head> <body> <form action="test.php" method="get"> <dl> <dt>文字を入力してください。</dt> <dd><input type="text" name="test" size="50" maxlength="50" id="test" /> </dd> </dl> <input type="submit" value="送信する" /> </form> </body> </html> ●test.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>前後の全角スペースを削除する</title> </head> <body> <p>入力文字</p> <?php $test = ($_REQUEST['test']); echo ($test); ?> <br /> <br /> <p>trim ( $test , " " )</p> <?php echo trim ( $test , " " ); ?> </body> </html> どこがいけないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 簡単なwhile・break文

    基本事項過ぎてすいません。 以下のコードですが、 処理結果が 1000を越えたので count = 45 で終了しますsum = 1035 なのですが、あってますでしょうか? なぜ45で終了なんですか? (1)まずcount は1なので $sum += $count; のところで$sumは 1になり 1>1000なので、$count += 1; に飛び 1+1 で2 (2)count は2なので $sum += $count; のところで$sumは 2になり 2>1000なので、$count += 1; に飛び 1+2で3 (3)count は3なので ・ ・ ・ ・ という風に続けていくと999ぐらいまで行きませんか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>サンプル</title> </head> <body> <p>PHPのテストです。</p> <p> <?php $count = 1; $sum = 0; while ($count <= 100){ $sum += $count; if ($sum > 1000){ print '1000を越えたので count = '.$count.' で終了します'; break; } $count += 1; } // breakが実行された時に処理が移る位置 print 'sum = '.$sum; ?> </p> </body> </html>

    • ベストアンサー
    • PHP
  • クッキーがよくわかりません

    クッキーの利用の仕方が不明です。 ↓以下のようなプログラムを↓をコピペしてきたのですが、よくわかりません…$data=$_COOKIE["data"];の部分でエラー発生します。 どういうことでしょうか? http://w1.nirai.ne.jp/freeze/main/files/10_01_cookie.html <?php       //クッキーは<html>よりも先に記述する $data=$_COOKIE["data"];     //まずクッキーを読み出す  if(!isset($data)){       //何もデータが無ければ   $data = $_POST['data'];   //postで受け取ったデータを  }else{             //クッキーデータがあれば   $data = $data."<br>".$_POST['data'];    //前のデータに新しいデータをくっつける  } setcookie("data", $data, time()+60*10);    //そしてそのデータを60秒×10つまり10分間記憶する ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>クッキーで、すぐ消える一行メモ</title> </head> <body> クッキーで、すぐ消える一行メモ<br> 文章を入力して表示クリックを、何度か繰り返してください。10分で消えます。<br> <form action="10_01_cookie.php" method="post"> <input type="text" name="data" size="50"> <input type="submit" value="表示!"> </form> <!--ここからPHPが始まります。--> <?php echo $data;    //入力された文を改行をはさんで記憶しているので、それを記述する ?> <!--これでPHPは終わりです。--> </body> </html>

    • ベストアンサー
    • PHP
  • Cookieの設定について

    PHPでCookieにデータを設定しているのですが以下のエラーメッセージが出て 正常に設定できません何か悪いのでしょうか? よろしくお願いします。 ○エラーメッセージ Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\index.php:59) in C:\xampp\htdocs\index.php on line 340 Cokkie NG ○ソースの関連部分 index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>SAMPLE </title> <meta http-equiv="Pragma" content="No-Cashe" /> <meta http-equiv="Cache-Control" content="No-Cache" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <link type="text/css" rel="stylesheet" href="search.css" /> <?php $r = setcookie('win_width','800',time()+3600,"/"); if ($r) { echo'<p>Cokkie OK</p>'; } else { echo'<p>Cokkie NG</p>'; } ?> </body> <HEAD> <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> </HEAD> </html>

    • ベストアンサー
    • PHP
  • php初心者です。セッションについて

    php初心者です。セッションをはじめて扱ってみているのですが、上手く行かずに困っています。 HP1でセッションに文字や数値を入れて表示、HP2でも表示というごく単純なものでセッションを試して見ているのですが上手く行かずにいます。 何か初歩的な間違いだとも思うのですが、どうにも上手くゆかず質問させていただきました。何に問題があるかアドバイスやご助言をいただければと思います。 よろしくお願いします。 ---------------------- HP1 ---------------------- <?php session_start(); //セッション開始 $_SESSION["str"] = "aiueo あいうえお"; $_SESSION["num"] = 1; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <title>session01</title> </head> <body> <p>page1</p> <?php print $_SESSION["str"]."<br />"; print $_SESSION["num"]."<br />"; ?> <p><a href="session02.php">page2へ</a></p> <?php ?> </body> </html> ---------------------- HP2 ---------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <title>session01</title> </head> <body> <p>page1</p> <?php print $_SESSION["str"]."<br />"; print $_SESSION["num"]."<br />"; ?> <p><a href="session01.php">page1へ</a></p> <?php ?> </body> </html>

    • 締切済み
    • PHP
  • 文字の見た目の長さを取得する方法について

    文字の見た目の長さを取得し、全角■(半角■×2)に収まっているかチェックしようと思い、下記のソースを記述したのですが、特定の文字で意図した結果になりませんでした。 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>title</title> </head> <body> <?php $array = array( "1234567890" // 1. 10とカウントしたい , "12345" // 2. 10とカウントしたい , "侉侉侉侉侉" // 3. 10とカウントしたい , "※※※※※" // 4. 10とカウントしたい , "112233" // 5. 9とカウントしたい ); for($i=0; $i<count($array); $i++) { // 3がNG echo strlen(mb_convert_encoding($array[$i], 'SJIS', 'UTF-8')); echo "<br />"; // 4がNG echo mb_strwidth($array[$i], 'UTF-8'); echo "<br />"; echo "<br />"; } ?> </body> </html> 【結果】 10 10 10 10 5 10 10 5 9 9 http://hamamuratakuo.blog61.fc2.com/blog-entry-421.htmlのUTF-8の日本語のバイト数が原因かもと思ったのですが、どうすれば文字の見た目の長さを取得できるか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP 文字化けの解決策。

    こんばんわ。PHP初心者です。 以下のコードは、http://table.yahoo.co.jp/tのソースをすべて読み取り、ブラウザ上で表示させるプログラムです。 ですが、ブラウザ(クロームを使用)で表示する際、なぜか文字化けしてしまいます。 どうすれば解決するでしょうか? ちなみにhttp://www.yahoo.co.jp/は文字化けせず、正常に表示させることができます。 PHP.iniをいじる必要がありますか? PHP.iniのことは一切分かりません。 よろしくお願いします。 <?php $result = ""; $lines = @file("http://table.yahoo.co.jp/t") or $result = "ファイルが読めません。"; if ($lines != null){ for($i = 0;$i < count($lines);$i++){ $result .= ($i + 1) . ": " . $lines[$i] . "<br>"; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>sample page</title> </head> <body> <h1>Hello PHP!</h1> <p><?php echo $result; ?></p> </body> </html>

    • ベストアンサー
    • PHP
  • phpのフォーム入力で

    phpの勉強初日なのですが、さっそくつまづいてしまいました。 買った本に沿って、簡単なフォーム入力のhtmlファイルと、 その処理のphpファイルを下記のように作ってみたのですが、上手く行きません。 htmlのフォームからのpostは出来ているようなのですが、 phpファイルがコールされると、phpファイルのソースがそのまま表示されてしまって、 postした文字列がechoされません。。。 初日でつまづいてしまっていきなり挫折しそうです。。。 どなたかお詳しい方、お教えいただけると幸いです。 ■input.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>input</title> </head> <body> <form action="inputphp.php" method="post"> <label for="my_name">お名前:</label> <input id="my_name" type="text" name="my_name" size="15" maxlengh="255" value=""/> <input type="submit" value="送信"/> </form> </body> </html> ■inputphp.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>inputphp.php</title> </head> <body> <?php print($_REQUEST['my_name']); ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう