質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

Q&A

解決済

3回答

2208閲覧

入れ子にした二回目のif が機能しない

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

0グッド

1クリップ

投稿2015/08/11 22:17

if(isset($_POST['edit'])==true)
{
if(isset($_POST['staffcode'])==false)
{
header('Location:staff_ng.php');
}
$staff_code=$_POST['staffcode'];
header('Location:staff_edit.php?staffcode='.$staff_code);
}

上記の文で色々検証しましたが、やはり二つ目のifが機能していません。
if(isset($_POST['staffcode'])==false)
{
header('Location:staff_ng.php');
}
どなたかおわかりになる方教えてください。

追記
単体で二回目のif文が機能しているか確認してみたところちゃんと動きます。ifを入れ子にすると機能しなくなります。そんなルールがあるのでしょうか?

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

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

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

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

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

guest

回答3

0

staffcode という項目はテキストボックスですか?
以下はテキストボックスだとして説明します。

<input type="text" name="staffcode"> のようないわゆるテキストボックスは、
未入力の場合は空文字 "" がポストされます。

このとき、$_POST には次のように空文字がセットされます。

php

1$_POST['staffcode'] = "";

isset は空文字に対して true を返します。

php

1$_POST['staffcode'] = ""; 2var_dump(isset($_POST['staffcode'])); // true

もちろん、空文字以外の任意の文字列に対しても true です。

php

1$_POST['staffcode'] = "abc"; 2var_dump(isset($_POST['staffcode'])); // true

したがって、下記の if の中身は staffcode がテキストボックスなら、常に false です。

php

1if(isset($_POST['staffcode'])==false) // true == false -> false

と、ぱっと見で思ったのですが、
よく見ると if の中身が true のときに Location ヘッダが2回出力されていますね。

これはどういう意図で2回出力しているのでしょうか?
下記の間違いではないですか?

php

1if(isset($_POST['edit'])==true) 2{ 3 if(isset($_POST['staffcode'])==false) // ここも要修正 4 { 5 header('Location:staff_ng.php'); 6 } 7 else 8 { 9 $staff_code=$_POST['staffcode']; 10 header('Location:staff_edit.php?staffcode='.$staff_code); 11 } 12}

質問の書き方についてですが。

やはり二つ目のifが機能していません。

どういう入力で、どういう結果になったため、
「機能していない」と思ったのかを書いてください。

単体で二回目のif文が機能しているか確認してみたところちゃんと動きます。

どういうコードで、どういう入力で、どういう結果になったため、
「ちゃんと動く」と思ったのかを書いてください。

投稿2015/08/11 22:51

ngyuki

総合スコア4514

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

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

0

ベストアンサー

ifを入れ子にすると機能しなくなるというルールはありません。
ifが機能していないと判断した理由は、結果としての画面遷移が意図通りに行かないからでしょうか。
headerでロケーション指定するということを、もう少し深く学ぶことをお勧めします。

他の方のおっしゃるようにリクエストパラメータの可能性もありますが、
ご質問のような記述を行う場合、途中のheader()の直後で処理を終了させるべきです。

5行目からの分岐処理を

header('Location:staff_ng.php');
exit;

と記載してみて下さい。
意図通りの画面遷移が行えると思います。

投稿2015/08/12 01:27

kawamori

総合スコア61

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

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

0

これでどうですかね?
headerが2回実行される可能性があるので、
その場合最後に実行された方が有効なので...

PHP

1<?php 2 if (isset($_POST['edit']) == true) { 3 if (isset($_POST['staffcode']) == false) { 4 header('Location:staff_ng.php'); 5 } else { 6 $staff_code = $_POST['staffcode']; 7 header('Location:staff_edit.php?staffcode=' . $staff_code); 8 } 9 } 10?>

投稿2015/08/11 22:29

Tron

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問