PHPのここをもっとちゃんと教えてよ!~その2:未入力判定の注意点~

f:id:nazuna_0124:20170327183448p:plain

連日の不機嫌マークごめんなさい!


だが私は謝らない。


言ってみたかったのに、すでに謝っていました。ごめんなさい。(2行ぶり2回目)


さて、今回の不満はPHPの鉄板ネタです。

気が付きさえすれば情報は溢れてます。


明らかに基礎的な知識の範疇なのに曖昧だったので、しっかりやってよ!とゆーお話。


‘'(空文字)、Null、0は別のものなのに、PHP上で同じものとして扱われる問題です。


具体的にはこちら。名前と年齢のフォームがあり、空白の判定をします。

<?php

    if(!empty($_POST)){  
        if(!$_POST['name']){
            echo '名前が未入力です。<br>';
        }
      
        if(empty($_POST['age'])){
            echo '年齢が未入力です。<br>';
        }
    }
?>

<html>
    <body>
        <p id="message"> </p>
        <form action="" method="post">
         <div>名前<input type="text" name="name" value="Nazuna"></div>
        <div>年齢
            <select name="age">
                <option></option>
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
            </select></div>
            
            <input type="submit"  value="送信">    
        </form>
    </body>

    </script>    
</html>

このときに、うっかり空判定に、empty($POST[‘age’])や!$POST[‘age’]を使うととりあえず罠にはまります


0でも未入力になってしまうのです。0歳児は存在するよ!


とはいうものの、マニュアルには書いてあります。

PHP: PHP 型の比較表 - Manual

こういう所在こそ最初に是非おしえてくだされ…


一緒に覚えておきたいのが、==(カッコ2つ)で比較すると、0と空文字とNullは全部Trueで返ってきます


ちょーど少し前に流行った、こちらを確認してください。

togetter.com


この例を踏まえて、この期の動作です。


0だと芯が入ってるので、先に抜かなきゃだめです。

Nullなら入れるだけでおっけー。

コードでいうと。

$トイレットペーパー=0;

//トイレットペーパーの交換処理。
if ($トイレットペーパー==0){
   echo '芯をを取り出す<br>'
}
    
echo '補充';

$トイレットペーパー=null にしても、「芯を取り出す」って出てきます。


その芯どこにあった!

今回は怒られませんが、処理によっては困ったことになります。


知ってればカッコ3つにするだけです。

運が悪いとはまります。


どーでもいいところで、つまづかないように!>ちょっと前のわたし


ちょっと前のなずな<「ハマッタヨー」