0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPでPOSTされた0と''(空文字)を判定する

Posted at

先日同僚にこんな質問をされました。

「POSTされた値の0と""(空文字)を反映するにはどうしたらいいですか?」

普段何気なくやってたけど、即答できなかったので考えてみました。

先に結論

以下のifで判定できます。

index.php
<?php
if ($_POST) {
  if ($_POST['test'] === '') {
    echo '空文字です。';
  } else if ((int)$_POST['test'] === 0) {
    echo '0です。';
  } else {
    echo 'それ以外です。';
  }
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="/" method="POST">
    <input type="text" name="test">
    <button>送信</button>
  </form>
</body>
</html>

判定しているのは以下の部分です。

<?php
if ($_POST) {
  if ($_POST['test'] === '') {
    echo '空文字です。';
  } else if ((int)$_POST['test'] === 0) {
    echo '0です。';
  } else {
    echo 'それ以外です。';
  }
}
?>

解説

まずはPOSTされている値を調べます。

// ""でPOSTした場合
array(1) {
 ["test"]=>
 string(0) "" 
}

// 0でPOSTした場合
array(1) {
  ["test"]=>
  string(1) "0"
}

''でPOSTした場合、string(0) ""が返ってくるのは予想通りですが、0でPOSTしてstring(1) "0"が返ってくるのは??となるかもしれません。

これは、HTMLフォームから送信されたデータは、HTTPリクエストとしてサーバーに送信される際に、文字列として扱われるためです。そういう仕様なので、そういうものだと理解しましょう。

参考

フォームでPOST されたデータは全て文字列になる?PHP小話
PHPの質問です。POSTで配列を受け取ると全て文字列に変換されてし... - Yahoo!知恵袋

判定してみよう!

""0は、==で比較するとどちらもfalseになるので、===で比較してやればいいです。

if ($_POST['test'] === '') {
  echo '空文字です。';
} else if ((int)$_POST['test'] === 0) { // (int)で型キャストして数値にする
  echo '0です。';
} else {
  echo 'それ以外です。';
}

これでうまく""0を判定できます。

ChatGPTに聞いてみた

phpでフォームを作っています。
input[type="text"]要素の''(空文字)と0 を判定したいです。
以下のコードで判定できますか?

<?php
if ($_POST) {
  if ($_POST['test'] === '') {
    echo '空文字です。';
  } else if ((int)$_POST['test'] === 0) {
    echo '0です。';
  } else {
    echo 'それ以外です。';
  }
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="/" method="POST">
    <input type="text" name="test">
    <button>送信</button>
  </form>
</body>
</html>

ChatGPT
はい、提供されたコードは、input要素の値が空文字 ('') か、または整数としての値が0かを正しく判定するためのコードです。以下でコードの詳細を確認しましょう。

ユーザがフォームを送信すると、PHPスクリプトは$_POST スーパーグローバル配列を介してデータを処理します。
最初に、フォームのinput要素の値が空文字 ('') かどうかをチェックします。もし空文字なら、'空文字です。'というメッセージが表示されます。
次に、input要素の値を整数にキャストし、その値が0と等しいかを判定します。もし0なら、'0です。'というメッセージが表示されます。
上記の条件に該当しない場合は、'それ以外です。'というメッセージが表示されます。

あってるみたい。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?