Wednesday 20 July 2011

subwayでオーダーするコード

今日は、arrayとforeachの勉強をしたので、
復習がてら書いていこうと思います

この記事、最初は勉強したことを箇条書きにしようかと思っていたのですが、
僕が勉強に使ってるこの記事の最後に都合よく課題がありました

「マルチセレクトリストで選んだものを配列として取得し、foreachで記述しよう」

ここで急にインスパイアが僕を襲いました。これはsubwayっぽい。

みなさん、サンドイッチ屋のsubwayをご存知でしょうか
シンガポールのsubwayは、セットにするとポテトではなくカントリーマームみたいな甘~いクッキーがついてきて、僕のお気に入りなのです

で、そのsubwayの特徴の1つがはさむ野菜を自由に選べること
ということで、はさむ野菜をマルチセレクトリストで指定すると、
店員が野菜を確認した後ソースを進めてくるコードを書くことにしました

<html>
<body>
<?php
    if(!isset($_POST['submit'])){
?>
店員:野菜はどうされますか?<br />
    <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"" method="POST"> 
     <select name="vegetable[]" multiple size="5">
        <option value="レタス">レタス
        <option value="トマト">トマト
        <option value="きゅうり">きゅうり
        <option value="オニオン">オニオン
        <option value="オリーブ">オリーブ
        <option value="チリ">チリ
        <option value="ピクルス">ピクルス
     </select><br />
    <input type="submit" name="submit" value="オーダー"> 
    </form>
<?php
    }
else{
    if(is_array($_POST['vegetable'])){
        foreach($_POST['vegetable'] as $vege){
            echo($vege .'と');} ?>
でよろしいですね?<br />
オススメのソースは
<?php 
    if(count($_POST['vegetable']) >= 5 ){
        $recommend="BBQソース";}
    elseif(count($_POST['vegetable']) >= 3 ){
        $recommend="スイートオニオンソース";}
    else{$recommend="ハニーマスタード";} 
            echo($recommend); ?>になります
<?php
}
    else { echo('野菜お嫌いなんですね'); }
}
?>
</body>
</html>

苦心の末にできたのがこれ

途中でひっかかって修正した部分は、
・<select name="vegetable[]"の[]を付け忘れる⇒データ取得されず
・if(count($_POST['vegetable']) >= 5 )をif(count($_POST['vegetable']); >= 5 )に
・オススメソースのif構文で延々とエラー⇒手打ちで書きなおしたらなぜか通る
最後のやつはいろいろ変えて試して相当時間食いました。半時間ほど

あと$_SERVER['PHP_SELF']はXSS脆弱性があるらしい
対策等を見つけましたが、今は深入りすべきではないと判断


▼今日学んだこと
・$aaa=array(a,b,c) 変数に配列を代入
・$aaa=( a => b, c => d) 連想配列の書き方の1つ
・foreach($aaa as $aa){} 配列を全部繰り返し
・配列をいじる関数の存在 countとかexplodeとか
・print_rで見ながらデバッグ

No comments:

Post a Comment