🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

788閲覧

PHPのisset関数について教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/10/26 12:38

現在PHPを勉強しているのですが、分からない事が出てきたので質問させていただきます。

まずはこちらがコードです

inputphp

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>PHP Sample</title> 6</head> 7<body> 8 <form action="output.php" method="post"> 9 <p><input type="checkbox" name="mail"> 10 メールを受け取る 11 </p> 12 <p><input type="submit" value="確定"></p> 13 </form> 14</body> 15</html>

outputphp

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>PHP Sample</title> 6</head> 7<body> 8 <?php 9 if(isset($_REQUEST['mail'])){ 10 echo 'メールをお送りさせていただきます。'; 11 }else{ 12 echo 'メールはお送り致しません。'; 13 } 14 ?> 15</body> 16</html>

チェックボックスの状態に合わせて表示を切り替えるコードなのですが、
outputphpの
if(isset($_REQUEST['mail']))

if($_REQUEST['mail'])
というふうに書くと
「Notice: Undefined index: mail in」というエラーが出ます。

ifの条件である $_REQUEST['mail'] がtrueの時は「メールをお送りさせていただきます。」と出力されるのですが、
なぜ条件がfalseの時はelseの時の処理(メールはお送り致しません。)が行われないのでしょうか?

もちろん、isset関数を書いた時は思っている動作をするのですが、
isset関数を書かなかった時にfalse時の処理が行われない原因がわかりません。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/10/26 12:42

「条件がfalseの時」とはエラーが出ている状態のことを言っているのでしょうか。
miyabi_takatsuk

2019/10/26 13:00

チェックボックスをチェックしている場合と、チェックしていない場合の条件の時の、状況も合わせて、記載ください。 つまり四パターンの状態を示してください。 ・チェックを入れている、issetを使っている ・チェックを入れていない、issetを使っている ・チェックを入れている、issetを使っていない ・チェックを入れていない、issetを使っていない の4パターンです。 (というか、それを確かめている間に疑問解決する気がする)
退会済みユーザー

退会済みユーザー

2019/10/26 13:50

条件がfalseの時とは、チェックを外している状態のことです。 issetを使って書いた場合、 チェックを入れる→メールをお送りさせていただきます。 チェックを外す→メールはお送り致しません。 issetを使わなかった場合、 チェックを入れる→メールをお送りさせていただきます。 チェックを外す→Notice: Undefined index: mail in です。
退会済みユーザー

退会済みユーザー

2019/10/26 14:55

ご回答いただき、ありがとうございます。
guest

回答2

0

ベストアンサー

php

1自分のif-else文の理解は 2 3if分の条件がtrueの場合、 4if(条件){ 5ここの処理が行われる 6}else{ 7 8} 9 10if分の条件がfalseの場合、 11if(条件){ 12 13}else{ 14ここの処理が行われる 15}

ではなく

php

1if分の条件がtrueの場合、 2if(条件 //ここの処理と){ 3ここの処理が行われる 4}else{ 5 6} 7 8if分の条件がfalseの場合、 9if(条件//ここの処理と){ 10 11}else{ 12ここの処理が行われる 13}

条件を処理(評価)することなく、どっちのブロックを実行すればいいかを判断することは不可能です。

Notice: Undefined index: mail in

は、($_REQUEST['mail'])を評価して出された警告です

投稿2019/10/26 14:29

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/10/26 14:52

そういうことでしたか。。。 確かに、if-else文の条件がない(チェックが入っていない)状態では、評価できないですよね。 だからissetを使って未定義でも評価できるようにしているのですね。 大変勉強になりました。 初歩的な質問にお付き合い頂きまして、ありがとうございました。
guest

0

isset関数を書かなかった時にfalse時の処理が行われない原因がわかりません。

警告メッセージが出るだけで、行われることは行われます

issetは厳密には関数ではないので、issetの引数として与えられたものに未定義なものがあっても、無視するように作られています。単なる関数では、こんな芸当はできません。

投稿2019/10/26 13:14

maisumakun

総合スコア145971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/10/26 14:13

issetについて参考書には 「isset関数は、変数に値が代入されていて、かつ値がnullでないときに、trueを返します。」とあり、 if(isset(リクエストパラメータの変数){ チェックされている時の処理;  ←変数が定義されいている時の処理 }else{ チェックされていない時の処理  ←変数が定義されていない時の処理 } と書いてあります。 通常(今回の場合もですが)、if-else文の条件がfalseの場合、elseの処理が行われると思うのですが、なぜ警告メッセージが出るのでしょうか? 自分のif-else文の理解は if分の条件がtrueの場合、 if(条件){ ここの処理が行われる }else{ } if分の条件がfalseの場合、 if(条件){ }else{ ここの処理が行われる } なので、なぜ警告メッセージが出るのか知りたいです。
退会済みユーザー

退会済みユーザー

2019/10/26 14:55

ご回答頂きありがとうございます。 大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問