情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

ランダム指名アプリケーション制作3

とりあえずの機能実装とエラー処理

まずまず、必要な処理の実装と例外時のエラー処理が出来たのでアップします!

1.必要なデータの取得

2.指定した人数分出力

3.エラー処理の実装

1.チェックボックスで必要なデータの取得

チェックボックスのデータを取得して、不在メンバーを配列から除外する処理を作りました 意外と時間がかかりました、、

result.php

$member = array('Aさん','Bさん','Cさん','Dさん','Eさん');

for($i = 0; $i < $employee_number;$i++){
        //出欠席チェックリストを代入
        $member_list[] = trim($_POST["list$i"]);

        if($member_list[$i] == ""){
            //欠席メンバーを$memberから削除、ただし欠席人数分をマイナスしないとずれていくのので -$absenceとしている
            $split = array_splice($member, $i - $absence, 1);
            $absence++;
        } else {
            //発表者をカウントアップ
            $count++;
        }
    }

2.指定した人数分出力

index.phpで選択メニューを指定して、result.phpで取得して指定されている人数分ランダムでメンバーを出力する

index.php

      <select name="num">
                <option>1</option>
                <option>2</option>
                <option>3</option>
                <option>4</option>
            </select>発表人数

result.php

$speak = trim($_POST["num"]);                                   //発表人数を取得

        for($j = 0; $j < $speak ; $j++){
            do{
                $t = 0;
                //配列は0からなので$countに-1をする
                $num = mt_rand(0, $count -1);

                for($k = 0; $k < $c; $k++) {
                    if($temp[$k] == $num){
                        $t = 1;
                    }
                }
                for($i = 0; $i < $yesterday_num; $i++){
                    if($member[$num] == $yesterday_name[$i]){
                        //前回の発表者と今回の発表者が同じ場合やり直し
                        $t = 1;
                    }
                }
            //$numが今まで表示された人と被っていたらやり直し
            } while ($t == 1);

            echo $member[$num];
            //一度表示された人を保存
            $temp[$j] = $num;
            $today[] = $member[$num];
            //発表者を表示した回数
            $c++;
        }

かなり強引に書いてしまいました、もっと行数を少なく、可読性を上げていきます!

3.エラー処理の実装

エラーというかこのままだと処理が止まってしまうので エラーになったらerror.phpに逃がします。

    //今回話すことができるメンバー
    $can_speak = array_diff($member,$yesterday_name);
    //今回話すことが出来る人数
    $can_speak_num = count($can_speak);

    //発表人数より在席人数のほうが少ないとき
    if($count < $speak){
        header("Location:error.php") ;
        exit;
    }

    $possible = $possible - $yesterday_num;
    //発表人数より前回の発表人数の方が多いとき
    if($possible < $speak){
        header("Location:error.php") ;
        exit;
    }

    //今回話すことが可能な人数より発表人数の方が多いとき
    if($can_speak_num < $speak){
        header("Location:error.php") ;
        exit;
    }

これも中身が同じですしもっと短くできるのでまた書き換えていきます。

まだまだ直すところや実装すべきこと、理解すべきことは沢山ありますが 一つ一つでも身につけていきます!