先日同僚にこんな質問をされました。
「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です。'というメッセージが表示されます。
上記の条件に該当しない場合は、'それ以外です。'というメッセージが表示されます。
あってるみたい。