• ベストアンサー

if文の$_COOKIEの処理について

if文の「$_COOKIE」の処理について質問させてください。 3つのif文の処理は同じだと思いそれぞれ使いって みると多少違いがあるようなのですが、その違い がよく分かりません。PHP4の場合はとはちょっと 様子が違うみたいです。 (1) if($_COOKIE['XXXXXXX']) (2) if(isset($_COOKIE['XXXXXXX'])) (3) if($_COOKIE['XXXXXXX']!="") 環境:PHP5 よろしくお願いします。

  • ccgp
  • お礼率62% (5/8)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • nicolish
  • ベストアンサー率72% (13/18)
回答No.1

マニュアルを読みましょう。マニュアルには全てが書いてあります。どんな書籍よりも役に立ちます。 (1)は、$_COOKIE['XXXXXXX']の値をboolに型変換し、その結果を判定します。 従って、$_COOKIE['XXXXXXX']の中身が「文字列の"0"」「空文字列」などの時、不成立となります。また、$_COOKIE['XXXXXXX']が未定義の時(要はそんな名前のクッキーが送られていない時)も不成立(NOTICEレベルのエラー)になります。その他の文字列の場合は全て成立します。 (2)は、$_COOKIE['XXXXXXX']が未定義の時に不成立となり、それ以外の場合は成立します。未定義でもNOTICEは出ません。空文字列でも成立します。 (3)は、文字列に変換した時に空文字列でないならば成立します。不成立となるのは、未定義の時、空文字列の時です。"0"は成立になります。 一応まとめると ・未定義の時=そんな名前のクッキーが無い時  1はNOTICEが出つつ不成立、2は不成立、3はNOTICEが出つつ不成立 ・あるけど、中身が文字列"0"の時  1は成立、2,3は不成立 ・空文字列の(つまり、クッキーの名前だけ送られてきて値は空だった)時  1は不成立、2は成立、3は不成立 ・それ以外のすべての文字列の時  1,2,3すべて成立 です。 「クッキーが送られてきているか?」を判定するならば if(isset($_COOKIE['XXXXXXX']) && $_COOKIE['XXXXXXX'] != "") がスマートだと思います。漏れも無く、NOTICEも出ません。

ccgp
質問者

お礼

nicolishさん 回答ありがとうございます。 とても参考になりました!!!! if構文の判定以前のもっとも基本的なことが理解できていませんでした。 やはり基本が大切ですね。 基本的な部分からマニュアルを読んでみます。 ありがとうございました。

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

バージョンの違いよりエラー出力の影響が濃そうですが、ザックリ (1) if( $_COOKIE['XXXXXXX'] ) $_COOKIE['XXXXXXX']が真であるか。未定義なら警告 (2) if( isset($_COOKIE['XXXXXXX']) ) $_COOKIE['XXXXXXX']が定義済みであるか。nullでも定義されていれば真 (3) if( $_COOKIE['XXXXXXX'] != "" ) $_COOKIE['XXXXXXX']が真であるか。未定義なら警告 (4) if( $_COOKIE['XXXXXXX'] !== "" ) $_COOKIE['XXXXXXX']が文字列""以外であるか。未定義なら警告 (5) if ( !empty($_COOKIE['XXXXXXX']) ) $_COOKIE['XXXXXXX']が空以外であるか。未定義なら偽 まとめ 0 や "0" や "" や null を有効な値として扱う場合は、if ($a) など曖昧な判定はやめとく。 定義してるか分かんない変数は isset や empty で警告をさける。

ccgp
質問者

お礼

tany180sxさん 回答ありがとうございます。 ノウハウをありがとうございます。 判断するの参考になりました!!!!

関連するQ&A

  • if文の書き方

    プログラム初心者です if文の処理速度が速いのは一般的に考えてどちらでしょうか? 別々にif文で処理する方法 try { if(!isset($_REQUEST['id'])&& !is_string($_REQUEST['id'])){ throw new Exception('error'); } if(!isset($_COOKIE['date'])&& !is_string($_COOKIE['date'])){ throw new Exception('error'); } } catch (Exception $e) { $msg = $e->getMessage(); } 一緒に処理する方法 try { if(!isset($_REQUEST['id']) && !is_string($_REQUEST['id']) && !isset($_COOKIE['date']) && !is_string($_COOKIE['date'])){ throw new Exception('error'); } } catch (Exception $e) { $msg = $e->getMessage(); } よろしくお願いします

    • ベストアンサー
    • PHP
  • if文について

    $a = $_GET['b']; if ($_COOKIE['hogeFlag'] != hoge) && (!isset($a)) {  処理1 } あるページから画面遷移したときに遷移前に食わせたcookieの値とgetで送られてくる値を元にある処理を行いたいのですが、どうもうまく処理1に入ってくれません。 個々にすればちゃんと処理されるのですが、それだと非効率だと思うので、一行で書きたいのですがどうもうまくいきません。 前提 遷移前ページでcookieに値を食わせてかつ別の値をgetで送ってくるようになっているが、cookieの値が食わせた値と違う場合かつgetで送ってこなかった場合に処理1を実行したい。

    • 締切済み
    • PHP
  • if文でisset

    isset()などを使わずに下記のように変数だけで条件を指定するとまずいですか? isset()などをつかった場合の違いはなんでしょうか? if($_SESSION['id']){ print "hoge"; }

    • ベストアンサー
    • PHP
  • if文の中のif文・・・について

    質問させていただきます。 if文の中のif文の記述の仕方について質問があります。 例えば if ( x > 0 ){ a = b+c; if ( a > 1) d = e+f; ・・・1 if ( a < 1) d = e-f; ・・・2 if ( a = 1 ) d = 1-g; ・・・3 } h = d + i; aが1より大きい場合は、1の処理を、aが1より小さい場合は2の処理を、aが1と同じであった場合、3の処理をして最終的に、h = d + i;の式の d に代入して h を求めたいと思っているのですが、うまくゆきません。 if文の中のif文の記述はどのようにすればよいのでしょうか? よろしければご教示よろしくお願いします。

  • PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか?

    PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか? for文やwhile文ではbreakやcontinueなどが使えるようですが、if文にはないのでしょうか? 条件分岐がいくつかあって、その一つを途中で抜けて次の条件分岐へと移行したいのですが、 exitを使ってしまうと、次へ行かずに処理が中止されてしまいますし、 どのようにすればよいのか分からず困っています。何かよい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • if文の処理について

    お世話になります。 switch文の中に、 「もし3桁目があれば、計算(カウント)し、 なかったら計算しない」 というif文を作りたいと思っています。 しかし、処理の仕方が全くわかりません。 初歩的な質問なのですが、お力添え頂けないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • IF文

    (A)IF 条件 THEN 単純実行文1 ELSE 単純実行文2 (B)IF 条件 THEN 実行処理1 ELSE 実行処理2 Aの文では単純実行分なのになぜ改行すると(B)の文みたいに実行処理になるのでしょうか? 実行処理と単純実行文の違いを教えてください

  • phpでif文に指定されている条件の意味について

    あるプログラムの中に以下のような処理があったんですが意味がわかりません。 if(true || isset($val)){ 処理 } 上記の場合いずれかが真ならif文の処理を行うということになると思うのですが $valの状態がどうであろうが一つ目の条件に「true」が入ってる時点で必ずブロック内の処理を行うと考えていいのでしょうか?

    • ベストアンサー
    • PHP
  • phpのif文について

    phpでログイン処理のif文を書いています。 nameとpasswordのフィールドが記入されているのかをチェックするif文を書いたのですが、機能してくれません。何かが間違っているのでしょうか。 何も入力しないor間違った情報を入力する ということをしてもログインが出来てしまいます。 どなたかテェックお願い致します。 <?php require('dbconnect.php'); session_start(); if ($_COOKIE['name'] != '') { $_POST['name'] = $_COOKIE['name']; $_POST['password'] = $_COOKIE['password']; $_POST['save'] = 'on'; } if (!empty($_POST)) { // ログインの処理 if ($_POST['name'] != '' && $_POST['password'] != '') { $sql = sprintf('SELECT * FROM members WHERE name="%s" AND password="%s"', mysql_real_escape_string($_POST['name']), sha1(mysql_real_escape_string($_POST['password'])) ); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { // ログイン成功 $_SESSION['id'] = $table['id']; $_SESSION['time'] = time(); // ログイン情報を記録する if ($_POST['save'] == 'on') { setcookie('name', $_POST['name'], time()+60*60*24*14); setcookie('password', $_POST['password'], time()+60*60*24*14); } header('Location: index.php'); exit(); } else { $error['login'] = 'failed'; } } else { $error['login'] = 'blank'; } } ?>

    • ベストアンサー
    • PHP
  • if文での0の挙動

    phpでの簡単なif分を使った関数です。 顧客テーブルにflagを付けて、賞品Aの利用者であるか無いかを判別しています。利用者でない場合$flag=0、利用者の場合$flag=1とします。 function userlist($flag = null){ if($flag != ""){ // リストを取得するSQL文 } } とした場合、引数として$flag=0を渡すと全顧客リストが返されます。 isset,is nullも同じです。 数値での0が渡された場合はif分ではtrueが返されたと思ったのですが.....教えて頂けないでしょうか?

    • ベストアンサー
    • PHP